機器學習之TF-IDF文本關鍵詞提取

目錄

一、什么是 TF-IDF?

1.語料庫概念理解

二、TF-IDF 的計算公式

1. 詞頻(TF)

2. 逆文檔頻率(IDF)

3. TF-IDF 值

三、關鍵詞提取之中文分詞的實現

四、TF-IDF簡單案例實現

(1)數據集展示及解釋

(2)代碼實現

1.調庫讀取文件

?2.實例化,并調用fit_transform()

3.為了方便觀察數據,將tfidf的值轉化為稀疏矩陣

4.對df數據集進行排序,我們可以利用pd的特性,利用索引一列一列的取出排序

五、TF-IDF 的優勢與適用場景

六、總結


在自然語言處理(NLP)領域,如何將文本數據轉化為計算機可理解的數值特征是一個核心問題。TF-IDF 作為一種經典的文本加權技術,因其簡單高效的特性,被廣泛應用于文本分類、信息檢索、關鍵詞提取等任務中。本文將從理論原理到代碼實現,全面解析 TF-IDF 的工作機制。

一、什么是 TF-IDF?

TF-IDF(Term Frequency-Inverse Document Frequency,詞頻 - 逆文檔頻率)是一種用于評估一個詞對一個文檔集或語料庫中某個文檔重要性的統計方法。其核心思想是:

  • 一個詞在文檔中出現的次數越多,對文檔的重要性越高(詞頻 TF);
  • 一個詞在整個語料庫的文檔中出現的次數越少,對區分文檔的重要性越高(逆文檔頻率 IDF)。
  • 最終,一個詞的 TF-IDF 值為TF 值 × IDF 值,值越高則該詞對當前文檔的代表性越強。

1.語料庫概念理解

(1)語料庫中存放的是在語言的實際使用中真實出現過的語言材料。

(2)語料庫是以電子計算機為載體承載語言知識的基礎資源。

(3)真實語料需要經過加工(分析和處理),才能成為有用的資源。

舉例理解:假設有一個文件夾,文件夾里面有2000篇文章,想要提取出每篇文章中的關鍵詞。

這里的文件夾內的文件就是一個語料庫 ,而關鍵詞要具有代表性,能夠作為本文章與其他文章之間區分開來

二、TF-IDF 的計算公式

1. 詞頻(TF)

詞頻表示某個詞在當前文檔中出現的頻率,計算公式為:

? ? ? ? ? ? ? ? ? ? ??

例如:一篇文檔總共有 100 個詞,其中 “蘋果” 出現了 5 次,則 “蘋果” 在該文檔中的 TF 值為?(5/100 = 0.05)。

2. 逆文檔頻率(IDF)

逆文檔頻率衡量詞的普遍重要性,計算公式為:

? ? ? ? ? ? ? ? ? ? ?

  • 分母加 1 是為了避免 “包含詞 w 的文檔數為 0” 時出現除以 0 的錯誤(平滑處理);
  • 若一個詞在多數文檔中都出現(如 “的”“是” 等停用詞),其 IDF 值會很低;
  • 若一個詞僅在少數文檔中出現,其 IDF 值會很高。

例如:語料庫有 1000 篇文檔,其中 “蘋果” 出現在 100 篇文檔中,則 “蘋果” 的 IDF 值為? ? ? ? ? ? ??

3. TF-IDF 值

最終,詞w在文檔d中的 TF-IDF 值為兩者的乘積:

? ?

三、關鍵詞提取之中文分詞的實現

英文每個單詞之間都有空格分開,中文之間則不存在這樣的分隔符。

jieba分詞的原理:

jieba是一個人工智能算法,jieba是基于隱馬爾可夫鏈實現的,jieba分詞的內部有點像辭海,分詞的原理(以“我們在學Python辦公自動化”為例)先找到’我‘,然后找到’我們’,其中'自動'和‘自動化都可以是一個詞’。

lcut():jieba庫里的一個方法,用來分詞;cut_all是lcut中的一個參數,將參數設置為True,則函數會返回某一個句子的所有可能的切分結果。

add_word():向jieba的辭海中添加新的詞,那么,我們下次進行分詞時就能將句子中的詞按照你添加的詞進行分詞。

load_userdict():將詞庫文件加載到jieba的辭海中,對文件的要求是一個詞在文件中占一行,函數的參數是需要添加詞庫文件的路徑。

lcut()方法:分詞的結果

cut():分詞的結果

四、TF-IDF簡單案例實現

(1)數據集展示及解釋

數據集總共有6行數據,整個數據集(即遮條數據)可以看成一個語料庫,每一行可以看成一篇文章,每篇文章中有若干個詞。

調用TF-IDF包,來計算每一行的關鍵詞的TF-IDF的值,最終目標是實現把所有文章中的關鍵詞都進行排序,并將排名前五的關鍵詞都打印出來

(2)代碼實現

1.調庫讀取文件

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
inFile = open(r"task2_1.txt", "r")
corpos = inFile.readlines()

????????cospos的數據類型及數據展示

?2.實例化,并調用fit_transform()

fit _transform作用:

fit 步驟:此步驟會分析輸入的文本語料庫(即 corpos),從中學習詞匯表以及每個詞的逆文檔頻率(IDF)值。詞匯表涵蓋了語料庫中所有不同的詞,而 IDF 值體現了每個詞在整個語料庫中的重要程度。
transform 步驟:在學習到詞匯表和 IDF 值之后,該步驟會把輸入的文本語料庫轉換為 TF-IDF 特征矩陣。TF-IDF 是一種衡量詞在文檔中重要性的統計方法,它綜合考慮了詞在文檔中的出現頻率(TF)以及詞在整個語料庫中的稀有程度(IDF)。

vectorizer=TfidfVectorizer()
tfidf=vectorizer.fit_transform(corpos)#打印tfidf的值
print(tfidf)

get_feature_names()?方法的作用就是返回這些特征(詞匯)的名稱,即這個數據集中所有單詞,去重后的詞匯集合

wordlist=vectorizer.get_feature_names()
print(wordlist)

wordlist的值,這里可以看出,它以列表的形式存儲了所有詞

tfidf值數據如下:

解釋其含義:

以這個為例,(0,1)其中0是指這個詞在數據集中處于那個文章中,這里是代表數據集的第一條數據“This is the first document”,這里的1是指在關鍵詞列表(即wordlist)中的位置,可見這里的1對應word list中的第二個值document,0.4489258246711445這個數則是document的TF-IDF的值,表示這個詞的重要程度。

3.為了方便觀察數據,將tfidf的值轉化為稀疏矩陣

df=pd.DataFrame(tfidf.T.todense(),index=wordlist)
print(df)

效果如下

這里的行是指每個單詞,列是指這個單詞位于那個文章中。

4.對df數據集進行排序,我們可以利用pd的特性,利用索引一列一列的取出排序

df.sort_value()排序,pandas類型數據排序,對值進行排序,因為pandas的數據有索引列

for i in range(len(corpos)):featurelist=df[[i]]feature_rank=featurelist.sort_values(by=i,ascending=False)    #對featurelist按數值排序,降序print(feature_rank.head(5))
#打印前五行的內容

這樣就實現了對關鍵詞進行排序,輸出每篇文章前五的關鍵詞

五、TF-IDF 的優勢與適用場景

優勢:

  1. 簡單直觀:原理易于理解,計算成本低;
  2. 效果穩定:在文本分類、關鍵詞提取等任務中表現可靠;
  3. 可解釋性強:權重直接反映詞對文檔的重要性。

適用場景:

  • 文本分類、情感分析;
  • 信息檢索(如搜索引擎排序);
  • 關鍵詞提取(如文章摘要生成);
  • 文檔相似度計算。

六、總結

TF-IDF 作為一種經典的文本特征提取方法,以其簡單高效的特點在 NLP 領域經久不衰。它通過詞頻和逆文檔頻率的加權,有效突出文檔中的關鍵信息,為后續的文本分析任務奠定基礎。

盡管近年來詞向量(如 Word2Vec)、預訓練模型(如 BERT)在語義理解上表現更優,但 TF-IDF 在輕量化場景、可解釋性要求高的任務中仍不可替代。掌握 TF-IDF 的原理和實現,是入門文本處理的重要一步。

希望本文能幫助你理解 TF-IDF 的核心思想,歡迎在實際項目中嘗試并優化這一方法!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93100.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flutter屏幕和字體適配(ScreenUtil)

一、簡介 flutter_screenutil 是一個 Flutter 插件,專門用于處理屏幕適配問題。它簡化了不同設備間尺寸差異的處理,確保你的應用在各種屏幕上都能保持良好的顯示效果。開發者可以通過簡單的調用來設置基于設計圖尺寸的控件寬高和字體大小。 項目地址&a…

mimiconda+vscode

安裝miniconda實現python包管理,并通過vscode進行編寫python代碼 miniconda簡單介紹 Miniconda 是 Anaconda 公司的一個輕量級 Python 發行版本,它包含了最基本的包管理器 conda 和 Python 環境,只帶最核心的組件,沒有額外的大量科…

Windows文件時間修改指南:從手動到自動化

修改文件的時間屬性可以滿足多種需求。比如,它可以幫助整理文件,使得文件按照特定的時間順序排列,有助于更好地管理資料。它的體積真小,才300多KB。能用來調整文件的創建時間、最后訪問和修改時間。文件時間屬性修改_NewFileTime.…

能刷java題的網站

以下是一些適合刷Java題的優質網站,涵蓋從基礎到進階、算法面試及實戰項目等多種需求: ?一、綜合編程練習平臺? ?LeetCode?(leetcode.com) ?特點?:全球最知名的算法題庫,含海量Java題目,分…

掘金數據富礦,永洪科技為山東黃金定制“數智掘金”實戰營

在黃金開采的轟鳴聲中,另一場靜水深流的“掘金行動”正悄然展開。山東黃金集團,這個行業的巨頭,在深挖地層寶藏的同時,也敏銳捕捉到數據洪流中蘊藏的價值富礦。然而,當海量業務數據匯聚,如何從中精準提煉決…

【論文閱讀】BEVFormer論文解析及Temporal Self-Attention、Spatial Cross-Attention注意力機制詳解及代碼示例

BEVFormer: Learning Bird’s-Eye-ViewRepresentation from Multi-Camera Images via Spatiotemporal Transformers|Temporal Self-Attention、Spatial Cross-Attention注意力機制詳解 BEVFormer(Bird’s-Eye-View Former)是一種先進的計算機視覺模型&am…

在 Ubuntu 中docker容器化操作來使用新建的 glibc-2.32

在 Ubuntu 中使用容器化操作來使用新建的 glibc-2.32,可以通過創建自定義 Docker 鏡像來實現。以下是完整的解決方案: 方案 1:創建包含 glibc-2.32 的 Docker 鏡像 1. 創建 Dockerfile dockerfile # 使用 Ubuntu 基礎鏡像 FROM ubuntu:20.04# 安裝編譯依賴 RUN apt-get …

GOOUUU ESP32-S3-CAM 果云科技開發板開發指南(二)(超詳細!)Vscode+espidf 攝像頭拍攝視頻實時傳輸到LCD,文末附源碼

書接上回,上一篇blog是使用esp32s3通過ov2640攝像頭拍攝到一幀照片,并把它保存到了SD卡中,這第二篇就通過LCD將拍攝到的圖片顯示到LCD上,本次分享硬件使用的 ESP32-S3-CAM 果云科技開發板,并且使用了配套的LCD擴展板&a…

攻防世界-ics-05(遠程文件執行)

一.審題大致瀏覽一下網頁,發現就這邊會有東西。看一下源碼會不會有東西或者稍微點擊一下這個頁面的內容看會不會出現東西。點擊了一下這個云平臺設備維護中心發現url變了,是get的方法傳page參數二.嘗試漏洞類型自己這邊試了sql注入發現不是,試…

Dell PowerEdge: Servers by generation (按代系劃分的服務器)

Dell PowerEdge: Servers by generation {按代系劃分的服務器}1. Table of 17th, 16th, 15th, and 14th Generation PowerEdge servers2. List of all PowerEdge server models including Type, CPU vendor, Generation, and Remote ManagementReferencesPowerEdge: Servers by…

Rust學習筆記(二)|變量、函數與控制流

本篇文章包含的內容1 變量與常量2 類型2.1 標量類型2.2 復合類型3 函數4 控制流4.1 分支4.2 循環1 變量與常量 在Rust中,使用let關鍵字聲明一個變量,變量默認是不可變的。如果要聲明可變變量,需要使用mut關鍵字將其聲明為可變變量。 let x …

【渲染流水線】[幾何階段]-[圖元裝配]以UnityURP為例

【從UnityURP開始探索游戲渲染】專欄-直達 前情提要 【渲染流水線】主線索引-從數據到圖像以UnityURP為例-CSDN博客 圖元裝配負責將離散頂點組裝成完整幾何圖元(如點、線、三角形、三角形條帶) (對渲染的探索是個持續不斷完善的過程&#x…

jvm有哪些垃圾回收器,實際中如何選擇?

7.G1收集器一款面向服務端應用的垃圾收集器。 特點如下: 并行與并發:G1能充分利用多CPU、多核環境下的硬 件優勢,使用多個CPU來縮短Stop-The-World停頓時間。部分收集器原本需要停頓Java線程來執行GC動作,G1收 集器仍然可以通過并…

多語言與隱形攻擊:LLM安全防線為何被頻頻突破?

你是否曾以為,只要加裝了“防火墻”,大型語言模型(LLM)就能高枕無憂?Trendoyl 的實際測試卻讓我大吃一驚:即便部署了 Meta 的 Llama Guard,攻擊者還是能輕松用多語種、字符混淆,甚至…

分布式光伏氣象站:為光伏電站的 “氣象感知眼”

分布式光伏氣象站:為光伏電站的 “氣象感知眼”柏峰 【BF-GFQX】在全球能源轉型的浪潮中,分布式光伏發電憑借其就近消納、清潔高效的優勢,成為能源結構優化的重要力量。而分布式光伏氣象站,作為光伏電站的 “智慧感知眼”&#xf…

TCP與UDP:如何選擇最佳傳輸協議

應用場景選擇如果需要可靠傳輸,首選 TCP如果需要傳輸的數據包很大,也首選 TCP絕大部分的場景,都可以優先考慮 TCPUDP 相比于 TCP,最大的優點在于傳輸效率有些情況,既需要可靠性又需要性能,這個時候時候就需…

《Leetcode》-面試題-hot100-棧

題目列表 20. 有效的括號 簡單難度 leetcode鏈接 155. 最小棧 中等難度 leetcode鏈接 394. 字符串解碼 中等難度 leetcode鏈接 739. 每日溫度 中等難度 leetcode鏈接 84. 柱狀圖中最大的矩形 困難難度 leetcode鏈接 題目 (1)有效的括號 題目 給…

GPT-5、Claude-4 同臺亮相!OneEval發布全新“大模型+知識庫”評測白皮書!

OneEval官網地址:http://OneEval.OpenKG.cnOneEval文章鏈接:https://arxiv.org/abs/2506.12577要點導讀 今年4月,OpenKG發布“大模型知識庫”融合能力評估榜單OneEval v1.0。近期,OpenKG在此基礎上,組織撰寫了OneEv…

【最新版】沃德云商協系統全開源+uniapp小程序

一.介紹沃德云商協是一款基于FastAdmin(thinkphp)Uniapp開發的“多組織”的云服務平臺,打造總商會、總協會、總校友會、工商聯等多組織無障礙溝通合作平臺,讓各大分會、各大分校友會、分組織實現輕松管理,線上宣傳展示…

Wireshark專家模式定位網絡故障:14種TCP異常深度解剖

TCP連接如同精密運轉的傳送帶,每一個異常數據包都是故障的早期信號。作為網絡工程師的“外科手術刀”,Wireshark在TCP故障診斷領域的價值無可替代。本文將通過14個真實故障場景,揭示如何利用Wireshark專家系統(Expert System&…