两句话的意思之间的距离

Ria*_*bir 2 nlp linguistics semantic-analysis semantics

我正在寻找一种方法来衡量两个句子之间的语义距离.假设我们有以下句子:

(S1) The beautiful cherry blossoms in Japan. 
(S2) The beautiful Japan.
Run Code Online (Sandbox Code Playgroud)

通过消除单词"cherry","blossoms"和"in"从S1创建S2.我想定义一个在S1和S2之间提供高距离的函数.其原因在于它们确实具有显着不同的含义,因为美丽改变了樱花,而不是日本.

Cht*_*ect 7

正如罗布所指出的,这是一个非常棘手的问题.它要求程序不仅要理解语言语义,还要有百科知识.例如,当我们说"日本美丽的樱花"时,我们是在谈论一种美丽的樱桃,并且恰好在日本开花,或者我们在谈论一个单一的集体实体"樱花",它们是美丽的碰巧在日本?这需要百科知识和语言知识的结合.

从纯粹百科全书的角度来看,考虑句子

  1. 美丽的樱花在日本.
  2. 日本美丽的樱花.
  3. 美丽的花朵在日本.

前两个是相同的,而第三个是密切相关的,但不完全相同.基于这种知识建立句子距离超出了语法分析的范围,并且需要使用外部本体(例如樱花=樱花和樱花IS_A花).

话虽如此,基于句子的解析树可以做一点点.例如,如果您查看您提供的两个句子的选区解析树,您将能够将它们分解为短语(NP,VP等).对于许多示例,将两个句子之间的距离定义为其组成短语之间的距离的最大值就足够了,其中短语之间的距离又可以基于诸如WordNet的词汇数据库或诸如Yago的本体.

对于WordNet,一个可用于测量语义距离的包是基于Java的包WS4J.他们也有在线演示.这些语义距离基于本体图中两个项之间的路径距离(LESK除外,它简单地计算字典光泽中术语的重叠).

这远远不能完全解决测量语义距离的问题,但我希望它能给你一个起点.


Ria*_*bir 6

我认为研究在该领域取得了很多进展,现在由于词向量和转换器的发展,可以通过多种方法计算句子含义之间的距离:

  1. 谷歌通用句子编码器(USE)https : //tfhub.dev/google/universal-sentence-encoder/2

  2. 通过 facebook推断https : //github.com/facebookresearch/InferSent

  3. 平均词向量(具有余弦相似度)。

  4. Spacy还提供了基于词向量的两个句子之间的相似性:https : //spacy.io/usage/spacy-101

  5. ELMo : https://github.com/HIT-SCIR/ELMoForManyLangs

  6. 伯特https : //github.com/google-research/bert

  7. 艾伯特https : //github.com/google-research/ALBERT

  8. 罗伯塔https : //ai.facebook.com/blog/roberta-an-optimized-method-for-pretraining-self-监督-nlp-systems /

  9. XLNET : https://github.com/zihangdai/xlnet

  10. 伊莱克特拉https : //github.com/google-research/electra

等等