TF-IDF算法簡析


TF-IDF算法可用來提取文檔的關鍵詞,關鍵詞在文本聚類、文本分類、文獻檢索、自動文摘等方面有着重要應用。

 

算法原理

 

TF:Term Frequency,詞頻

IDF:Inverse Document Frequency,逆文檔頻率

 

詞頻(TF):某一個詞在該文件中出現的頻率

計算方法為:

 

逆文檔頻率(IDF):總文件數目除以包含該詞的文件數目

計算方法為:

分母加1是為了防止該詞不在語料庫中而導致被除數為零

 

最后,TF-IDF的計算方式為:

 

TF-IDF 的主要思想為:

如果某個詞在一篇文檔中出現的頻率高(即 TF 高),並且在語料庫中其他文檔中很少出現(即 IDF 高),則認為這個詞具有很好的類別區分能力

 

算法過程:先計算出文檔中每個詞的TF-IDF值,然后按降序排列,取排在最前面的幾個詞作為關鍵詞進行輸出

 

算法優點:

原理簡單,能滿足大多數實際需求

算法缺點:

  1. 單純以 “詞頻” 衡量一個詞的重要性,不夠全面(文檔頻率小的詞就越重要,文檔頻率大的詞就越無用,顯然這並不是完全正確的)
  2. TF-IDF值的計算沒有加入詞的位置信息,不夠嚴謹(出現在文檔標題、第一段、每一段的第一句話中的詞應給予較大的權重)

 

Python實現

 

jieba 

jieba內置了TF-IDF算法,調用非常簡單,例:

sen = '自然語言處理是人工智能和語言學領域的分支學科,此領域探討如何處理及運用自然語言,包括多方面和步驟。'
print('  jieba extract:', jieba.analyse.extract_tags(sen, topK=topK))  # ['自然語言', '領域', '處理']

topK:返回 TF-IDF 值最大的關鍵詞個數,此處為 3

更詳細用法可參考官方文檔:https://github.com/fxsjy/jieba

 

sklearn 

關鍵詞提取需用到 CountVectorizer 和 TfidfVectorizer,示例代碼:

corpus = [  # 語料
    '自然語言處理是人工智能和語言學領域的分支學科,此領域探討如何處理及運用自然語言,包括多方面和步驟。',
    '計算機視覺是一門研究如何使機器“看”的科學,用攝影機和計算機代替人眼對目標進行識別、跟蹤和測量。',
    '機器學習是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。'
]
corpus = [jieba.lcut(sen) for sen in corpus]
with open('stop_words.txt', encoding='utf8') as f:
    stop_words = [line.strip() for line in f.readlines()]
corpus = [' '.join(filter_stop_words(sen, stop_words)) for sen in corpus]

cvec = CountVectorizer()
cvec.fit_transform(corpus)
feature_words = cvec.get_feature_names()
feature_words = np.array(feature_words)

tvec = TfidfVectorizer()
tvec = tvec.fit_transform(corpus)
first_sen = tvec.toarray()[0]
max_indices = np.argsort(-first_sen)[:topK]
print('sklearn extract:', feature_words[max_indices])  # ['自然語言' '領域' '語言學']

 

完整項目地址:https://github.com/cyandn/DS/tree/master/TF-IDF

 

參考:

https://www.jianshu.com/p/b0ba00ccaf9c

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

https://blog.csdn.net/Eastmount/article/details/50323063

https://blog.csdn.net/m0_37324740/article/details/79411651

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM