想要提取一篇文章的<b>關鍵詞</b>,最直接的思維方式就是出現的越頻繁的詞就意味著越重要,但停用詞需要除外。一篇文章中出現最多的就是停用詞,只有避開這些無用的詞,才能有效進行關鍵詞打分。
<b>停用詞</b>:出現次數最多的詞是----"的"、"是"、"在"----這一類最常用的詞。它們叫做"停用詞"(stop words),表示對找到結果毫無幫助、必須過濾掉的詞。
<b>TF-IDF</b>(term frequency–inverse document frequency)是一種用于資訊檢索與資訊探勘的常用加權技術。
TFIDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。
- TF("詞頻",Term Frequency):詞條在文檔中出現的頻率。
TF詞頻計算公式.png
tf參數:
ni,j:是該詞文件dj中出現次數,分母是在文件dj中所有字詞的出現次數之和
- IDF(逆文檔頻率)公式:
如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近0。分母之所以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。log表示對得到的值取對數。
idf逆文檔頻率計算公式.png
idf參數:
|D|: 語料庫(corpus,用來模擬語言的使用環境)中的文件總數,
|{j : ti ∈ dj}| :包含詞語ti的文件數目(即ni,≠0的文件數目),如果該詞語不在語料庫中,就會導致被除數為零,因此一般情況下使用:1+|{j : ti ∈ dj}|
- TF-IDF分數公式:
TF-IDF與一個詞在文檔中的出現次數成正比,與該詞在整個語言中的出現次數成反比。所以,自動提取關鍵詞的算法就很清楚了,就是計算出文檔的每個詞的TF-IDF值,然后按降序排列,取排在最前面的幾個詞。排在最前面的幾個詞就是這篇文章的關鍵詞。
tf-idf計算公式.pngTF-IDF = 詞頻(TF) x 逆文檔頻率(IDF)
- 示例
現有一篇科技評論文章,假定該文長度為1000個詞,"芯片"、"汽車"、"無人駕駛"各出現20次,則這三個詞的"詞頻"(TF)都為0.02。然后,搜索Google發現,包含"的"字的網頁共有250億張,假定這就是中文網頁總數。包含"芯片"的網頁共有62.3億張,包含"汽車"的網頁為0.484億張,包含"無人駕駛"的網頁為0.973億張。則它們的逆文檔頻率(IDF)和TF-IDF如下:
詞 | 包含該詞的文檔數 | IDF | TF-IDF |
---|---|---|---|
芯片 | 62.3 | 0.603 | 0.0121 |
汽車 | 0.484 | 2.713 | 0.054 |
無人駕駛 | 0.973 | 2.410 | 0.0482 |
從上表可見,"汽車"的TF-IDF值最高,"無人駕駛"其次,"芯片"最低。(如果還計算"的"字的TF-IDF,那將是一個極其接近0的值。)所以,如果只選擇一個詞,"汽車"就是這篇文章的關鍵詞。
除了自動提取關鍵詞,TF-IDF算法還可以用于許多別的地方。比如,信息檢索時,對于每個文檔,都可以分別計算一組搜索詞("芯片"、"汽車"、"無人駕駛")的TF-IDF,將它們相加,就可以得到整個文檔的TF-IDF。這個值最高的文檔就是與搜索詞最相關的文檔。
TF-IDF算法的優點是簡單快速,結果比較符合實際情況。缺點是,單純以"詞頻"衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數并不多。而且,這種算法無法體現詞的位置信息,出現位置靠前的詞與出現位置靠后的詞,都被視為重要性相同,這是不正確的。(一種解決方法是,對全文的第一段和每一段的第一句話,給予較大的權重。)