bm25

NLP 语义相似度计算 整理总结

不问归期 提交于 2020-01-18 14:51:16
更新中 更新时间: 2019-12-03 18:29:52 写在前面: 本人是喜欢这个方向的学生一枚,写文的目的意在记录自己所学,梳理自己的思路,同时share给在这个方向上一起努力的同学。写得不够专业的地方望批评指正,欢迎感兴趣的同学一起交流进步。 (参考文献在第四部分, 侵删 ) 一、背景 二、基本概念 三、语义相似度计算方法 四、参考文献 一、背景 在很多NLP任务中,都涉及到语义相似度的计算,例如: 在搜索场景下(对话系统、问答系统、推理等),query和Doc的语义相似度; feeds场景下Doc和Doc的语义相似度; 在各种分类任务,翻译场景下,都会涉及到语义相似度语义相似度的计算。 所以在学习的过程中,希望能够更系统的梳理一下这方面的方法。 二、基本概念 1. TF Term frequency即关键词词频,是指一篇文章中关键词出现的频率,比如在一篇M个词的文章中有N个该关键词,则 为该关键词在这篇文章中的词频。 2. IDF Inverse document frequency指逆向文本频率,是用于衡量关键词权重的指数,由公式 计算而得,其中D为文章总数,Dw为关键词出现过的文章数。 3. 向量空间模型 向量空间模型简称 VSM,是 VectorSpace Model 的缩写。在此模型中,文本被看作是由一系列相互独立的词语组成的,若文档 D 中包含词语 t1,t2,

2、TF-IDF和BM25

情到浓时终转凉″ 提交于 2019-12-26 00:34:36
这两者计算的都是文档和文本之间的相似度,如果是两个短文本貌似也可以。 1、TF-IDF = TF * IDF 假设文本是“我怎么这么帅气”,4个词,第一个词“我”, 文档1中一共有10个词,“我”有2次,这个词的词频都是2,这就是TF 第一个词“我”,在所有文档中,有“我”这个词的文档数是m,文档总数是n,则IDF = log(n/(m+1)) 所有词叠加就是这个文本和这个文档的相似度 优点:从常理来判断,一个词在这个文档中出现的次数越多,对于这个文档这个词就越重要;一个词在很多文档中都出现过,就说明这个词不能区分这些文档,重要性越低;这就是为何要tf *idf。 TF-IDF还可以用来统计多个文档中每个文档中的重要词。 缺点:分词可能会导致语义的变化;TF的值并没有归一化在一个合理的区间。 2、针对上面的缺点,提出了BM25:实际就是TF-IDF的变形 所以BM25就优化了TF的计算过程, fi词q在文档1中出现的频率。k1 = 2, b = 0.75,后面一项一般为1,dl是文档1的长度,avgdl是所以文档的平均长度,这样的话TF的值就归一化在一个区间了。 3、除了上面计算两个文本相似度的方法之外,还有DSSM、MatchPyramid、BiMPM、词向量 DSSM:把两个文本转换成低位向量,和词向量类似 MatchPyramid:这个比较巧妙了

搜索相关度算法 TF-IDF与BM25

两盒软妹~` 提交于 2019-12-23 04:31:19
TF-IDF VS BM25 在ES5.0版本之前,ES一直用的是TF-IDF来进行相关度算分;在5.0后的版本,ES换成了BM25版本。本文将从算法设计的角度,先介绍两个算法,再结合ES来尝试分析一下各自的优缺点。 算法介绍 TF-IDF和BM25都是用作ES中排序依据的核心部分,它们是组成Lucene中“field weight”的部分,“field weight”用来评测的是search term的匹配程度的。 TF-IDF TF-IDF的计算公式如下: score(q, d) = coord(q, d) * queryNorm(q) * \sum_{t\ in\ q} tf(t\ in\ d) * idf(t)^2*boost(t) * norm(t, d) 算法中用到的所有指标如下: TF, Term Frequency,:term 在当前文档中出现的次数 $TF(t\ in\ d) = \sqrt[2]{frequency} $ ;也就是说, 指定的term出现次数越多的文档,TF值越高 . IDF, Inverse Document Frequency, $IDF(t) = 1 + \log(\tfrac{numDocs}{docFreq + 1}) $ , 其中 docFreq 表示term出现的文档数目, numDocs 表示总的文档数。