我的目标是创建一个基本程序,在语义上比较字符串并决定哪个更相似(在语义方面)。现在我不想在NTLK
或SKlearn
或Gensim
中从头构建一个新的(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
,但结果也很差(实际上它们甚至更糟)。
我可以在上面的程序中修复哪些内容以获取更合理的结果?
还有其他更快速的方法来进行语义比较吗?
答案 0 :(得分:0)
我是ParallelDots的数据科学家之一。虽然很遗憾您没有得到理想的结果,但请注意,通过API提供的一般模型会在新闻和推特等公共数据集上进行培训。
在语义相似度API的情况下,我们已经在新闻语料库上进行了训练,如果读取一般新闻文章,就不太可能获得肿块和肿胀的相关性。
在不同的语境下,lump这个词在英语中有很多不同的含义,它使得模型具有高度数据依赖性。例如,在金融世界中,总体上更接近于总和,投资等。
如果您尝试在域数据上找到语义相关性,我建议您利用ParallelDots Enterprise服务来自定义数据的语义相关性模型。您需要大量未标记数据来进行自定义,并且您可以从更高的准确性中受益,这只会随着更多数据迭代添加到模型中而得到改善。
我将以软件开发人员观察到的一般性说明结束答案,因为他们倾向于像AI这样具有概率性质的服务。作为一名软件工程师,我们接受过培训,可以在结果不符合我们对一组输入的期望时进行故障排除,但是在机器学习方面;在尝试调试并得出结论之前,我们倾向于在足够大的样本上测试模型。我将鼓励软件开发人员构建测试集并在其上运行AI模型以查找准确度指标并评估该模型是否对其数据集有用。