天天看點

關鍵詞提取(tf-idf與textRank)關鍵詞提取(tf-idf與textRank)

關鍵詞提取(tf-idf與textRank)

一.tf-idf

tf-idf提取關鍵詞是一種簡單有效的提取關鍵詞的方法.其思想主要在于預先統計在語料中出現的所有詞的詞頻,計算出idf值,然後再針對要提取關鍵詞的文章或句子的每個詞計算出tf值,乘起來便是tf-idf值.值越大表示作為關鍵詞的優先級越高.

假設現在語料一共有M篇文章,其中詞A在其中m篇中出現過了,那麼A的idf值為 log(M/m) l o g ( M / m ) ,注意這個idf值對于每篇文章中的A都是一樣的.現在我們想求文章T中詞A的tf-idf值,先求其中A的tf值:T中一共有t個詞,其中A出現了a次,那麼A的tf值為 at a t .最終便可得到在文章T中,詞A的 tfidfAT=at∗log(Mm) t f i d f T A = a t ∗ l o g ( M m )

我們在實際應用中,一般會先計算出語料中所有詞的idf值并存為一個字典(hash_map)的形式.然後再進行關鍵詞提取,要用某個詞的idf值的時候直接查詢字典就可以了.

二.textRank

這種算法主要基于pageRank算法.其設計之初使用與Google的網頁排名的,PageRank通過網際網路中的超連結關系來确定一個網頁的排名,其公式是通過一種有向圖和投票的思想來設計的::

S(Vi)=(1−d)+d∗∑j∈In(Vi)1|Out(Vj)|S(Vj) S ( V i ) = ( 1 − d ) + d ∗ ∑ j ∈ I n ( V i ) 1 | O u t ( V j ) | S ( V j )

其中 S(Vi) S ( V i ) 代表網頁 Vi V i 的rank值, In(Vi) I n ( V i ) 代表接入網頁 Vi V i 的網頁的集合,而 Out(Vj) O u t ( V j ) 代表網頁 Vj V j 所指向的網頁的集合,加上 || | | 符号代表其元素數量 .直覺來了解就是說網頁 Vi V i 的rank值完全取決于指向它的網頁.這些網頁的數量越多, Vi V i 的rank值越大,這些網頁所指向的别的網頁的數量越多,就代表 Vi V i 對于它們而言重要程度越低,則 Vi V i 的rank值就越小.至于d就是一個阻尼系數,它是為了方式 S(Vi) S ( V i ) 值為0所設的,一般取為 d=0.85 d = 0.85 .

對于文章中的關鍵詞提取也是類似的(與tf-idf不同,不再依賴語料環境),我們将每個詞語看成是網頁,然後預先設定一個大小為m的視窗,從頭周遊這篇文章.在同一個視窗中的任意兩個詞之間都連一條邊.通常情況下,這裡我們使用無向無權邊(textrank的原作者通過實驗表明無向圖的效果較好),無向的意思就是 In(Vi),Out(Vi) I n ( V i ) , O u t ( V i ) 是完全一緻的.畫出圖過後,我們對每個詞 Vi V i 賦予一個初值 S0(Vi) S 0 ( V i ) 然後放進公式中機型疊代計算直至收斂即可.最終我們可以選擇rank值的topN作為我們的關鍵詞.

一般在實際應用中,我們需要先對文章進行分詞(漢語),然後過濾掉停用詞,再可以過濾掉掉我們不關心的詞性(如隻保留動詞和名詞),然後再用textrank進行關鍵詞提取.以下為視窗大小為2的文章所畫出的一個”圖”.

關鍵詞提取(tf-idf與textRank)關鍵詞提取(tf-idf與textRank)

三.小結與思考

以上就是分别用textRank和tf-idf進行關鍵詞提取的基本思想和算法.我們可以看到這兩種算法還是有着非常明顯的差異::

1.依賴語料

tf-idf的idf值依賴于語料環境,這給他帶來了統計上的優勢,即它能夠預先知道一個詞的重要程度.這是它優于textrank的地方.

而textrank隻依賴文章本身,它認為一開始每個詞的重要程度是一樣的.

2.詞語的互相關聯性

tf-idf是純粹用詞頻的思想(無論是tf還是idf都是)來計算一個詞的得分,最終來提取關鍵詞,完全沒有用到詞之間的關聯性.

而textrank用到了詞之間的關聯性(将相鄰的詞連結起來),這是其優于tf-idf的地方.

綜合來看,tf-idf和textrank各有優缺點,在實際使用中二者效果差異也并不明顯,可以同時使用互相做個參考.

參考文獻:

1. textrank: bring order into texts

繼續閱讀