用Golang寫一個搜索引擎(0x05)--- 文本相關(guān)性排序

上面我們已經(jīng)說過了一些倒排索引的東西脑题,并且也知道了如何來實現(xiàn)一個倒排索引完成檢索功能仇味,那么檢索完了以后如何排序呢学赛,這一篇簡單的說一下倒排索引的文本相關(guān)性排序,因為排序?qū)嵲谑翘珡?fù)雜了避诽,我們這里就說說文本的相關(guān)性排序,而且是最簡單的TD-IDF排序璃谨,之后有機會可以再說說整個搜索的排序算法有些什么沙庐。

文本相關(guān)性排序

首先明白幾個概念:

  • Term鲤妥,分詞以后最小的單位,比如用Golang寫一個搜索引擎拱雏,分詞以后就是棉安,golang铸抑,一個贡耽,搜索引擎,那么每一個詞就是一個Term鹊汛。
  • TF(Term Frequency)蒲赂,Term在文章中出現(xiàn)的頻率,就是當前term在文章中出現(xiàn)的頻率刁憋,就是term次數(shù)/總term數(shù)滥嘴,比如上文中的搜索引擎這個term的TF就是1/5,TF越高那么這篇文章中的這個詞就越重要至耻。
  • DF(Document Frequency)若皱,文檔頻率,就是某個Term在總文檔中出現(xiàn)的頻率有梆,比如總共有100個文檔是尖,其中搜索引擎這個term在10個文檔中出現(xiàn)了,那么他的IDF就是5/100=0.5泥耀。
  • IDF(Inverse Document Frequency)饺汹,逆文檔頻率,聽名字就知道是和上面的DF是反的痰催,用總文檔數(shù)除以包含term的文檔數(shù)兜辞,再求對數(shù)即可,上面的搜索引擎的IDF是log(100/5)

如何在一堆文章中找到包含關(guān)鍵詞的文章夸溶,倒排索引技術(shù)已經(jīng)幫我們解決了逸吵,只要分詞分得準確,那么找文章沒什么問題了缝裁。問題是找到一堆文章以后怎么進行排序扫皱,讓最重要的文章排在最前面,這里介紹一下相關(guān)性排序捷绑。

TF-IDF相關(guān)性排序

上面我們看到TF和IDF的概念韩脑,TF明顯作用就是表示一個term在文章中的重要程度,TF越高那么這個詞在文章中的重要程度越明顯粹污,IDF呢段多,IDF主要用來描述term在整體文章中的重要程度(也就是區(qū)分程度),IDF越高壮吩,那么這個term的整體重要性越高进苍,也就是區(qū)分度越大加缘,越能體現(xiàn)這個term的重要性。

為什么用log呢觉啊?其實我個人覺得啊拣宏,用不用log其實區(qū)別沒那么大,TF-IDF只是一種計算文本相關(guān)度的思想柄延,并不是一個有嚴格證明的公式蚀浆,所以用不用log區(qū)別不大,不過從信息論的角度看的話搜吧,妖人香農(nóng)提出的信息量的公式就是logX的樣子市俊,值越大信息量就越大,正好可以套在我們這滤奈,IDF越大摆昧,信息量也越大。

信息量是什么大家可以自己去百度蜒程,簡單描述起來就是某一件事情發(fā)生的概率的绅你,如果某件事情發(fā)生的概率是P,那么他的信息量就是 -logP昭躺,注意有個負號忌锯,比如中國隊男子足球隊和巴西隊男子足球隊打比賽,假設(shè)中國隊贏的概率是 0.01(可能高估了)领炫,但如果巴西隊贏了偶垮,根據(jù)公式算出來信息量幾乎沒有,因為誰都知道巴西會贏帝洪,但如果(我是說如果)最后中國隊贏了似舵,那么信息量算出來就是巨大的,肯定上各個頭版了葱峡,這也和我們的直覺比較一致砚哗,在IDF中,就是用的這個公式砰奕,不過吧負號放里面去了蛛芥,變成了log(1/P),而P就是DF军援,term在總文檔中出現(xiàn)的頻率常空。

TF和IDF合起來表示這個term的相關(guān)性,就是把這兩個值乘起來盖溺。

為什么要把這兩個概念合起來呢,第一個TF已經(jīng)可以描述term的重要性了铣缠,為什么還要用IDF呢烘嘱,主要可以解決兩個問題昆禽。

  • 去掉高頻詞的噪音,既然IDF可以簡單理解為term的信息量蝇庭,那么它主要就是為了去掉噪聲醉鳖,也就是去掉那些個信息量很小的term的影響。比如這個詞哮内,它的TF非常高盗棵,但實際上沒什么含義,但是你一算他的IDF北发,基本是0纹因,所以如果用TF*IDF的話,結(jié)果還是0琳拨,可以比較有效的去掉這類通用詞的干擾瞭恰。
  • 同時IDF還可以更好的區(qū)分重要的詞,如果一個term的IDF越高狱庇,證明帶這個term的文章的更加能用這個term來表示惊畏,這個很好理解,如果一個term只在某一篇文章中出現(xiàn)密任,那么這個詞更能代表這篇文章的內(nèi)容颜启。

最后,多個term聯(lián)合檢索的時候浪讳,他們的相關(guān)性就是每一個term的TF-IDF加起來缰盏,

OK,TF-IDF就是這些了驻债,實現(xiàn)的時候乳规,如果是最初做全量索引的話,由于整體文檔數(shù)是已知的合呐,那每個term的TF-IDF一般是建立索引的時候就把它算好了暮的,檢索的時候按這個一排序就行了,我實現(xiàn)的時候由于沒有全量索引的概念淌实,所以只是在每添加一個文檔的時候算好這個文檔的TF存起來冻辩,檢索的時候通過term倒排召回的文檔數(shù)來確定IDF的值,實時算出TF-IDF的拆祈,如果是非常巨大的文檔數(shù)量恨闪,那么實時算還是很吃虧的,所以說全量索引還是非常必要的放坏,只是我這沒有完整實現(xiàn)全量索引建立而已咙咽,但后面接下來我會說說全量索引如何建立。

詞距

除了TF-IDF來進行相關(guān)性排序以外淤年,還有一些其他的文本因素也可以用在排序上钧敞,一是term的距離蜡豹,也就是詞距,如果檢索關(guān)鍵詞是小米手機溉苛,那么明顯的镜廉,如果一篇文章中這兩個term(小米,手機)挨在一起愚战,比如小米手機是一款很熱門的手機手機應(yīng)用中有很多關(guān)于健康的文章娇唯,比如吃小米有什么好處這兩篇文檔,明顯第一篇的相關(guān)度比第二篇要高寂玲。

所以塔插,為了保持詞距的信息,我們在存儲倒排的時候還需要將每個term的位置信息保存下來敢茁,檢索的時候用過這些個位置信息計算各個詞直接的詞距佑淀,從而和TF-IDF合在一起來表述文本相關(guān)性。

位置信息

同時彰檬,除了詞距以外伸刃,還有一個因素也影響相關(guān)度的排序,那就是term的位置逢倍,這個也很好理解捧颅,如果在標題摘要命中的話明顯應(yīng)該比在正文中命中term的權(quán)重高较雕,一般這種情況是把標題碉哑,摘要命中的TD-IDF乘以一個系數(shù)來擴大影響,從而影響最后的相關(guān)度計算結(jié)果亮蒋。

其他模型

除了直接使用TF-IDF以外扣典,現(xiàn)在還有很多其他的文本相關(guān)性的排序模型,比如BM25這種以概率為基礎(chǔ)的排序模型慎玖,這里就不展開了贮尖,如果大家有興趣,寫完這些篇以后可以專門寫幾篇怎么排序的趁怔,包括文本排序湿硝,以及文本之后的重要性排序啊,怎么離線利用機器學習計算文檔重要性來排序之類的润努。

下面一篇文章會再講講倒排索引存儲的一些我沒有實現(xiàn)的東西关斜,比如索引壓縮之類的,然后會講講如何建立倒排铺浇,如果進行增量添加文檔痢畜,如何進行索引合并。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丁稀,隨后出現(xiàn)的幾起案子繁涂,更是在濱河造成了極大的恐慌,老刑警劉巖二驰,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秉沼,居然都是意外死亡桶雀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門唬复,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矗积,“玉大人,你說我怎么就攤上這事敞咧〖罚” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵休建,是天一觀的道長乍恐。 經(jīng)常有香客問我,道長测砂,這世上最難降的妖魔是什么茵烈? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮砌些,結(jié)果婚禮上呜投,老公的妹妹穿的比我還像新娘。我一直安慰自己存璃,他們只是感情好仑荐,可當我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纵东,像睡著了一般粘招。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篮迎,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天男图,我揣著相機與錄音,去河邊找鬼甜橱。 笑死逊笆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的岂傲。 我是一名探鬼主播难裆,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乃戈?” 一聲冷哼從身側(cè)響起褂痰,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎症虑,沒想到半個月后缩歪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡谍憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年匪蝙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片习贫。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡逛球,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苫昌,到底是詐尸還是另有隱情颤绕,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布祟身,位于F島的核電站奥务,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏月而。R本人自食惡果不足惜汗洒,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望父款。 院中可真熱鬧溢谤,春花似錦、人聲如沸憨攒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肝集。三九已至瞻坝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杏瞻,已是汗流浹背所刀。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捞挥,地道東北人浮创。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像砌函,于是被迫代替她去往敵國和親斩披。 傳聞我的和親對象是個殘疾皇子溜族,可洞房花燭夜當晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容