寫在最前面
在這個(gè)日新月異的信息時(shí)代,海量數(shù)據(jù)的積累,計(jì)算能力的不斷提升,機(jī)器學(xué)習(xí)尤其是深度學(xué)習(xí)的蓬勃發(fā)展,使得人工智能技術(shù)在不同領(lǐng)域煥發(fā)出蓬勃的活力。自己經(jīng)歷了嵌入式開發(fā),移動(dòng)互聯(lián)網(wǎng)開發(fā),目前從事自然語言處理算法開發(fā)工作。從工程軟件開發(fā)到自然語言處理算法開發(fā),希望通過這個(gè)系列的文章,能夠由淺入深,通俗易懂的介紹自然語言處理的領(lǐng)域知識(shí),分享自己的成長(zhǎng),同大家一起進(jìn)步。
問題描述
在上一篇文章中(《《從零開始學(xué)習(xí)自然語言處理(NLP)》-倒排索引(1)》)描述了基于關(guān)鍵詞搜索的基本原理,以及通過倒排索引來提升和關(guān)鍵詞相關(guān)網(wǎng)頁的查詢。本文在上文的基礎(chǔ)上提出一個(gè)新的問題:
如果通過倒排索引查找到的網(wǎng)頁都包含全部的查詢關(guān)鍵字,而且,召回(符合查找條件)的網(wǎng)頁數(shù)目又很多,這就需要將網(wǎng)頁與查詢Query的相關(guān)度進(jìn)行排序了。相關(guān)度高的網(wǎng)頁排在查詢結(jié)果的前面,相關(guān)度低的網(wǎng)頁排在后面。那問題來了,如何依據(jù)網(wǎng)頁與查詢關(guān)鍵詞的相關(guān)性對(duì)召回的網(wǎng)頁做排序呢?
基于TF(Term Frequency,詞頻)進(jìn)行排序
最容易想到的便是基于詞頻打分進(jìn)行排序,具體來說,對(duì)于查詢Query:“林俊杰/2019/演唱會(huì)/行程”,下面的哪個(gè)網(wǎng)頁跟查詢Query的相關(guān)度更高呢?
網(wǎng)頁a
[林俊杰]/[2019]/全球/[演唱會(huì)]/[行程]/發(fā)布/,/這是/[林俊杰]/的/第/20/場(chǎng)/全球/巡演/。
| 關(guān)鍵字 | 出現(xiàn)頻次 |
|---|---|
| 林俊杰 | 2 |
| 2019 | 1 |
| 演唱會(huì) | 1 |
| 行程 | 1 |
網(wǎng)頁b
在 [林俊杰]/[2019]/全球/[演唱會(huì)]/[行程]/發(fā)布/之后/,/田馥甄/也/發(fā)布/了/今年/的/巡演/計(jì)劃/,/她的/第一站/是/臺(tái)北/。
| 關(guān)鍵字 | 出現(xiàn)頻次 |
|---|---|
| 林俊杰 | 1 |
| 2019 | 1 |
| 演唱會(huì) | 1 |
| 行程 | 1 |
顯然網(wǎng)頁a和Query的相關(guān)度更高。當(dāng)然對(duì)于計(jì)算機(jī)就沒有這么“顯然”了,它需要依靠規(guī)則和具體算法來計(jì)算判斷?;谠~頻的排序用公式表示就是,

其中,
k:Query中查詢關(guān)鍵詞序號(hào)

為了方便計(jì)算,我們假設(shè)每個(gè)網(wǎng)頁包含的詞的總數(shù)為100,通過上面的公式,
網(wǎng)頁a
網(wǎng)頁a相關(guān)度=2/100+1/100+1/100+1/100=0.05
網(wǎng)頁b
網(wǎng)頁b相關(guān)度=1/100+1/100+1/100+1/100=0.04
通過上面的公式,計(jì)算機(jī)也能“顯然”的判斷,網(wǎng)頁a與查詢Query的相關(guān)度更高了。
基于詞頻(TF)排序的問題
假設(shè)現(xiàn)在有新的召回網(wǎng)頁,
網(wǎng)頁c
在 [林俊杰]/[2019]/全球/[演唱會(huì)]/[行程]/發(fā)布/之后/,/眾多/明星/也/都/發(fā)布/了/自己/[2019]年/的/巡演/計(jì)劃/,/[行程]/安排/如下/,
| 關(guān)鍵字 | 出現(xiàn)頻次 |
|---|---|
| 林俊杰 | 1 |
| 2019 | 2 |
| 演唱會(huì) | 1 |
| 行程 | 2 |
網(wǎng)頁c相關(guān)度=1/100+2/100+1/100+2/100=0.06
顯然基于詞頻的相關(guān)性計(jì)算公式,網(wǎng)頁c(相關(guān)度0.06)大于網(wǎng)頁a(相關(guān)度0.05),但真實(shí)情況是,網(wǎng)頁c和查詢Query的相關(guān)度,并沒有網(wǎng)頁a大。
IDF(Inverse DocumentFrequency,逆文件詞頻)
上面的問題關(guān)鍵在于用戶的查詢Query主要關(guān)注的是"林俊杰",至于"2019","行程"等信息也是在林俊杰的基礎(chǔ)上展開的。所以,現(xiàn)在要解決的問題便是,排序算法如何能夠凸顯出"林俊杰"這個(gè)關(guān)鍵的查詢信息。在這里便引入了IDF(Inverse DocumentFrequency,逆文件詞頻)。
我們先看下它的定義:

其中,
分母的+1操作,是為了避免當(dāng)所有文檔都不包含該關(guān)鍵詞時(shí),分母出現(xiàn)為0的情況。
IDF的分子是固定的,所以,IDF的特性主要體現(xiàn)在分母上。
從IDF的定義可以看出,
1 越是能代表特定內(nèi)容的關(guān)鍵詞,包含該關(guān)鍵詞的網(wǎng)頁越少,IDF值越高,如“林俊杰”
2 越是和內(nèi)容主旨不相關(guān)的關(guān)鍵詞,包含該關(guān)鍵詞的網(wǎng)頁越多,IDF值越低,如“2019”,“行程”
所以,IDF值就能很好的體現(xiàn)出查詢Query關(guān)鍵字,與需要查詢內(nèi)容的相關(guān)性。
基于TF-IDF進(jìn)行排序
結(jié)合TF和IDF的特定,便有了TF-IDF,定義也非常直觀,

具體來說就是,一個(gè)網(wǎng)頁與查詢Query的相關(guān)性體現(xiàn)在:
1 網(wǎng)頁中包含查詢關(guān)鍵詞的頻度
2 查詢關(guān)鍵詞對(duì)查詢內(nèi)容的反映程度
基于TF-IDF,網(wǎng)頁與查詢Query的相關(guān)性,改寫為,

其中,

在實(shí)際工程中,TF和IDF值,以及TF-IDF值針對(duì)于具體網(wǎng)頁是提前計(jì)算好的,當(dāng)搜索系統(tǒng)接收到用戶的查詢Query后,能夠?qū)崟r(shí)計(jì)算查詢關(guān)鍵詞與網(wǎng)頁的相關(guān)度。
小結(jié)
本文沿用了《《從零開始學(xué)習(xí)自然語言處理(NLP)》-倒排索引(1)》中搜索的例子,提出了在網(wǎng)頁包含所有查詢關(guān)鍵詞的情況下,如何對(duì)網(wǎng)頁與查詢Query的相關(guān)性進(jìn)行排序。文中提出了基于TF的相關(guān)性排序方法,同時(shí),也指出了該方法存在的問題。最終,引出TF-IDF算法:結(jié)合查詢關(guān)鍵詞在網(wǎng)頁中的出現(xiàn)頻率和該關(guān)鍵詞反映查詢內(nèi)容程度兩個(gè)特征,對(duì)召回網(wǎng)頁進(jìn)行排序。