字符串的语义相似性 - 结果不佳



我的目标是创建一个基本程序,该程序在语义上比较字符串并决定哪个与哪个更相似(在语义方面)。现在,我不想从头开始构建一个新的(doc2vec?)模型,NTLKSKlearnGensim,但我想测试已经存在的可以进行语义分析的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模型,以找到准确性指标并评估该模型是否对他们的数据集有用。

最新更新