Machine learning 寻找两个短句或短文之间语义相似性的最新方法(在概念层面)

Machine learning 寻找两个短句或短文之间语义相似性的最新方法(在概念层面),machine-learning,nlp,artificial-intelligence,nltk,similarity,Machine Learning,Nlp,Artificial Intelligence,Nltk,Similarity,我正在努力寻找短句和文章之间的相似之处。我使用了很多现有的方法,比如tf-idf、word2vec等,但是结果还不错。我发现最相关的度量是单词移动距离,然而,它的结果并不比其他度量好。我知道这是一个具有挑战性的问题,但是,我想知道是否有新的方法可以在更高的层次或概念层次上找到近似的相似性,而不仅仅是匹配单词。特别是,任何替代性的新方法,如单词移动距离,它会让句子或文章的语义稍微高一点?老实说,目前我所知道的最好的方法是AMR: 关于AMR,请点击此处: 此处的文档: 您可以使用类似JAMR(

我正在努力寻找短句和文章之间的相似之处。我使用了很多现有的方法,比如tf-idf、word2vec等,但是结果还不错。我发现最相关的度量是单词移动距离,然而,它的结果并不比其他度量好。我知道这是一个具有挑战性的问题,但是,我想知道是否有新的方法可以在更高的层次或概念层次上找到近似的相似性,而不仅仅是匹配单词。特别是,任何替代性的新方法,如单词移动距离,它会让句子或文章的语义稍微高一点?

老实说,目前我所知道的最好的方法是AMR:

  • 关于AMR,请点击此处:
  • 此处的文档:
您可以使用类似JAMR(请参见此处:)的系统为您的句子生成AMR,然后可以使用Smatch(请参见此处:)比较两个生成的AMR的相似性


您尝试做的事情非常困难,而且是一个正在进行的研究领域。

老实说,目前我所知道的最好的方法是AMR:

  • 关于AMR,请点击此处:
  • 此处的文档:
您可以使用类似JAMR(请参见此处:)的系统为您的句子生成AMR,然后可以使用Smatch(请参见此处:)比较两个生成的AMR的相似性


你要做的是非常困难的,而且是一个正在进行的研究领域。

显然,这是一个巨大而繁忙的研究领域,但我想说,你可以研究两种广泛的方法:

首先,有一些方法可以以无监督的方式学习句子嵌入,例如,在或中使用

此外,还存在从标记数据学习句子嵌入的监督方法。最近的一个是,它在斯坦福自然语言推理数据集上训练句子嵌入,并表明这些嵌入可以成功地用于一系列NLP任务。代码是


你可能也会从中得到一些启发。

显然,这是一个庞大而繁忙的研究领域,但我想说,有两种方法可以供你研究:

首先,有一些方法可以以无监督的方式学习句子嵌入,例如,在或中使用

此外,还存在从标记数据学习句子嵌入的监督方法。最近的一个是,它在斯坦福自然语言推理数据集上训练句子嵌入,并表明这些嵌入可以成功地用于一系列NLP任务。代码是


你也可以从中找到一些灵感。

这是基于4个月前发表的一篇论文的最新成果

步骤1:

使用gensim加载合适的模型,计算句子中单词的单词向量,并将其存储为单词列表

第二步:计算句子向量

句子间语义相似度的计算以前很困难,但最近一篇名为“”的论文提出了一种简单的方法,通过计算句子中单词向量的加权平均值,然后去除平均向量在其第一主成分上的投影。这里单词w的权重是/(a+p(w)),其中a为参数,p(w)为(估计的)字频,称为平滑反向频率。此方法的性能明显更好

给出了一个利用平滑逆频率(SIF)计算句子向量的简单程序

第三步:使用sklearn cosine_相似度为句子加载两个向量并计算相似度


这是计算句子语义相似度最简单有效的方法。

这是基于4个月前发表的一篇论文的最新方法

步骤1:

使用gensim加载合适的模型,计算句子中单词的单词向量,并将其存储为单词列表

第二步:计算句子向量

句子间语义相似度的计算以前很困难,但最近一篇名为“”的论文提出了一种简单的方法,通过计算句子中单词向量的加权平均值,然后去除平均向量在其第一主成分上的投影。这里单词w的权重是/(a+p(w)),其中a为参数,p(w)为(估计的)字频,称为平滑反向频率。此方法的性能明显更好

给出了一个利用平滑逆频率(SIF)计算句子向量的简单程序

第三步:使用sklearn cosine_相似度为句子加载两个向量并计算相似度


这是计算句子语义相似度最简单有效的方法。

您可以对每对名词使用WordNet的语义相似度。 要快速查看,您可以输入bird-noun-1和chair-noun-1并选择wordnet,它将为您提供:

Resnik 0.315625756544

林0.0574161071905

蒋和康拉德0.0964964414156


Python代码位于:

您可以对每对名词使用WordNet的语义相似性。 要快速查看,您可以输入bird-noun-1和chair-noun-1并选择wordnet,它将为您提供:

Resnik 0.315625756544

林0.0574161071905

蒋和康拉德0.0964964414156


Python代码位于:

恐怕你的问题不适合这样做。如果你要求其他现有工具的指导,那就被认为是离题了。如果你想看到人们发明新方法,你需要为一个研究项目获得资金。顺便说一句,使用单词嵌入不是“仅仅匹配单词”.它应该在更高的语义层次上工作。@lenz我没有