相關(guān)度打分的基本理論

Neil Zhu,簡(jiǎn)書(shū)ID Not_GOD,University AI 創(chuàng)始人 & Chief Scientist第焰,致力于推進(jìn)世界人工智能化進(jìn)程。制定并實(shí)施 UAI 中長(zhǎng)期增長(zhǎng)戰(zhàn)略和目標(biāo)妨马,帶領(lǐng)團(tuán)隊(duì)快速成長(zhǎng)為人工智能領(lǐng)域最專(zhuān)業(yè)的力量挺举。
作為行業(yè)領(lǐng)導(dǎo)者,他和UAI一起在2014年創(chuàng)建了TASA(中國(guó)最早的人工智能社團(tuán)), DL Center(深度學(xué)習(xí)知識(shí)中心全球價(jià)值網(wǎng)絡(luò))烘跺,AI growth(行業(yè)智庫(kù)培訓(xùn))等湘纵,為中國(guó)的人工智能人才建設(shè)輸送了大量的血液和養(yǎng)分。此外滤淳,他還參與或者舉辦過(guò)各類(lèi)國(guó)際性的人工智能峰會(huì)和活動(dòng)梧喷,產(chǎn)生了巨大的影響力,書(shū)寫(xiě)了60萬(wàn)字的人工智能精品技術(shù)內(nèi)容,生產(chǎn)翻譯了全球第一本深度學(xué)習(xí)入門(mén)書(shū)《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》铺敌,生產(chǎn)的內(nèi)容被大量的專(zhuān)業(yè)垂直公眾號(hào)和媒體轉(zhuǎn)載與連載汇歹。曾經(jīng)受邀為國(guó)內(nèi)頂尖大學(xué)制定人工智能學(xué)習(xí)規(guī)劃和教授人工智能前沿課程,均受學(xué)生和老師好評(píng)偿凭。

相關(guān)度打分的基本理論

源地址
Lucene使用Boolean模型來(lái)尋找匹配的文檔产弹,還有稱(chēng)之為Practical Document Frequency的公式來(lái)計(jì)算相關(guān)度。這個(gè)公式使用了TF/IDF向量空間模型笔喉,額外加入了更為現(xiàn)代的特性諸如coordination因子取视、字段長(zhǎng)度正規(guī)化和term或者查詢(xún)語(yǔ)句的boost硝皂。

不要被這些東西嚇到常挚!這些概念都不如名稱(chēng)看上去復(fù)雜。盡管這部分涉及不少算法稽物、公式和數(shù)學(xué)模型奄毡,但這是為正常人準(zhǔn)備的。理解算法本身并不如理解影響最終結(jié)果的因子那么重要贝或。

boolean model

布爾模型應(yīng)用在查詢(xún)中的AND吼过、ORNOT條件來(lái)查找所有匹配的文檔。查詢(xún)“full AND text AND search AND (elasticsearch OR lucene)
”只會(huì)包含那些包含所有full, text, and search, 和elasticsearch或lucene咪奖。

這個(gè)過(guò)程既簡(jiǎn)單又快速盗忱。通常用來(lái)排除任何不滿(mǎn)足這個(gè)查詢(xún)的文檔。

TF/IDF

一旦我們有了匹配的文檔羊赵,他們需要進(jìn)行相關(guān)度排名趟佃。不是所有文檔都包含所有term,一些term比另外一些更加重要昧捷。整個(gè)文檔的相關(guān)度分?jǐn)?shù)(部分)依賴(lài)于每個(gè)查詢(xún)term中的那些出現(xiàn)在文檔中的term的權(quán)重闲昭。

一個(gè)項(xiàng)的權(quán)重有三個(gè)決定因素,我們?cè)谑裁词窍嚓P(guān)度中已經(jīng)介紹過(guò)了靡挥。下面的公式供感興趣的人們參考序矩,不過(guò)也不必須真的記住。

term-frequency

在這片文檔中term出現(xiàn)的頻率如何跋破?出現(xiàn)得越多簸淀,term的權(quán)值越高。一個(gè)包含了5個(gè)相同term的出現(xiàn)的字段肯定比只有一個(gè)出現(xiàn)的字段的相關(guān)度更高毒返。TF定義如下:

tf(t in d) = \sqrt(frequency)

文檔d中的term t的tf是出現(xiàn)次數(shù)的平方根

如果你不管出現(xiàn)的次數(shù)租幕,而只關(guān)注其是否出現(xiàn),那么你可以通過(guò)字段的mapping來(lái)修改這項(xiàng)設(shè)定:

PUT /my_index
{
  "mappings": {
    "doc": {
      "properties": {
        "text": {
          "type":          "string",
          "index_options": "docs" 
        }
      }
    }
  }
}

index_options設(shè)置為docs將會(huì)關(guān)閉tf和term位置饿悬。使用這個(gè)mapping的不會(huì)計(jì)算一個(gè)term出現(xiàn)多少次令蛉,也不會(huì)對(duì)phrase或者近似查詢(xún)有多大幫助。那些設(shè)置為not_analyzed的字符串字段默認(rèn)使用這個(gè)設(shè)置。

IDF

在整個(gè)文檔集合中這個(gè)term出現(xiàn)了多少次珠叔?出現(xiàn)得越多蝎宇,其權(quán)值越低。諸如andthe這樣的term對(duì)于相關(guān)性貢獻(xiàn)值極低因?yàn)樗麄兂霈F(xiàn)在了幾乎所有的文檔中祷安,而那些不太常見(jiàn)的term如elasticsearchhippopotamus會(huì)幫助我們定位到最有趣的文檔姥芥。IDF按照下面的方式定義:

idf(t) 1 + \log ( numDocs /  (docFreq  + 1))

term t的IDF是索引中的文檔數(shù)量除上包含t的文檔的數(shù)量的對(duì)數(shù)

字段長(zhǎng)度范數(shù)(field length norm)

這個(gè)field多長(zhǎng)?字段長(zhǎng)度越短汇鞭,權(quán)值更高凉唐。如果一個(gè)term出現(xiàn)在短的字段中,諸如title字段霍骄,更可能台囱,那個(gè)字段的內(nèi)容是關(guān)于這個(gè)項(xiàng)而不是如果同樣的term出現(xiàn)在一個(gè)更大的body字段中。這個(gè)字段長(zhǎng)度范數(shù)按照下面的公式計(jì)算:

norm(d) = \sqrt(numTerms)

字段長(zhǎng)度范數(shù)(norm)是在文檔中的term的樹(shù)木的平方根读整。

盡管字段長(zhǎng)度范數(shù)對(duì)全文檢索非常重要簿训,其他的字段常常不需要范數(shù)。
范數(shù)大概消耗索引中的每個(gè)文檔的每個(gè)string字段一個(gè)字節(jié)米间,不管這個(gè)文檔是否包含字段本身强品。精確值not_analyzed字符串字段默認(rèn)關(guān)閉范數(shù),但是你可以使用字段映射來(lái)關(guān)閉analyzed字段:

PUT /my_index
{
  "mappings": {
    "doc": {
      "properties": {
        "text": {
          "type": "string",
          "norms": { "enabled": false } 
        }
      }
    }
  }
}

這個(gè)字段的范數(shù)不會(huì)起作用屈糊。long型的字段和short的字段會(huì)被看作相同的長(zhǎng)度的榛。

對(duì)logging這樣的情況,范數(shù)沒(méi)什么作用逻锐。你所關(guān)注的是一個(gè)字段是否包含一個(gè)特定的錯(cuò)誤碼或者一個(gè)特定的瀏覽器ID夫晌。這個(gè)字段的長(zhǎng)度不會(huì)影響結(jié)果。關(guān)閉范數(shù)可顯著節(jié)省大量的內(nèi)存谦去。

整合起來(lái)

這三個(gè)因素——tf慷丽、idf和字段長(zhǎng)度范數(shù)——被計(jì)算并在索引時(shí)候存儲(chǔ)。這些一起用來(lái)計(jì)算在一個(gè)特定文檔中的單一term的權(quán)值鳄哭。

文檔 vs 字段
當(dāng)我們提到在上面的公式中出現(xiàn)的文檔時(shí)要糊,實(shí)際上我們說(shuō)的是一個(gè)在文檔中的字段。每個(gè)字段擁有自己的倒排索引妆丘,因此對(duì)于TF/IDF锄俄,字段的值是這個(gè)文檔的值。

當(dāng)我們運(yùn)行一個(gè)簡(jiǎn)單的term查詢(xún)勺拣,并使用explain來(lái)查看具體的解釋?zhuān)銓⒖吹綄?duì)權(quán)值起到作用的因子是我們上面解釋的那些:

PUT /my_index/doc/1
{ "text" : "quick brown fox" }

GET /my_index/doc/_search?explain
{
    "query": {
        "term": {
            "text": "fox"
        }
    }
}

上面查詢(xún)獲得的結(jié)果如下:

weight(text:fox in 0) [PerFieldSimilarity]:  0.15342641 --------------1
result of:
    fieldWeight in 0                         0.15342641
    product of:
        tf(freq=1.0), with freq of 1:        1.0        --------------2
        idf(docFreq=1, maxDocs=1):           0.30685282 --------------3
        fieldNorm(doc=0):                    0.5        --------------4


1. 在這個(gè)文檔中的此字段的term“fox”的最終的打分奶赠,內(nèi)部Lucene doc ID為0
2. term fox在此文檔中的文本字段出現(xiàn)一次
3. 在這個(gè)索引中的所有文檔的此字段中的`fox`的`IDF`
4. 該字段的字段長(zhǎng)度范數(shù)因子

當(dāng)然查詢(xún)通常包含不止一個(gè)term,因此我們需要一種組合多個(gè)term的權(quán)值的方式药有。為了達(dá)到這個(gè)目的毅戈,我們轉(zhuǎn)向Vector Space Model

向量空間模型

VSM提供給我們一種對(duì)一個(gè)文檔的組合多個(gè)term的查詢(xún)苹丸。輸出一個(gè)表示文檔匹配查詢(xún)的程度的單獨(dú)的分?jǐn)?shù)。為了實(shí)現(xiàn)這個(gè)目的苇经,它將文檔和查詢(xún)表示為向量赘理。

向量就是一維數(shù)組,如:[1,2,5,22,3,8]扇单。

在向量空間模型中商模,向量中的每個(gè)數(shù)字是一個(gè)term的權(quán)值,使用tf/idf計(jì)算出來(lái)的蜘澜。

盡管tf/idf是計(jì)算term權(quán)值的默認(rèn)方式施流,但這并不是唯一的方式。其他的模型諸如Okapi-BM25也是可以在ES中使用的鄙信。tf/idf因?yàn)楸旧砗?jiǎn)單瞪醋,可以高效地得到高質(zhì)量的搜索結(jié)果,經(jīng)受住了時(shí)間的考驗(yàn)扮碧。

假設(shè)我們有一個(gè)對(duì)“happy hippopotamus”的查詢(xún)趟章。像happy這樣的尋常word肯定權(quán)值很低,而hippopotamus權(quán)值很高慎王。假設(shè)happy的權(quán)值為2而hippopotamus有權(quán)值5。我們可以畫(huà)出一副二維向量——[2,5]——從原點(diǎn)(0,0)出發(fā)到達(dá)(2,5)的向量宏侍。

image
image

現(xiàn)在假設(shè)我們有三個(gè)文檔:

  • “I am happy in summer”
  • “After Christmas I’m a hippopotamus”
  • “The happy hippopotamus helped Harry”

我們可以對(duì)每個(gè)文檔創(chuàng)建一個(gè)相似的向量赖淤,包含了每個(gè)出現(xiàn)在文檔中的查詢(xún)term的權(quán)值——happyhippopotamus,畫(huà)在同一幅圖上:

  • “I am happy in summer”
  • “After Christmas I’m a hippopotamus”
  • “The happy hippopotamus helped Harry”
image
image

向量的一個(gè)較好的特性就是他們可以進(jìn)行比較谅河。通過(guò)計(jì)算查詢(xún)向量和文檔向量之間的角度咱旱,得到他們之間的相關(guān)度”了#可以看到文檔1和查詢(xún)之間的角度最大吐限,所以相關(guān)度非常低。文檔2好一些褂始。文檔3就是完全的匹配诸典。

實(shí)踐中,只有2維向量可以畫(huà)在一幅圖上崎苗。幸運(yùn)的是狐粱,線(xiàn)性代數(shù)——數(shù)學(xué)的一個(gè)分支,可以處理向量胆数,提供給我們工具來(lái)比較多維向量之間的角度肌蜻,也就是說(shuō)我們可以使用上面的原理來(lái)進(jìn)行相似的分析,這就可以處理超過(guò)兩個(gè)term的查詢(xún)的相關(guān)性了必尼。
想進(jìn)一步了解參見(jiàn)這里

現(xiàn)在我們已經(jīng)討論了打分的理論知識(shí)蒋搜,下面可以看看在Lucene中如何實(shí)現(xiàn)這個(gè)打分的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市豆挽,隨后出現(xiàn)的幾起案子酸休,更是在濱河造成了極大的恐慌,老刑警劉巖祷杈,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斑司,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡但汞,警方通過(guò)查閱死者的電腦和手機(jī)宿刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)私蕾,“玉大人僵缺,你說(shuō)我怎么就攤上這事〔劝龋” “怎么了磕潮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)容贝。 經(jīng)常有香客問(wèn)我自脯,道長(zhǎng),這世上最難降的妖魔是什么斤富? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任膏潮,我火速辦了婚禮,結(jié)果婚禮上满力,老公的妹妹穿的比我還像新娘焕参。我一直安慰自己,他們只是感情好油额,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布叠纷。 她就那樣靜靜地躺著,像睡著了一般潦嘶。 火紅的嫁衣襯著肌膚如雪涩嚣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天衬以,我揣著相機(jī)與錄音缓艳,去河邊找鬼。 笑死看峻,一個(gè)胖子當(dāng)著我的面吹牛阶淘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播互妓,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼溪窒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坤塞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起澈蚌,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摹芙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宛瞄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浮禾,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年份汗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盈电。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杯活,死狀恐怖匆帚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旁钧,我是刑警寧澤吸重,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站歪今,受9級(jí)特大地震影響嚎幸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彤委,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一鞭铆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焦影,春花似錦、人聲如沸封断。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坡疼。三九已至彬呻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柄瑰,已是汗流浹背闸氮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留教沾,地道東北人蒲跨。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像授翻,于是被迫代替她去往敵國(guó)和親或悲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孙咪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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