【翻译】文本相似度计算:如何估计两个文本之间相似程度?
文本相似的计算场景有很多:
- 搜索引擎:我们需要知道文本和搜索语句之间的关联程度;比如问答软件需要通过文本相似度计算给出数据库中依存的与用户输入文本最相近的条目。
- 法律事务:我们需要通过文本相似度计算检索出与新立法条最为接近的法律条文,确保条目之间不会有冲突。
- 咨询行业:AI 系统需要根据客户多种多样的问询给出一个标准回答。在这个系统中,AI 系统需要通过文本相似度计算辨别出具有不同表现形式但相同语义的问句,比如“我的快递怎么了”和“我的包裹怎么了”,用户应该得到的是相同的回答。
那么什么是文本相似度计算呢?
文本相似度,指的是两个文本片段在表层(词汇相似度)和含义(语义相似度)上两个方面上的相近程度。
- 在表层上:如果你只考虑词汇级别的相似度,那么那些 4 个单词里有 3 个单词重合的句子都会被认为是相似的。这种方法不会考虑文本语境对词汇的词义带来的影响,也不会考虑整个句子的语义。
- 在含义上:我们不仅要关注词汇上的重复数目,还要关注上下文去更充分地捕捉词义。为了考虑语义相似度,我们要注重于篇章、段落层面上的语义挖掘。因为即使两句话词汇上完全一致,也可能有完全不一样的意思。
我们知道,任何一个句子都有深层结构:
mouse is the object of ate in the first case and food is the object of ate in the second case
由于词序常常会导致语义的希望,我们希望我们的 sentence embedding 能对这种变化敏感。而幸运的是,我们的词向量经过多年的进化,已经能够区别record the play
和 play the record
的区别了。
那么,我们的制胜秘诀是?
我们的大方向是,将文本表示成特征向量,然后比较文本之间的特征向量的距离来确定文本之间的相似度。我们有许多方式去计算文本的语义特征和深层结构。有监督的方法可以帮助 sentence embedding 更直接地学习到一个句子的语义。
下面,我们将比较计算语义相似度的最流行的集中做法,并比较他们的表现。
方法 | 效果 |
---|---|
Jaccard Similarity | 😢😢😢 |
Different embedding + K-means | 😢😢 |
Different embedding + Cosine Similarity | 😢 |
Word2Vec + Smooth Inverse Frequency + Cosine Similarity | 😊 |
Different embeddings + LSI + Cosine Similarity | 😢 |
Different embeddings + LDA + Jensen-Shannon distance | 😊 |
Different embeddings + Word Mover Distance | 😊😊 |
Different embeddings + Variantional Auto Encoder(VAE) | 😊😊 |