我的目标很简单:我有一组字符串或一个句子,我想在文本语料库中找到最相似的一个。
例如,我有以下文本语料库:“图书馆的前部装饰着艺术家Millard Sheets设计的《生活之道》壁画。”
我想找到最类似于以下内容的原始语料库的子字符串:“图书馆的门面被涂上颜色”
所以我应该得到的输出是:“装饰图书馆的正面”
我想到的唯一一件事就是将原始句子分成可变长度的子字符串(例如,分为3、4、5个字符串的子字符串),然后使用{{1}中的string.similarity(substring)
之类的东西} python模块,用于评估目标文本与所有子字符串的相似性,然后将其保留为最高值。
这似乎是一种效率很低的方法。我能做些更好的事情吗?
答案 0 :(得分:1)
它可能在某种程度上有效,但是我不希望使用spacy相似性方法(平均单词向量)效果特别好。
您正在执行的任务与释义检测/识别和语义文本相似性相关,并且有很多现有工作。它经常用于窃检测和机器翻译系统评估之类的事情,因此您也可以通过查看这些领域找到更多方法。
如果您希望某些功能在英语中开箱即用,则建议使用terp,它是为MT评估而开发的,但对于释义检测非常有效:
https://github.com/snover/terp
大多数方法都设置为比较两个句子,因此这不能解决您可能的部分句子匹配问题。也许找到最相似的句子然后在该句子中寻找比整个句子匹配得更好的子字符串是有意义的?