我的目标是创建一个基本程序,该程序在语义上比较字符串并决定哪个与哪个更相似(在语义方面)。现在,我不想从头开始构建一个新的(doc2vec?)模型,NTLK
或SKlearn
或Gensim
,但我想测试已经存在的可以进行语义分析的API。
具体来说,我选择测试ParallelDots AI API
,因此我用python编写了以下程序:
import paralleldots
api_key = "*******************************************"
paralleldots.set_api_key(api_key)
phrase1 = "I have a swelling on my eyelid"
phrase2 = "I have a lump on my hand"
phrase3 = "I have a lump on my lid"
print(phrase1, " VS ", phrase3, "n")
print(paralleldots.similarity(phrase1, phrase3), "nn")
print(phrase2, " VS ", phrase3, "n")
print(paralleldots.similarity(phrase2, phrase3))
这是我从 API 得到的响应:
I have a swelling on my eyelid VS I have a lump on my lid
{'normalized_score': 1.38954, 'usage': 'By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions', 'actual_score': 0.114657, 'code': 200}
I have a lump on my hand VS I have a lump on my lid
{'normalized_score': 3.183968, 'usage': 'By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions', 'actual_score': 0.323857, 'code': 200}
这个回答对我来说相当令人失望。很明显,这句话
我的眼睑上有肿块
在语义上几乎与短语相同
我的眼睑肿胀
它也与短语有关
我的手上有肿块
因为他们指的是肿块,但显然它根本不像前一个那样接近。但是,ParallelDots AI API
输出的结果几乎完全相反。
如果我是对的,ParallelDots AI API
是用于语义分析的最流行的 API 之一,以及其他 APIDandelion API
等,但它的结果令人失望。我预计这些 API 使用了一些丰富的同义词数据库。我也用这三个短语测试了Dandelion API
,但结果也很差(实际上它们更糟)。
我可以在上面的程序中修复什么以检索更合理的结果?
有没有其他更快的方法来语义上比较字符串?
我是ParallelDots的数据科学家之一。虽然很遗憾您没有获得预期的结果,但请注意,通过 API 提供的通用模型是在新闻和 Twitter 等公开可用的数据集上进行训练的。
在语义相似性API的情况下,我们已经在新闻语料库上对其进行了训练,如果阅读一般新闻文章,则不太可能发现肿块和肿胀的相关性。
仅仅 lump 这个词在不同的上下文下在英语中就有这么多不同的含义,这使得模型高度依赖数据。例如,在金融世界中,Lump更接近于总和,投资等。
如果您试图在域数据上查找语义相关性,我建议您利用 ParallelDots Enterprise 服务来自定义数据的语义相关性模型。您需要大量未标记的数据语料库来进行自定义,并且您可以从更高的准确性中受益,这种准确性只会随着更多数据迭代添加到模型中而提高。
我将以一个一般性的注释来结束答案,我在软件开发人员中观察到,当他们倾向于像AI这样的服务时,本质上是概率性的。作为一名软件工程师,我们接受过培训,当结果不是我们对一组输入的期望时,我们会进行故障排除,但在机器学习中;我们倾向于在尝试调试模型并得出结论之前,先在足够大的样本上测试模型。我将鼓励软件开发人员构建一个测试集并在其上运行AI模型,以找到准确性指标并评估该模型是否对他们的数据集有用。