❶ 文本相似度演算法
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是平滑因子。