用TF-IDF算法提取關鍵詞
假設現在有一篇很長的文章,要從中提取出它的關鍵字,完全不人工干預,那么怎么做到呢?又有如如何判斷兩篇文章的相似性的這類問題,這是在數據挖掘,信息檢索中經常遇到的問題,然而TF-IDF算法就可以解決。這兩天因為要用到這個算法,就先學習了解一下。
TF-IDF概述
在接觸一個新算法時,首先當然是先去了解這個算法的本質,在此,我們先引用百度百科上的解釋:TF-IDF(term frequency–inverse document frequency)是一種用于信息檢索與數據挖掘的常用加權技術。用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類,也就可以作為上文中所提到的關鍵字。
這樣我們大概就對這個算法有了一些了解,至少知道了它是通過加權來判定字詞對于文章的重要性的,那么算法是如何實現的呢?下來我們一步步進行學習:
詞頻(TF)和逆文檔頻率IDF
首先,就算法的命名說起,當然你會好奇這里的TF是什么,IDF是什么。現在回到之前我們提到的問題,要在一篇很長的文章中尋找關鍵字(詞),就一般的理解,如果一個詞對于文章而言很關鍵的話那出現的次數就比較多,于是我們就采用“詞頻”(Term Freqency)進行統計,這里的詞頻就是TF。
那么你肯定會說像“的”、“是”、“了”這類詞的出現次數應該是最多的了,它們叫做停用詞,對找到結果完全毫無幫助,是我們必須要過濾掉的詞,
假設我們現在過濾掉了所有的那些詞,那么又會遇到一個問題,假定我們現在要在一個關于聚類的文章中找尋關鍵字。我們可能發現“聚類”和“算法”的出現次數一樣多,那么它們的重要性就是一樣的么?答案當然是否定的,相對于“聚類”而言,“算法”更為常見,出現次數同樣多,我們就有理由認為“聚類”的重要程度要大于“算法”。也可以這樣理解,如果某個詞比較少見,但是它在這篇文章中多次出現,那它很可能就能反映本篇文章的特性,也就可以作為我們所要尋找的關鍵詞。
聯系到層次分析法這類算法的思想,可以賦予每個詞特定的權重,像那類最常見的詞賦予很小的權重,相應的較少見的詞賦予較大的權重,這個權重在這里叫做“逆文檔頻率”(Inverse Doucument Frequency,縮寫為IDF),它的大小與一個詞的常見程度成反比。而TF-IDF值就是將詞頻TF和逆文檔頻率IDF相乘,值越大,該詞對文章的重要性越高。
步驟
(1)計算詞頻
詞頻 = 某個詞在文章中出現的總次數
當然為了消除不同文章大小之間的差異,便于不同文章之間的比較,我們在此標準化詞頻:
詞頻 = 某個詞在文章中出現的總次數/文章的總詞數
或者:詞頻 = 某個詞在文章中出現的總次數/文章中出現次數最多的詞的個數
(2)計算逆文檔頻率
在此,首先需要一個語料庫來模擬語言的使用環境。
逆文檔頻率(IDF) = log(詞料庫的文檔總數/包含該詞的文檔數+1)
為了避免分母為0,所以在分母上加1.
(3)計算TF-IDF值
基于之前的分析了解,有:TF-IDF值 = TF * IDF。
在此有:TF-IDF值與該詞的出現頻率成正比,與在整個語料庫中的出現次數成反比,符合之前的分析。
(4)求出關鍵字
計算出文章中每個詞的TF-IDF值之后,進行排序,選取其中值最高的幾個作為關鍵字。
(5)計算文章的相似性
計算出每篇文章的關鍵詞,從中各選取相同個數的關鍵詞,合并成一個集合,計算每篇文章對于這個集合中的詞的詞頻,生成兩篇文章各自的詞頻向量,進而通過歐氏距離或余弦距離求出兩個向量的余弦相似度,值越大就表示越相似。
優缺點
1.優點是算法的容易理解,便于實現。
2.缺點:IDF的簡單結構并不能有效地反映單詞的重要程度和特征詞的分布情況,使其無法很好的完成對權值的調整功能,所以在一定程度上該算法的精度并不是很高。除此之外,算法也沒喲體現位置信息,對于出現在文章不同位置的詞語都是一視同仁的,而我們知道,在文章首尾的詞語勢必重要性要相對高點。據此,我們可以或許也可以將處于文章不同位置的詞語賦予不同的權重。