关键词提取算法—TF/IDF算法
關鍵詞提取算法一般可分為有監督學習和無監督學習兩類。
有監督的關鍵詞提取方法可以通過分類的方式進行,通過構建一個較為完善的詞表,然后判斷每個文檔與詞表中的每個詞的匹配程度,以類似打標簽的方式,達到關鍵詞提取的效果。優點是可以獲得較高的精度,缺點是需要大批量的標注數據,并且要對詞表進行人工維護。
無監督學習既不需要詞表也不需要標注語料,也因此無監督的學習得到了大量的應用。
TF-IDF(term frequency–inverse document frequency,詞頻—逆文檔頻次算法)
是一種用于資訊檢索與資訊探勘的常用加權技術,是一種統計方法。常用于評估在一個文檔集中一個詞對某份文檔的重要性,一個詞對文檔越重要越有可能成為關鍵詞。
TF-IDF算法由兩部分組成:TF算法以及IDF算法。TF算法是統計一個詞在一篇文檔中出現的頻次。也即是一個詞在文檔中出現的次數越多,其對文檔的表達能力也越強。而IDF算法則是統計一個詞在文檔集的多少個文檔中出現,即是如果一個詞在越少的文檔中出現,則其對文檔的區分能力也越強。
但TF僅衡量詞的出現頻次,但沒有考慮到詞對文檔的區分能力,所以在實際應用中一般都是將TF和IDF算法一起使用,從詞頻、逆文檔頻次兩個角度對詞的重要性進行衡量。
(1)TF的計算方式:
tfij=nij∑knkjtf_{ij}=\frac {n_{ij}}{\sum_k n_{kj}}tfij?=∑k?nkj?nij??
在計算公式中,其中nijn_{ij}nij?表示詞iii在文檔中jjj中的出現頻次,但僅是用頻次來表示,長文本中的詞出現頻次高的概率會更大,因此會影響到不同文檔之間關鍵詞權值的比較,所以這里對詞頻進行了歸一化,分母就是統計文檔中每個詞出現次數的總和,也即是一篇文檔中總詞數。
(2)IDF的計算方式:
idfi=log(∣D∣1+∣Di∣)idf_i=log \begin{pmatrix} \frac{|D|}{1+|D_i|} \end{pmatrix}idfi?=log(1+∣Di?∣∣D∣??)
其中∣D∣|D|∣D∣為文檔中文檔總數,∣Di∣|D_i|∣Di?∣為文檔集中出現詞iii的文檔數量。分母之所以加1是采用了拉普拉斯平滑,比避免有部分新的詞沒有在語料庫中出現過而使分母為0的情況出現,增強算法的健壯性。
(3)TF—IDF的計算方式:
tf×idf(i,j)=tfij×idfi=nij∑knkj×log(∣D∣1+∣Di∣)tf \times idf(i,j) =tf_{ij} \times idf_i=\frac {n_{ij}}{\sum_k n_{kj}} \times log \begin{pmatrix} \frac{|D|}{1+|D_i|} \end{pmatrix}tf×idf(i,j)=tfij?×idfi?=∑k?nkj?nij??×log(1+∣Di?∣∣D∣??)
TF—IDF算法是TF和IDF算法的綜合使用,這里的tftftf和idfidfidf相乘是經驗所得。
下面是一個具體的案例:
這里假設已經安裝好了jieba和gensim包,下面是代碼實現:
(1)idf的計算
- 加載已有的文檔數據集
- 加載停用表
- 對數據集中的文檔進行分詞
- 根據停用詞表過濾掉干擾詞
- 根據過濾好詞統計計算idf值
(2)新文檔的關鍵詞提取
- 對新文檔進行分詞
- 根據停用詞表過濾掉干擾詞
- 根據計算好的{詞:tf-idf值}得出新文檔的關鍵詞
運行結果:
['年度', '中國', '愛心', '城市', '公益活動', '新聞', '發布會', '在京舉行', '中華', '社會', '基金會', '理事長', '許嘉璐', '講話', '基金會', '朱發忠', '全國', '老齡', '朱勇', '民政部', '社會', '巡視員', '周萍', '中華', '社會', '基金會', '副理事長', '志遠', '重慶市', '民政局', '巡視員', '明政', '晉江市', '人大常委會', '陳健倩', '自治區', '民政局', '領導', '媒體', '發布會', '中華', '社會', '基金會', '秘書長', '本年度', '中國', '愛心', '城市', '公益活動', '愛心', '城市', '項目', '中國', '愛心', '城市', '大會', '內容', '重慶市', '呼和浩特市', '長沙市', '太原市', '蚌埠市', '南昌市', '汕頭市', '滄州市', '晉江市', '遵化市', '公益活動', '中國', '雅虎', '副總編', '張銀生', '鳳凰網', '城市', '頻道', '總監', '趙耀', '媒體', '優勢', '方案', '中華', '社會', '基金會', '中國', '愛心', '城市', '大會', '承辦方', '晉江市', '許嘉璐', '理事長', '晉江市', '國家', '重點', '地區', '價值', '款物', '晉江市', '人大常委會', '陳健倩', '大會', '情況'] TF-IDF模型結果: 晉江市/ 城市/ 大會/ 愛心/ 中華/ 基金會/ 陳健倩/ 重慶市/ 許嘉璐/ 巡視員/下面簡單解釋下代碼:
tf-idf算法是需要語料庫的,主要是用來統計計算idf值,通過計算每篇訓練文檔集中每篇文檔中的過濾好的詞在多少篇訓練文檔中出現,然后根據上述的idf計算公式計算其值,也即是訓練過程,這里的所謂的訓練好的模型也就是根據訓練語料庫計算好的過濾后詞的idf值。然后針對待處理文本,遍歷每個詞的tf值,再結合計算好的idf值計算得到tf-idf值,排序得出值最大的前10個詞作為待處理文檔的關鍵詞。
從代碼里還要注意幾點:
- 待處理文本的分詞采用jieba的帶詞性標注的分詞,而訓練集文檔分詞時采用的是不帶詞性標注的分詞。
- 要構建一個停用詞表,因為除了能表達文檔信息的實詞外,還有很多無用的詞會干擾詞的tf/idf統計值,因此需要構建一個停用詞表過濾掉所有文檔里的干擾詞。現在中文自然語言處理常用的一個停用詞表是哈工大的停用詞表,里面包含大部分中文文本常用的干擾詞。當然在實際應用中,也可以根據具體的項目構建一個更適用的停用詞表。除了停用詞表外,也可以適用詞性對文本的詞進一步的篩選,在這里對于待處理的文檔篩選的是只保留名詞性的詞語(也即是以“n”開頭的詞),從代碼里可以看出。
- 訓練文檔集中的文檔在分詞后過濾干擾詞時,保留了所有的詞性的詞,而待處理文檔則是帶詞性標注的分詞后,除了過濾干擾詞外,還過濾掉了除名詞性的詞以外的詞。
- tf-idf的訓練主要是根據數據集生成對應的idf值字典,后續計算每個詞的tf-idf時,直接從字典中讀取。而LSI和LDA的訓練是根據現有的數據集生成文檔-主題分布矩陣和主題-詞分布矩陣,在gensim中有實現好的訓練方法。
- 訓練得到idf值,tf值是針對待處理文本的,總和計算tf-idf值進行排序得到關鍵詞。
訓練文檔和停用詞下載:
https://github.com/nlpinaction/learning-nlp/tree/master/chapter-5
總結
以上是生活随笔為你收集整理的关键词提取算法—TF/IDF算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: credit gold什么意思
- 下一篇: 蚂蚁金服股票怎么买