日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3.TF-IDF算法介绍、应用、NLTK实现TF-IDF算法、Sklearn实现TF-IDF算法、算法的不足、算法改进

發(fā)布時(shí)間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.TF-IDF算法介绍、应用、NLTK实现TF-IDF算法、Sklearn实现TF-IDF算法、算法的不足、算法改进 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3.TF-IDF
3.1.TF-IDF算法介紹
3.2.TF-IDF應(yīng)用
3.3.NLTK實(shí)現(xiàn)TF-IDF算法
3.4.Sklearn實(shí)現(xiàn)TF-IDF算法
3.5.Jieba實(shí)現(xiàn)TF-IDF算法
3.6.TF-IDF算法的不足
3.7.TF-IDF算法改進(jìn)—TF-IWF算法

3.TF-IDF

以下轉(zhuǎn)自:https://blog.csdn.net/asialee_bird/article/details/81486700

3.1.TF-IDF算法介紹

TF-IDF(term frequency–inverse document frequency,詞頻-逆向文件頻率)是一種用于信息檢索(information retrieval)與文本挖掘(text mining)的常用加權(quán)技術(shù)

TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語料庫(kù)中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語料庫(kù)中出現(xiàn)的頻率成反比下降。

TF-IDF的主要思想是:如果某個(gè)單詞在一篇文章中出現(xiàn)的頻率TF高,并且在其它文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。

(1)TF是詞頻(Term Frequency)
詞頻(TF)表示詞條(關(guān)鍵字)在文本中出現(xiàn)的頻率。
這個(gè)數(shù)字通常會(huì)被歸一化(一般是詞除以文章總詞數(shù)),以防止它偏向長(zhǎng)的文件。

其中ni,j是該詞在文件dj中出現(xiàn)的次數(shù),分母則是文件dj中所有詞匯出現(xiàn)的次數(shù)總和;

(2)IDF是逆向文件頻率(Inverse Document Frequency)
逆向文件頻率(IDF):某一特定詞語的IDF,可以由總文件數(shù)目除以包含該詞語的文件的數(shù)目,再將得到的商取對(duì)數(shù)得到
如果包含詞條t的文檔越少,IDF越大,則說明詞條具有很好的類別區(qū)分能力。

其中,|D|是語料庫(kù)中的文件總和。 |{j:ti∈dj}|表示包含詞語ti的文件數(shù)目(即ni,j≠0的文件數(shù)目)。如果該詞語不在語料庫(kù)中,就會(huì)導(dǎo)致分母為零,因此一般情況下使用 1+|{j:ti∈dj}|

其中,|D| 是語料庫(kù)中的文件總數(shù)。 |{j:ti∈dj}| 表示包含詞語 ti 的文件數(shù)目(即 ni,j≠0 的文件數(shù)目)。如果該詞語不在語料庫(kù)中,就會(huì)導(dǎo)致分母為零,因此一般情況下使用 1+|{j:ti∈dj}|

即:

(3)TF-IDF實(shí)際上是:TF*IDF
某一特定文件內(nèi)的高詞語頻率,以及該詞語在整個(gè)文件集合中的低文件頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。
公式:

注:TF-IDF算法非常容易理解,并且很容易實(shí)現(xiàn),但是其簡(jiǎn)單結(jié)構(gòu)并沒有考慮詞語的語義信息,無法處理一詞多義與一義多詞的情況。

3.2.TF-IDF應(yīng)用

(1)搜索引擎;(2)關(guān)鍵詞提取;(3)文本相似性;(4)文本摘要

3.3.NLTK實(shí)現(xiàn)TF-IDF算法

from nltk.text import TextCollection from nltk.tokenize import word_tokenize# 首先,構(gòu)建語料庫(kù)corpus sents = ['this is sentence one', 'this is sentence two', 'this is sentence three'] sents = [word_tokenize(sent) for sent in sents] # 對(duì)每個(gè)句子進(jìn)行分詞 print(sents) # 輸出分詞后的結(jié)果 ''' 輸出結(jié)果: [['this', 'is', 'sentence', 'one'], ['this', 'is', 'sentence', 'two'], ['this', 'is', 'sentence', 'three']] '''corpus = TextCollection(sents) # 構(gòu)建語料庫(kù) print(corpus) # 輸出分詞后的結(jié)果 ''' 輸出結(jié)果: <Text: this is sentence one this is sentence two...> '''# 計(jì)算語料庫(kù)中"one"的tf值 tf = corpus.tf('one', corpus) # 結(jié)果為: 1/12 print(tf) ''' 輸出結(jié)果: 0.08333333333333333 '''# 計(jì)算語料庫(kù)中"one"的idf值 idf = corpus.idf('one') # log(3/1) print(idf) """ 輸出結(jié)果: 1.0986122886681098 """# 計(jì)算語料庫(kù)中"one"的tf-idf值 tf_idf = corpus.tf_idf('one', corpus) print(tf_idf) ''' 輸出結(jié)果: 0.0915510240556758 '''

3.4.Sklearn實(shí)現(xiàn)TF-IDF算法

from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformerx_train = ['TF-IDF 主要 思想 是', '算法 一個(gè) 重要 特點(diǎn) 可以 脫離 語料庫(kù) 背景','如果 一個(gè) 網(wǎng)頁(yè) 被 很多 其他 網(wǎng)頁(yè) 鏈接 說明 網(wǎng)頁(yè) 重要'] x_test = ['原始 文本 進(jìn)行 標(biāo)記', '主要 思想']# 該類會(huì)將文本中的詞語轉(zhuǎn)換為詞頻矩陣,矩陣元素a[i][j] 表示j詞在i類文本下的詞頻 vectorizer = CountVectorizer(max_features=10) # 該類會(huì)統(tǒng)計(jì)每個(gè)詞語的tf-idf權(quán)值 tf_idf_transformer = TfidfTransformer() # 將文本轉(zhuǎn)為詞頻矩陣并計(jì)算tf-idf tf_idf = tf_idf_transformer.fit_transform(vectorizer.fit_transform(x_train)) print("--------------------------tf_idf-------------------------------") print(tf_idf) print('--------------------------x_train_weight-----------------------') # 將tf-idf矩陣抽取出來,元素a[i][j]表示j詞在i類文本中的tf-idf權(quán)重 x_train_weight = tf_idf.toarray() print(x_train_weight) print("---------------------------------------------------------------")# 對(duì)測(cè)試集進(jìn)行tf-idf權(quán)重計(jì)算 tf_idf = tf_idf_transformer.transform(vectorizer.transform(x_test)) x_test_weight = tf_idf.toarray() # 測(cè)試集TF-IDF權(quán)重矩陣print('輸出x_train文本向量:') print(x_train_weight) print('輸出x_test文本向量:') print(x_test_weight)

輸出結(jié)果:

--------------------------tf_idf-------------------------------(0, 2) 0.7071067811865476(0, 0) 0.7071067811865476(1, 9) 0.3349067026613031(1, 7) 0.4403620672313486(1, 6) 0.4403620672313486(1, 5) 0.4403620672313486(1, 3) 0.4403620672313486(1, 1) 0.3349067026613031(2, 9) 0.22769009319862868(2, 8) 0.29938511033757165(2, 4) 0.8981553310127149(2, 1) 0.22769009319862868 --------------------------x_train_weight----------------------- [[0.70710678 0. 0.70710678 0. 0. 0.0. 0. 0. 0. ][0. 0.3349067 0. 0.44036207 0. 0.440362070.44036207 0.44036207 0. 0.3349067 ][0. 0.22769009 0. 0. 0.89815533 0.0. 0. 0.29938511 0.22769009]] --------------------------------------------------------------- 輸出x_train文本向量: [[0.70710678 0. 0.70710678 0. 0. 0.0. 0. 0. 0. ][0. 0.3349067 0. 0.44036207 0. 0.440362070.44036207 0.44036207 0. 0.3349067 ][0. 0.22769009 0. 0. 0.89815533 0.0. 0. 0.29938511 0.22769009]] 輸出x_test文本向量: [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]]

3.5.Jieba實(shí)現(xiàn)TF-IDF算法

import jieba.analysetext='關(guān)鍵詞是能夠表達(dá)文檔中心內(nèi)容的詞語,常用于計(jì)算機(jī)系統(tǒng)標(biāo)引論文內(nèi)容特征、信息檢索、系統(tǒng)匯集以供讀者檢閱。關(guān)鍵詞提取是文本挖掘領(lǐng)域的一個(gè)分支,是文本檢索、文檔比較、摘要生成、文檔分類和聚類等文本挖掘研究的基礎(chǔ)性工作'keywords=jieba.analyse.extract_tags(text, topK=20, withWeight=False, allowPOS=()) print(keywords)

注:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

  • sentence 為待提取的文本。
  • topK 為返回幾個(gè) TF/IDF 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為 20
  • withWeight為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為False
  • allowPOS僅包括指定詞性的詞,默認(rèn)為空,即不篩選

3.6.TF-IDF算法的不足

TF-IDF 采用文本逆頻率 IDF 對(duì) TF 值加權(quán)取權(quán)值大的作為關(guān)鍵詞,但 IDF 的簡(jiǎn)單結(jié)構(gòu)并不能有效地反映單詞的重要程度和特征詞的分布情況,使其無法很好地完成對(duì)權(quán)值調(diào)整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是當(dāng)文本集已經(jīng)分類的情況下。

在本質(zhì)上 IDF 是一種試圖抑制噪音的加權(quán),并且單純地認(rèn)為文本頻率小的單詞就越重要,文本頻率大的單詞就越無用。這對(duì)于大部分文本信息,并不是完全正確的。IDF 的簡(jiǎn)單結(jié)構(gòu)并不能使提取的關(guān)鍵詞, 十分有效地反映單詞的重要程度和特征詞的分布情 況,使其無法很好地完成對(duì)權(quán)值調(diào)整的功能。尤其是在同類語料庫(kù)中,這一方法有很大弊端,往往一些同類文本的關(guān)鍵詞被蓋。

TF-IDF算法實(shí)現(xiàn)簡(jiǎn)單快速,但是仍有許多不足之處:
(1)沒有考慮特征詞的位置因素對(duì)文本的區(qū)分度,詞條出現(xiàn)在文檔的不同位置時(shí),對(duì)區(qū)分度的貢獻(xiàn)大小是不一樣的。
(2)按照傳統(tǒng)TF-IDF,往往一些生僻詞的IDF(反文檔頻率)會(huì)比較高、因此這些生僻詞常會(huì)被誤認(rèn)為是文檔關(guān)鍵詞。
(3)傳統(tǒng)TF-IDF中的IDF部分只考慮了特征詞與它出現(xiàn)的文本數(shù)之間的關(guān)系,而忽略了特征項(xiàng)在一個(gè)類別中不同的類別間的分布情況。
(4)對(duì)于文檔中出現(xiàn)次數(shù)較少的重要人名、地名信息提取效果不佳。

3.7.TF-IDF算法改進(jìn)—TF-IWF算法

https://pdf.hanspub.org//CSA20130100000_81882762.pdf

總結(jié)

以上是生活随笔為你收集整理的3.TF-IDF算法介绍、应用、NLTK实现TF-IDF算法、Sklearn实现TF-IDF算法、算法的不足、算法改进的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。