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

时间:2018-04-20 16:43:37

标签: python nlp semantics similarity

我的目标是创建一个基本程序,在语义上比较字符串并决定哪个更相似(在语义方面)。现在我不想在NTLKSKlearnGensim中从头构建一个新的(doc2vec?)模型,但我想测试已经存在的可以进行语义的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), "\n\n")

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以及Dandelion API等其他API,但它会带来如此令人失望的结果。我希望这些API使用一些丰富的同义词数据库。我还用这三个短语测试了Dandelion API,但结果也很差(实际上它们甚至更糟)。

我可以在上面的程序中修复哪些内容以获取更合理的结果?

还有其他更快速的方法来进行语义比较吗?

1 个答案:

答案 0 :(得分:0)

我是ParallelDots的数据科学家之一。虽然很遗憾您没有得到理想的结果,但请注意,通过API提供的一般模型会在新闻和推特等公共数据集上进行培训。

在语义相似度API的情况下,我们已经在新闻语料库上进行了训练,如果读取一般新闻文章,就不太可能获得肿块和肿胀的相关性。

在不同的语境下,lump这个词在英语中有很多不同的含义,它使得模型具有高度数据依赖性。例如,在金融世界中,总体上更接近于总和,投资等。

如果您尝试在域数据上找到语义相关性,我建议您利用ParallelDots Enterprise服务来自定义数据的语义相关性模型。您需要大量未标记数据来进行自定义,并且您可以从更高的准确性中受益,这只会随着更多数据迭代添加到模型中而得到改善。

我将以软件开发人员观察到的一般性说明结束答案,因为他们倾向于像AI这样具有概率性质的服务。作为一名软件工程师,我们接受过培训,可以在结果不符合我们对一组输入的期望时进行故障排除,但是在机器学习方面;在尝试调试并得出结论之前,我们倾向于在足够大的样本上测试模型。我将鼓励软件开发人员构建测试集并在其上运行AI模型以查找准确度指标并评估该模型是否对其数据集有用。