TD-IDF的一些應用

TF-IDF(詞頻 - 逆文檔頻率)作為經典的文本特征提取算法,在自然語言處理(NLP)領域應用廣泛。它能將文本轉化為可量化的數值特征,為后續的數據分析和建模提供基礎。本文結合實際場景,介紹如何用 Python 實現 TF-IDF 的常見應用。

一、環境準備

首先確保安裝必要的庫,最常用的是?scikit-learn(提供成熟的 TF-IDF 工具)和?nltk(可選,用于文本預處理):

pip install scikit-learn nltk

二、核心工具:TfidfVectorizer

scikit-learn?中的?TfidfVectorizer?是實現 TF-IDF 的核心工具,它集成了文本分詞、詞頻計算、IDF 加權等功能,無需手動編寫復雜公式。基本用法如下:

from sklearn.feature_extraction.text import TfidfVectorizer# 示例文本數據
documents = ["Python是一種流行的編程語言,適合數據分析和機器學習","機器學習是人工智能的一個分支,依賴大量數據訓練模型","數據分析常用Python工具,如Pandas和NumPy,處理結構化數據","人工智能包括機器學習、自然語言處理等多個領域"
]# 初始化TF-IDF向量器(默認分詞會按空格和標點分割,支持中文)
tfidf = TfidfVectorizer(max_features=100,  # 保留Top N高頻詞stop_words=["是", "的", "一種"],  # 自定義停用詞(過濾無意義詞匯)lowercase=False  # 不強制轉為小寫(中文無需小寫處理)
)# 擬合數據并轉換為TF-IDF矩陣
tfidf_matrix = tfidf.fit_transform(documents)# 獲取詞匯表(所有分詞后的詞語)
words = tfidf.get_feature_names_out()
print("詞匯表:", words)# 輸出TF-IDF矩陣(每行對應一篇文檔,每列對應一個詞的TF-IDF值)
print("\nTF-IDF矩陣形狀:", tfidf_matrix.shape)  # (文檔數, 詞匯數)

三、實戰應用場景

1. 自動提取文檔關鍵詞

關鍵詞提取是 TF-IDF 最經典的應用之一。通過對單篇文檔的 TF-IDF 值排序,可快速定位核心詞匯。

def extract_keywords(tfidf_matrix, words, doc_index, top_n=3):"""提取指定文檔的Top N關鍵詞"""# 獲取該文檔的TF-IDF向量doc_tfidf = tfidf_matrix[doc_index].toarray()[0]# 按TF-IDF值降序排序,返回詞語和分數keyword_scores = sorted(zip(words, doc_tfidf), key=lambda x: x[1], reverse=True)# 過濾分數為0的詞,取前N個return [word for word, score in keyword_scores if score > 0][:top_n]# 提取第1篇文檔(索引0)的關鍵詞
print("文檔1關鍵詞:", extract_keywords(tfidf_matrix, words, doc_index=0))
# 輸出示例:['Python', '編程語言', '數據分析']

應用場景:論文摘要關鍵詞自動生成、新聞主題標簽推薦、文檔快速摘要。

2. 文本相似度計算

通過比較兩篇文檔的 TF-IDF 向量相似度,可判斷內容相關性(如查重、推薦相似文章)。

from sklearn.metrics.pairwise import cosine_similarity# 計算文檔間的余弦相似度(值越接近1,相似度越高)
similarity_matrix = cosine_similarity(tfidf_matrix)
print("\n文檔相似度矩陣:")
for i in range(len(similarity_matrix)):for j in range(i+1, len(similarity_matrix)):print(f"文檔{i+1}與文檔{j+1}的相似度:{similarity_matrix[i][j]:.4f}")# 示例輸出:文檔2與文檔4的相似度較高(都涉及“人工智能”“機器學習”)

應用場景:文章查重系統、推薦系統(如 “猜你喜歡”)、問答系統中匹配相似問題。

3. 文本分類預處理

TF-IDF 可將文本轉化為機器學習模型能處理的數值特征,為分類任務提供輸入。

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score# 準備帶標簽的文本數據(示例:科技類=0,教育類=1)
texts = ["Python用于數據分析和機器學習","人工智能技術在醫療領域的應用","中小學編程教育納入課程體系","在線教育平臺助力學生自主學習"
]
labels = [0, 0, 1, 1]  # 標簽:科技=0,教育=1# 轉換為TF-IDF特征
tfidf = TfidfVectorizer()
X = tfidf.fit_transform(texts)
y = labels# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 用樸素貝葉斯模型分類
model = MultinomialNB()
model.fit(X_train, y_train)# 預測并評估準確率
y_pred = model.predict(X_test)
print("\n分類準確率:", accuracy_score(y_test, y_pred))  # 示例:準確率1.0# 預測新文本類別
new_text = ["機器學習課程走進高中課堂"]
new_text_tfidf = tfidf.transform(new_text)
print("新文本預測類別:", model.predict(new_text_tfidf))  # 輸出:1(教育類)

應用場景:垃圾郵件識別、情感分析(正面 / 負面評價)、新聞分類(科技 / 體育 / 娛樂)。

4. 搜索引擎基礎

在簡易搜索引擎中,可通過 TF-IDF 計算查詢詞與文檔的相關性,返回最匹配的結果。

def search(query, documents, tfidf):"""根據查詢詞返回相關文檔排序"""# 將查詢詞轉換為TF-IDF向量query_tfidf = tfidf.transform([query])# 計算與所有文檔的相似度similarities = cosine_similarity(query_tfidf, tfidf_matrix).flatten()# 按相似度降序返回文檔索引return [documents[i] for i in similarities.argsort()[::-1] if similarities[i] > 0]# 搜索示例
query = "Python 數據分析"
print("\n搜索結果:")
for doc in search(query, documents, tfidf):print("-", doc)
# 輸出:優先返回包含“Python”和“數據分析”的文檔

應用場景:站內搜索、文檔檢索系統、智能客服知識庫查詢。

四、進階技巧與優化

  1. 中文分詞優化
    TfidfVectorizer?默認按標點和空格分詞,對中文不夠友好。可結合?jieba?進行精準分詞:

    import jieba
    from sklearn.feature_extraction.text import TfidfVectorizer# 自定義分詞函數
    def jieba_tokenizer(text):return jieba.lcut(text)  # 精確分詞# 初始化向量器時指定分詞函數
    tfidf = TfidfVectorizer(tokenizer=jieba_tokenizer)
    
  2. 停用詞處理
    過濾無意義詞匯(如 “的”“在”“嗎”)可提升效果,可使用?nltk?或自定義停用詞表:

    from nltk.corpus import stopwords
    # 下載英文停用詞(中文需自定義)
    import nltk
    nltk.download('stopwords')
    english_stopwords = stopwords.words('english')
    tfidf = TfidfVectorizer(stop_words=english_stopwords)
    
  3. 參數調優

    max_features:限制詞匯表大小,避免維度災難;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ngram_range:支持詞組特征(如?(1,2)?表示同時考慮單個詞和詞組);? ? ? ? ? ? ? ? ? ? ? min_df/max_df:過濾在太少 / 太多文檔中出現的詞(如?min_df=2?表示只保留至少在 2 篇文檔中出現的詞)。

五、局限性與替代方案

TF-IDF 雖簡單高效,但存在局限性:

忽略詞語語義關系(如 “電腦” 和 “計算機” 無法識別為同義詞);

對短文本效果較差,依賴詞頻統計;

無法捕捉上下文信息。

替代方案:

詞向量(Word2Vec、GloVe):保留語義關系;

BERT 等預訓練模型:捕捉上下文語義,適用于復雜 NLP 任務。

總結

TF-IDF 作為文本特征提取的 “基石算法”,憑借簡單、高效、可解釋性強的特點,在關鍵詞提取、相似度計算、文本分類等場景中仍被廣泛使用。通過?scikit-learn?等工具,我們可以快速將其應用到實際項目中,解決文本分析的基礎問題。對于更復雜的語義理解需求,可結合詞向量或預訓練模型進一步優化,但 TF-IDF 仍是入門 NLP 的必備技能。

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

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

相關文章

Redis 緩存問題詳解及解決方案

一、緩存擊穿 (Cache Breakdown) 原理: 某個熱點 Key 突然過期,同時大量并發請求該 Key,導致請求直接穿透緩存擊穿到數據庫。 解決方案: 互斥鎖 (Mutex Lock) 當緩存失效時,僅允許一個線程重建緩存,其他線程…

一周一個數據結構 第一周 --- 順序表(下)

文章目錄一、ArrayList的構造二、ArrayList常見操作三、ArrayList的遍歷四、ArrayList練習1.【小練習】2.楊輝三角3.簡單的洗牌算法五、ArrayList小結在上一章節中,我們通過代碼示例以及畫圖的方式詳細了解了順序表,并模擬實現了它。那么,是不…

OpenCV的關于圖片的一些運用

一、讀取圖片通過cv2庫中的imread()方法讀取圖片代碼:import cv2 a cv2.imread(1.png) cv2.imshow(tu,a) b cv2.waitKey(4000) # 圖片執行時間 cv2.destroyAllWindows() # 關閉所有端口 print("圖像形狀(shape):",a.shape) print…

【數據結構——并查集】

引入 并查集(Disjoint Set Union,DSU)是一種用于管理元素分組的數據結構。 合并(Union):將兩個不相交的集合合并為一個集合。 查找(Find):確定某個元素屬于哪個集合&…

在 Vue 中使用 ReconnectingWebSocket實現即時通訊聊天客服功能

在 Vue 中使用 ReconnectingWebSocketReconnectingWebSocket 是一個自動重連的 WebSocket 實現,非常適合在 Vue 項目中使用。下面是如何在 Vue 中集成和使用它的方法:搜索 "程序員老狼"安裝 ReconnectingWebSocket首先,你需要安裝…

智能體革命:網絡安全人的角色重塑與突圍指南

AI賦能千行百業的趨勢不可逆轉,當AI學會滲透測試,安全工程師的出路在哪里? 2025年8月7日,OpenAI正式發布GPT-5的消息刷屏科技圈。這個達到博士生水平的“統一”人工智能模型,將AI幻覺率降低60%,成本下降45%…

用于水T1值和脂肪分數量化的上半身自由呼吸磁共振指紋成像|文獻速遞-醫學影像算法文獻分享

Title題目Upper-body free-breathing Magnetic Resonance Fingerprinting applied tothe quantification of water T1 and fat fraction用于水T1值和脂肪分數量化的上半身自由呼吸磁共振指紋成像 01文獻速遞介紹磁共振指紋成像(MRF)是十年前推出的一種高…

Apache RocketMQ:消息可靠性、順序性與冪等處理的全面實踐

Apache RocketMQ 是一個高性能、高可靠的分布式消息中間件,廣泛應用于異步通信、事件驅動架構和分布式系統中。本文深入探討 RocketMQ 的消息可靠性、順序性和冪等處理機制,結合 Redisson 分布式鎖實現冪等消費,提供詳細的代碼示例和實踐建議…

無服務器日志分析由 Elasticsearch 提供支持,推出新的低價層

作者:來自 Elastic Log Analytics Elastic Observability Logs Essentials 在 Elastic Cloud Serverless 上提供成本效益高、無麻煩的日志分析。 SREs 可以攝取、搜索、豐富、分析、存儲和處理日志,而無需管理部署的運營開銷。[](https://www.elastic.co…

(Arxiv-2025)Phantom-Data:邁向通用的主體一致性視頻生成數據集

Phantom-Data:邁向通用的主體一致性視頻生成數據集 paper是字節發布在Arxiv2025的工作 paper title:Phantom-Data: Towards a General Subject-Consistent Video Generation Dataset Code:鏈接 Abstract 近年來,主體到視頻&#…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘mlflow’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘mlflow’問題 摘要 在Python開發中,pip install 報錯是一種常見問題,尤其是在使用集成開發環境(IDE)如PyCharm時…

2020/12 JLPT聽力原文 問題一 3番

3番:會社で女の人と男の人が話しています。女の人は倉庫に入るとき、どの順番で入口のボタンを押さなければなりませんか。 女:すみません。地下の倉庫に行って、資料を取ってきたいんですが、入口の開け方がわからなくて… 男:ああ、最近、管…

C#/.NET/.NET Core技術前沿周刊 | 第 49 期(2025年8.1-8.10)

前言 C#/.NET/.NET Core技術前沿周刊,你的每周技術指南針!記錄、追蹤C#/.NET/.NET Core領域、生態的每周最新、最實用、最有價值的技術文章、社區動態、優質項目和學習資源等。讓你時刻站在技術前沿,助力技術成長與視野拓寬。 歡迎投稿、推薦…

基于強化學習的目標跟蹤 研究初探

強化學習 目標跟蹤Visual tracking by means of deep reinforcement learning and an expert demonstratorYOLO 檢測下基于 ETC-DDPG 算法的無人機視覺跟蹤基于特征與深度強化學習方法的機器人視覺伺服技術研究高性能可拓展視頻目標跟蹤算法研究基于目標運動與外觀特征的多目標…

排序與查找,簡略版

數組的排序 排序的基本介紹 排序是將一組數據,按照一定順序進行排列的過程 排序的分類: 內部排序: 一次性適用數據量小的情況 將需要處理的數據都加載到內部存儲器中進行排序。包括交換式排序,選擇式排序,插入式排序 外…

打靶日常-XSS(反射型和存儲型)

目錄 小皮: 1. 2.這里需要登錄,我們之前爆破出賬號密碼在這里就可以用?編輯 登錄之后:?編輯 使用工具: 先輸入正確字符進行測試:aaa 進行測試: 3.換種控制臺顯示 結果:(使用f12大法) DVWA: 反射型XSS: 低: ?編輯 中:大小寫繞過: ?編輯 也可以雙寫繞過: ?編…

二叉搜索樹深度解析:從原理實現到算法應用----《Hello C++ Wrold!》(18)--(C/C++)

文章目錄前言二叉搜索樹(二叉排序樹或二叉查找樹)二叉搜索樹的模擬實現二叉搜索樹和有序數組二分查找的比較兩個搜索模型作業部分前言 二叉搜索樹(Binary Search Tree,簡稱 BST)作為一種重要的樹形數據結構&#xff0…

牛客.空調遙控二分查找牛客.kotori和氣球(數學問題)力扣.二叉樹的最大路徑和牛客.主持人調度(二)

目錄 牛客.空調遙控 二分查找 牛客.kotori和氣球(數學問題) 力扣.二叉樹的最大路徑和 牛客.主持人調度(二) 牛客.空調遙控 枚舉n個空調之后,使數組有序,左右下標,用二分查找,然后一個求 長度就好 二分查找 /二分理…

《嵌入式Linux應用編程(二):標準IO高級操作與文件流定位實戰》

今日學習內容1. 行輸入函數安全實踐(1) fgets vs gets函數安全特性換行符處理緩沖區保護fgets指定讀取長度(size-1)保留\n并添加\0安全(防溢出)gets無長度限制將\n替換為\0危險2. Linux標準文件流文件流符號設備 標準輸入stdin鍵盤…

Springboot2+vue2+uniapp 小程序端實現搜索聯想自動補全功能

目錄 一、實現目標 1.1 需求 1.2 實現示例圖: 二、實現步驟 2.1 實現方法簡述 2.2 簡單科普 2.3 實現步驟及代碼 一、實現目標 1.1 需求 搜索聯想——自動補全 (1)實現搜索輸入框,用戶輸入時能顯示模糊匹配結果 &am…