❶ 文本相似度算法
TF是指归一化后的词频,IDF是指逆文档频率。给定一个文档集合D,有d1,d2,d3,......,dn∈D。文档集合总共包含m个词(注:一般在计算TF−IDF时会去除如“的”这一类的停用词),有w1,w2,w3,......,wm∈W。我们现在以计算词wi在文档dj中的TF−IDF指为例。
TF的计算公式为:
TF=freq(i,j) / maxlen(j)
在这里freq(i,j) 为wi在dj中出现的频率,maxlen(j)为dj长度。
TF只能时描述词在文档中的频率,但假设现在有个词为”我们“,这个词可能在文档集D中每篇文档中都会出现,并且有较高的频率。那么这一类词就不具有很好的区分文档的能力,为了降低这种通用词的作用,引入了IDF。
IDF的表达式如下:
IDF=log(len(D) / n(i))
在这里len(D)表示文档集合D中文档的总数,n(i)表示含有wi这个词的文档的数量。
得到TF和IDF之后,我们将这两个值相乘得到TF−IDF的值:
TF−IDF=TF∗IDF
TF可以计算在一篇文档中词出现的频率,而IDF可以降低一些通用词的作用。因此对于一篇文档我们可以用文档中每个词的TF−IDF组成的向量来表示该文档,再根据余弦相似度这类的方法来计算文档之间的相关性。
BM25算法通常用来做搜索相关性评分的,也是ES中的搜索算法,通常用来计算query和文本集合D中每篇文本之间的相关性。我们用Q表示query,在这里Q一般是一个句子。在这里我们要对Q进行语素解析(一般是分词),在这里以分词为例,我们对Q进行分词,得到q1,q2,......,qt这样一个词序列。给定文本d∈D,现在以计算Q和d之间的分数(相关性),其表达式如下:
Score(Q,d)=∑ti=1wi∗R(qi,d)
上面式子中wi表示qi的权重,R(qi,d)为qi和d的相关性,Score(Q,d)就是每个语素qi和d的相关性的加权和。
wi的计算方法有很多,一般是用IDF来表示的,但这里的IDF计算和上面的有所不同,具体的表达式如下:
wi=IDF(qi)=logN−n(qi)+0.5n(qi)+0.5
上面式子中N表示文本集合中文本的总数量,n(qi)表示包含qi这个词的文本的数量,0.5主要是做平滑处理。
R(qi,d)的计算公式如下:
R(qi,d)=fi∗(k1+1)fi+K∗qfi∗(k2+1)qfi+k2
其中
K=k1∗(1−b+b∗dlavgdl)
上面式子中fi为qi在文本d中出现的频率,qfi为qi在Q中出现的频率,k1,k2,b都是可调节的参数,dl,avgdl分别为文本d的长度和文本集D中所有文本的平均长度。
一般qfi=1,取k2=0,则可以去除后一项,将上面式子改写成:
R(qi,d)=fi∗(k1+1)fi+K
通常设置k1=2,b=0.75。参数b的作用主要是调节文本长度对相关性的影响。
❷ 文本算法是什么意思
在文本信息空间内寻找任何两个最相关的文本信息,并将之简并成一个文本信息,从而实现信息数量的收缩。
简并算法的实现通过比较整个信息空间内的所有文本的相关性(相识性),得到相互之间的相关性后两两(注)进行配对。配对的要求是这两个文本信息的相关性最大,例如A 找到了文档B,那么B 也一定找到最相关的文档就是A 。
注,某些情况A 最相近的文档是C ,那么B 而B 最相关的文档也是C ,存在一种情况,A,B,C 三者之间自恰,就是构成空间信息最近的一个三角形。
得到了最相似文档后,将只进行平均化,或者简单的迭加。
信息空间中独立信息的数量会减少到原来的一半以下,然后重复实现1 的过程,在进行兼并。
信息最后简并到唯一的一个信息,就是整个信息文本的平均值。
画出信息树的结构,就能够根据要进行规模不同大小的聚类进行自动聚类了。
❸ 经典检索算法:BM25原理
本文cmd地址: 经典检索算法:BM25原理
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于 概率检索模型 提出的算法,再用简单的话来描述下bm25算法:我们有一个query和一批文档Ds,现在要计算query和每篇文档D之间的相关性分数,我们的做法是,先对query进行切分,得到单词$q_i$,然后单词的分数由3部分组成:
最后对于每个单词的分数我们做一个求和,就得到了query和文档之间的分数。
讲bm25之前,我们要先介绍一些概念。
BIM(binary independence model)是为了对文档和query相关性评价而提出的算法,BIM为了计算$P(R|d,q)$,引入了两个基本假设:
假设1
一篇文章在由特征表示的时候,只考虑词出现或者不出现,具体来说就是文档d在表示为向量$vec x=(x_1,x_2,...,x_n)$,其中当词$t$出现在文档d时,$x_t=1$,否在$x_t=0$。
假设2
文档中词的出现与否是彼此独立的,数学上描述就是$P(D)=sum_{i=0}^n P(x_i)$
有了这两个假设,我们来对文档和query相关性建模:
接着因为我们最终得到的是一个排序,所以,我们通过计算文档和query相关和不相关的比率,也可得文档的排序,有下面的公式:
由于每个 xt 的取值要么为 0 要么为 1,所以,我们可得到:
我们接着做下面的等价变换:
其中N是总的文档数,dft是包含t的文档数。
以上就是BIM的主要思想,后来人们发现应该讲BIM中没有考虑到的词频和文档长度等因素都考虑进来,就有了后面的BM25算法,下面按照
3个部分来介绍bm25算法。
,也就是有多少文档包含某个单词信息进行变换。如果在这里使用 IDF 的话,那么整个 BM25 就可以看作是一个某种意义下的 TF-IDF,只不过 TF 的部分是一个复杂的基于文档和查询关键字、有两个部分的词频函数,还有一个就是用上面得到的ct值。
tf-idf中,这个信息直接就用“词频”,如果出现的次数比较多,一般就认为更相关。但是BM25洞察到:词频和相关性之间的关系是非线性的,具体来说,每一个词对于文档相关性的分数不会超过一个特定的阈值,当词出现的次数达到一个阈值后,其影响不再线性增长,而这个阈值会跟文档本身有关。
在具体操作上,我们对于词频做了”标准化处理“,具体公式如下:
其中,tftd 是词项 t 在文档 d 中的权重,Ld 和 Lave 分别是文档 d 的长度及整个文档集中文档的平均长度。k1是一个取正值的调优参数,用于对文档中的词项频率进行缩放控制。如果 k 1 取 0,则相当于不考虑词频,如果 k 1取较大的值,那么对应于使用原始词项频率。b 是另外一个调节参数 (0≤ b≤ 1),决定文档长度的缩放程度:b = 1 表示基于文档长度对词项权重进行完全的缩放,b = 0 表示归一化时不考虑文档长度因素。
如果查询很长,那么对于查询词项也可以采用类似的权重计算方法。
其中,tftq是词项t在查询q中的权重。这里k3 是另一个取正值的调优参数,用于对查询中的词项tq 频率进行缩放控制。
于是最后的公式是:
gensim在实现bm25的时候idf值是通过BIM公式计算得到的:
然后也没有考虑单词和query的相关性。
此处 EPSILON 是用来表示出现负值的时候怎么获取idf值的。
总结下本文的内容:BM25是检索领域里最基本的一个技术,BM25 由三个核心的概念组成,包括词在文档中相关度、词在查询关键字中的相关度以及词的权重。BM25里的一些参数是经验总结得到的,后面我会继续介绍BM25的变种以及和其他文档信息(非文字)结合起来的应用。
BM25 算法浅析
搜索之 BM25 和 BM25F 模型
经典搜索核心算法:BM25 及其变种
信息检索导论
❹ 文本相似度-bm25算法原理及实现
BM25算法,通常用来作搜索相关性平分。一句话概况其主要思想:对Query进行语素解析,生成语素qi;然后,对于每个搜索结果D,计算每个语素qi与D的相关性得分,最后,将qi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。
BM25算法的一般性公式如下:
其中,Q表示Query,qi表示Q解析之后的一个语素(对中文而言,我们可以把对Query的分词作为语素分析,每个词看成语素qi。);d表示一个搜索结果文档;Wi表示 语素qi的权重 ;R(qi,d)表示 语素qi与文档d的相关性得分 。
下面我们来看如何定义 。判断 一个词的权重 ,方法有多种,较常用的是IDF。这里以IDF为例,公式如下:
其中,N为索引中的 全部文档数 ,n(qi)为 包含了qi的文档数。
根据IDF的定义可以看出,对于给定的文档集合, 包含了qi的文档数越多,qi的权重则越低 。也就是说,当很多文档都包含了qi时,qi的区分度就不高,因此使用qi来判断相关性时的重要度就较低。
我们再来看语素qi与文档d的相关性得分 。首先来看BM25中相关性得分的一般形式:
其中,k1,k2,b为 调节因子 ,通常根据经验设置,一般k1=2,k2=1,b=0.75;fi为 qi在d中的出现频率 ,qfi为 qi在Query中的出现频率 。dl为 文档d的长度 ,avgdl为 所有文档的平均长度 。由于绝大部分情况下,qi在Query中只会出现一次, 即qfi=1 ,因此公式可以简化为:
从K的定义中可以看到,参数b的作用是 调整文档长度对相关性影响的大小 。 b越大,文档长度的对相关性得分的影响越大 ,反之越小。而 文档的相对长度越长,K值将越大,则相关性得分会越小 。这可以理解为,当文档较长时,包含qi的机会越大,因此,同等fi的情况下,长文档与qi的相关性应该比短文档与qi的相关性弱。
综上,BM25算法的相关性得分公式可总结为:
分段再分词结果
列表的每一个元素是一个dict,dict存储着 一个文档中每个词的出现次数
存储每个词的idf值
['自然语言', '计算机科学', '领域', '人工智能', '领域']与每一句的相似度
https://github.com/jllan/jannlp/blob/master/similarity/bm25.py
❺ BM25算法解析
参考文档: http://luokr.com/p/7
ElasticSearch相关度是根据打分机制来计算的。对于每一条搜索结果都会计算出相应的得分,分数越高,代表相关度越高。BM25算法是ElstaticSearch默认的打分算法。
BM25算法通常用来作为搜索相关性评分:对查询经进行语素解析,生成语素气;然后,对于每个搜索结果d,计算每个语素气与d的相关性得分,最后,将气相对于d的相关性得分进行加权求和,从而得到查询与d的相关性得分。
BM25:
首先解析公式前半段:
科普:IDF又叫做逆向文档频率,意思就是 对于给定的文档集合(意思就是公文索引库),包含该关键字的文档越多,该关键字的权重越低(对于整个索引库来说,该关键字出现的次数越多,说明此关键字的参考价值越低);
其中,Q表示查询,补气(就是把一句搜索的话分成若干个关键词)标识Q解析之后的一个语素(对中文而言,我们可以把对查询的分词作为语素分析,每个词看成语素补气);d标识一个搜索结果文档(就相当与一条搜索出来的公文),无线表示语素气的权重。
IDF(逆向文档频率)计算公式如下:
其中,N为索引中的全部文档数,N(QI)为包含了气(也就是关键字)的文档数。
再来看关键词与文档d的相关性得分R(气,d),也就是BM25算法的后半部分
其中,K1为调节因子,b=0.75,avgdl为所有文档的平均长度,dl为文档d的长度,从K的定义中可以看出,参数b的作用是调整文档长度对相关性影响的大小,b越大,文档长度的对相关性得分影响越大,而文档相对长度越长,K值将越大,则相关性的分会越小。
总结:
影响ElasticSearch得分因素:
1.词频,搜索关键词在文档d中出现的次数成正比
2.逆向文档频率,搜索关键词在索引库中出现的次数成反比
3.文档d的长度成反比
4.搜索语句在文档d中的匹配度成正比
❻ 如何计算两个文档的相似度
如何计算两个文档的相似度
winmerge用这个
操作步骤为:
FC——文件比较命令
1.功能:比较文件的异同,并列出差异处。
2.类型:外部命令
3.格式:FC[盘符:][路径名]〈文件名〉[盘符:][路径名][文件名][/A][/B][/C][/N]
4.使用说明:
(1)选用/A参数,为ASCII码比较模式;
(2)选用/B参数,为二进制比较模式;
(3)选用/C参数,将大小写字符看成是相同的字符。
(4)选用/N参数,在ASCII码比较方式下,显示相异处的行号。
❼ 相关性分析的算法有那些
就是一个简单的pearson相关系数,但是前提是两组变量呈正态性,做散点图显示存在相关性。如果不是正态总体可以用spearnman相关系数。
模型就是一个简单的直线相关。可以求出相关系数,亦可以做简单的直线回归。
❽ 计算机如何理解事物的相关性-文档的相似度判断
生活中,我们经常会对比两个事物的 相关性 ,也可以叫做 相似度 。
人类会根据自己的经验,很容易的判断两件事物是否相似,或者相似度是多少。那如何让 计算机 也能够进行这样的判断呢?
我们都知道,计算机并没有思维,它只能理解数字。所以,如果想让计算机理解我们现实世界中的事物,必须先把现实事物转换成数字。
空间向量模型假设,任何事物都可以转换成 N 维空间中的一个点 ,这个点称为 向量 ,然后通过计算 向量之间的距离或夹角 ,来判断向量的之间相关性,进而判断事物之间的相关性。
什么是向量
向量代表了事物的特征。
向量是相对标量而言,标量只是单个数字,没有方向性。向量也叫矢量,由一组数字构成,具有方向性。
例如,用下图中的 x 表示向量,其中 n 表示向量的维度:
两个向量所对应的两点之间的距离就是向量的距离,距离可以描述不同向量在向量空间中的差异,也就是现实事物之间的差异。
常用的计算距离的方法有四种:
其中使用最多的是欧氏距离,下面一一介绍。
麦哈顿距离
麦哈顿距离 可以理解为街道距离,或者出租车距离。
可以看到下图中,从A 点到B 点,不管是走 1线路 还是 2线路 ,距离都是一样的,这个线路的距离就是麦哈顿距离。
二维空间中的两个点 A(x1, x2) 和 B(y1, y2) ,麦哈顿距离的计算公式为:
n 维空间中的两个点 A(x1...xn) 和 B(y1...yn) ,麦哈顿距离的计算公式为:
欧式距离
欧式距离 也叫欧几里得距离,比较好理解,就是直线距离。
如下图,A 点到B 点的直线距离就是欧式距离。
对于二维空间中的两个点 A(x1, x2) 和 B(y1, y2) ,欧式距离的计算公式为:
对于 n 维空间中的两点 A(x1...xn) 和 B(y1...yn) ,欧式距离的计算公式为:
切比雪夫距离
切比雪夫距离 可以类比为在方格中走格子,怎样走的格子数最少。
如下图中,从A 格子走到B 格子,先斜线走,再直线走,最终走的 格子数 就是切比雪夫距离。
对于二维空间中的两个点 A(x1, x2) 和 B(y1, y2) ,切比雪夫距离的计算公式为:
上面公式的含义是, ∣x1 − y1∣ 和 ∣x2 − y2∣ 两者的最大者。
对于 n 维空间中的两点 A(x1...xn) 和 B(y1...yn) ,切比雪夫距离的计算公式为:
闵可夫斯基距离
闵可夫斯基距离 也叫做闵氏距离,它并不是一种单独的距离,而是上面三种距离的统一。
对于二维空间中的两个点 A(x1, x2) 和 B(y1, y2) ,闵可夫斯基距离的计算公式为:
对于 n 维空间中的两点 A(x1...xn) 和 B(y1...yn) ,闵可夫斯基距离的计算公式为:
根据 p 取值的不同,闵可夫斯基距离表示不同的距离:
向量也是有大小的,向量的大小就是向量的长度。
向量的长度也叫 向量的模 ,它是向量所对应的 点到空间原点的距离 ,通常使用 欧氏距离 来表示向量的长度。
数学中有一个概念叫做 范数 ,范数常被用来衡量向量的长度。
范数有4 种,分别对应向量的4 种距离:
向量的夹角经常用 余弦值 表示。
对于二维空间中的两个点 A(x1, x2) 和 B(y1, y2) ,余弦的计算公式为:
对于 n 维空间中的两点 A(x1...xn) 和 B(y1...yn) ,余弦的计算公式为:
夹角的余弦取值范围是 [-1, 1] ,那么:
我们可以将向量的距离与夹角展现在同一个 N 维坐标系中,如下:
向量的余弦取值范围是 [-1, 1] ,余弦值越大,表示越相似,正好与相似度成正比。
对于向量之间的距离,通常用 欧式距离 ED表示, ED 越小,表示越相似,与相似度成反比,而且 ED 的取值范围非常大。
所以通常会将欧式距离进行 1/(ED+1) 归一化 处理,用 ED' 表示。 ED' 的取值范围是 [0, 1] ,并且与相似度成正比:
应用空间向量模型的机器学习算法有 K 近邻(KNN)分类、K 均值(K-Means) 聚类 等。
为了让计算机能够判断现实事物的相似度,我们引出了 空间向量 的概念。
下面我们来看如何使用空间向量,来判断 文档相似度 。
比如,现在我们有两个中文句子,要判断这两个句子的相似度:
要想将文档转换成向量,首先需要对文档进行分词。
分词
我们可以使用 jieba 对这两个句子进行分词,结果如下:
可以得到所有词的集合:
计算每个句子的分词的词频:
从而可以得到词频向量:
上文中,我们介绍了,可以通过向量的 距离 或者 余弦夹角 来度量向量之间的相似度。这里我们使用余弦夹角来计算。我们知道 N 维空间的余弦公式为:
从而可以计算余弦夹角为:
可以看到,最终算出的余弦夹角为 0.85 ,比较接近 1 ,说明这两个句子还是很相近的。
本篇文章主要介绍了以下几点:
(本节完。)
推荐阅读:
决策树算法-理论篇-如何计算信息纯度
决策树算法-实战篇-鸢尾花及波士顿房价预测
朴素贝叶斯分类-理论篇-如何通过概率解决分类问题
朴素贝叶斯分类-实战篇-如何进行文本分类
❾ BM25算法
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于 概率检索模型 提出的算法,再用简单的话来描述下bm25算法:我们有一个query和一批文档Ds,现在要计算query和每篇文档D之间的相关性分数,我们的做法是,先对query进行切分,得到单词,然后单词的分数由3部分组成:
最后对于每个单词的分数我们做一个求和,就得到了query和文档之间的分数。
讲bm25之前,我们要先介绍一些概念。
BIM(binary independence model)是为了对文档和query相关性评价而提出的算法,BIM为了计算,引入了两个基本假设:
假设一:二元假设
所谓二元假设,类似于布尔模型的表示方法,一篇文章在由特征表示的时候,以特征“出现”和“不出现”两种情况来表示,也可以理解为相关不相关。
假设二:词汇独立性假设
所谓独立性假设,是指文档里出现的单词之间没有任何关联,任一个单词在文章中的分布率不依赖于另一个单词是否出现,这个假设明显与事实不符,但是为了简化计算,很多地方需要做出独立性假设,这种假设是普遍的。
在以上两个假设的前提下,二元独立模型即可以对两个因子P(D|R)和P(D|NR)进行估算(条件概率),举个简单的例子,文档D中五个单词的出现情况如下:{1,0,1,0,1} 0表示不出现,1表示出现。用Pi表示第i个单词在相关文档中出现的概率,在已知相关文档集合的情况下,观察到文档D的概率为:
对于因子P(D|NR),我们假设用Si表示第i个单词在在不相关文档集合中出现的概率,于是在已知不相关文档集合的情况下,观察到文档D的概率为:
于是我们可以得到下面的估算
可以将各个因子规划为两个部分,一部分是在文档D中出现的各个单词的概率乘积,另一部分是没在文档D中出现的各个单词的概率乘积,于是公式可以理解为下面的形式
对公式进行一下等价的变换,可得:
为了方便计算,对上述公式两边取log,得到:
那么如何估算概率Si和Pi呢,如果给定用户查询,我们能确定哪些文档集合构成了相关文档集合,哪些文档构成了不相关文档集合,那么就可以用如下的数据对概率进行估算:
根据上表可以计算出Pi和Si的概率估值,为了避免log(0),对估值公式进行平滑操作,分子+0.5,分母+1.0
代入估值公式得到:
这个公式代表的含义就是,对于同时出现在查询Q和文档D中的单词,累加每个单词的估值结果就是文档D和查询Q的相关性度量,在预先不知道哪些文档相关哪些文档不相关的情况下,可以使用固定值代替,这种情况下该公式等价于向量空间模型(VSM)中的IDF因子,实际证明该模型的实际使用结果不好,但是它是BM25模型的基础。
后来人们发现应该讲BIM中没有考虑到的词频和文档长度等因素都考虑进来,就有了后面的BM25算法。
BIM(二元假设模型)对于 单词特征 ,只考虑单词是否在 doc中出现过 ,并没有考虑 单词本身的相关特征 ,BM25在BIM的基础上引入单词在查询中的权值,单词在doc中的权值,以及一些经验参数,所以BM25在实际应用中效果要远远好于BIM模型。
BM25由3部分组成:
在第二部分中K因子代表了文档长度的考虑,dl是文档的长度,avdl是文档的平均长度,k1和b是调整参数,b为0时即不考虑文档长度的影响,经验表明b=0.75左右效果比较好。但是也要根据相应的场景进行调整。b越大对文档长度的惩罚越大,k1因子用于调整词频,极限情况下k1=0,则第二部分退化成1,及词频特征失效,可以证明k1越大词频的作用越大。
在我们不知道哪些文档相关,哪些文档不相关的情况下,将相关文档数R及包含查询词相关文档数r设为0,那么第一部分的BIM公式退化成:
就是IDF因子的定义,N是总文档数,n是查询词的tf信息,0.5是平滑因子。