One-Hot、BOW、TF-IDF、N-Gram區別

1. One-Hot Encoding (獨熱編碼)

  • 核心思想:?為語料庫(所有文檔的集合)中的每個唯一單詞創建一個維度。對于一個特定的單詞,在其對應的維度上標記為1,在所有其他維度上標記為0

  • 表示:?一個非常長的二進制向量(大部分是0),長度等于語料庫的詞匯表大小(|V|)。

  • 特點:

    • 簡單直觀:?最容易理解。

    • 高維稀疏:?向量維度極高(詞匯量大),且每個向量中只有少數幾個位置是1(文檔中出現的詞),其余都是0,極其稀疏。

    • 無詞序信息:?完全丟失了單詞在句子中的順序信息。“貓吃魚”和“魚吃貓”的表示完全一樣。

    • 無頻率信息:?只記錄單詞是否出現(1),不記錄出現的次數。出現一次和出現十次沒有區別。

    • 無語義信息:?無法捕捉單詞之間的任何語義關系(同義詞、反義詞等)。“好”和“優秀”被視為完全不同的、無關的維度。

  • 應用場景:?非常基礎的文本表示,常用于類別型特征(如標簽)的編碼。在文本中單獨使用較少,常作為構建其他模型(如BOW)的基礎組件或用于表示類別標簽。

  • 例子:

    • 詞匯表:[我, 愛, 自然, 語言, 處理]?(|V| = 5)

    • 句子 "我愛自然語言處理" 的 One-Hot 向量:?[1, 1, 1, 1, 1]

    • 句子 "我愛編程" 的 One-Hot 向量:?[1, 1, 0, 0, 0]?(假設詞匯表不變,且"編程"不在詞匯表中則無法表示,這是其局限)


2. Bag-of-Words (詞袋模型, BOW)

  • 核心思想:?建立在 One-Hot 的基礎上。忽略單詞的順序、語法和上下文,只關心詞匯表中每個單詞在文檔中出現的頻率

  • 表示:?一個長度為 |V| 的整數向量(或有時是實數向量)。每個位置的值表示對應單詞在當前文檔中出現的次數。

  • 特點:

    • 簡單高效:?計算相對簡單。

    • 包含頻率信息:?比 One-Hot 更進一步,記錄了單詞出現的次數。

    • 依然高維稀疏:?維度與詞匯表大小 |V| 相同,向量中大部分位置仍然是0(該文檔未出現的詞)。

    • 依然無詞序信息:?和 One-Hot 一樣,完全丟失了單詞順序。"貓吃魚"和"魚吃貓"的 BOW 向量相同。

    • 依然無語義信息:?無法捕捉單詞之間的語義關系。

    • 受常見詞影響大:?"的"、"是"、"在"等常見詞(停用詞)在所有文檔中頻繁出現,在向量中占據很大的值,但它們通常攜帶的信息量很少,可能會淹沒真正重要的詞。

  • 應用場景:?文本分類(如垃圾郵件識別、情感分析初探)、主題建模(如LDA的基礎)等對詞序要求不高且需要簡單快速模型的任務。

  • 例子 (續用One-Hot詞匯表):

    • 詞匯表:[我, 愛, 自然, 語言, 處理]?(|V| = 5)

    • 句子 "我愛自然語言處理" 的 BOW 向量:?[1, 1, 1, 1, 1]

    • 句子 "我愛自然,自然美麗" 的 BOW 向量:?[1, 1, 2, 0, 0]?("自然"出現2次)


3. TF-IDF (詞頻-逆文檔頻率)

  • 核心思想:?對 BOW 的重要改進。旨在解決 BOW 中常見詞權重過高的問題。它認為:

    • 一個詞在當前文檔中出現的次數越多(TF - Term Frequency,詞頻),它對描述該文檔越重要。

    • 但是,如果這個詞在整個語料庫的很多文檔中都出現(DF - Document Frequency,文檔頻率很高),那么它就越常見、越普通,區分不同文檔的能力就越弱。因此需要降低其權重。

    • IDF - Inverse Document Frequency (逆文檔頻率)?就是用來懲罰這種常見詞的。IDF 值與該詞的文檔頻率 DF 成反比。IDF(t) = log(N / (DF(t) + 1))?(N 是語料庫中文檔總數,DF(t) 是包含詞 t 的文檔數,+1 避免除0)。

  • 計算:?對于文檔?d?中的詞?t

    • TF(t, d): 詞?t?在文檔?d?中出現的頻率(可以是原始計數、標準化計數、對數化等)。

    • IDF(t):?log(N / (DF(t) + 1))

    • TF-IDF(t, d) = TF(t, d) * IDF(t)

  • 表示:?一個長度為 |V| 的實數向量。每個位置的值是相應單詞在當前文檔中的 TF-IDF 權重。

  • 特點:

    • 降低常見詞權重,提高重要詞權重:?這是 TF-IDF 的核心優勢。常見詞(如"的"、"是")雖然 TF 可能高,但 IDF 極低(因為 DF 極高),導致其 TF-IDF 值很低。而只在少數特定文檔中頻繁出現的詞(如專業術語、主題關鍵詞)會同時擁有較高的 TF 和較高的 IDF,因此獲得很高的 TF-IDF 值。

    • 包含頻率信息:?基于 TF。

    • 考慮語料庫全局信息:?通過 IDF 引入了語料庫級別的統計信息。

    • 依然高維稀疏:?維度 |V| 大,向量稀疏。

    • 依然無詞序信息:?和 BOW/One-Hot 一樣。

    • 依然無語義信息:?無法捕捉語義關系。

  • 應用場景:?信息檢索(搜索引擎排序)、文本分類、關鍵詞提取、文檔相似度計算等。是 BOW 的強有力替代者,在實踐中應用非常廣泛。

  • 例子 (簡化):

    • 假設語料庫有 1000 個文檔 (N=1000)。

    • 詞 "自然" 出現在 100 個文檔中 (DF=100),其?IDF(自然) = log(1000 / 101) ≈ log(9.9) ≈ 2.29

    • 詞 "的" 出現在 990 個文檔中 (DF=990),其?IDF(的) = log(1000 / 991) ≈ log(1.01) ≈ 0.01

    • 在某個特定文檔 d 中:

      • "自然" 出現了 5 次 (TF(自然, d) = 5) ->?TF-IDF(自然, d) ≈ 5 * 2.29 = 11.45

      • "的" 出現了 20 次 (TF(的, d) = 20) ->?TF-IDF(的, d) ≈ 20 * 0.01 = 0.2

    • 盡管"的"在文檔 d 中出現次數更多 (TF更高),但其 TF-IDF 權重遠低于"自然",因為"自然"更能代表該文檔的特性。


4. N-Gram

  • 核心思想:?不同于前三種方法(主要關注單個詞),N-Gram 關注連續的詞序列。它將文本視為由連續的 N 個單詞組成的單元(稱為 gram)構成的序列。

    • Unigram (1-gram): 單個詞。本質上就是 BOW/TF-IDF 所基于的單元。

    • Bigram (2-gram): 連續的兩個詞。例如:"我愛","愛自然","自然語言","語言處理"。

    • Trigram (3-gram): 連續的三個詞。例如:"我愛自然","愛自然語言","自然語言處理"。

    • 以此類推。

  • 表示:?構建一個基于 N-Gram 的詞匯表。然后可以用 BOW 或 TF-IDF 的方式來表示文檔:

    • N-Gram BOW:?向量長度為 N-Gram 詞匯表大小,每個位置的值是相應 N-Gram 在當前文檔中出現的次數。

    • N-Gram TF-IDF:?向量長度為 N-Gram 詞匯表大小,每個位置的值是相應 N-Gram 在當前文檔中的 TF-IDF 權重。

  • 特點:

    • 捕捉局部詞序信息:?這是 N-Gram 最大的優勢!通過組合連續的詞,它部分地保留了單詞之間的順序和上下文信息。使用 Bigram 就能區分"貓吃魚"("貓吃", "吃魚")和"魚吃貓"("魚吃", "吃貓")。

    • 緩解未登錄詞問題:?即使一個詞沒在訓練語料中出現過,包含它的 N-Gram(特別是較低階的)可能出現過,模型仍能處理。

    • 維度爆炸:?N-Gram 詞匯表的大小遠大于單詞詞匯表的大小(|V|^N 量級)。對于 Bigram,詞匯表大小約為 |V|^2;Trigram 約為 |V|^3。這導致特征向量維度急劇膨脹(比 One-Hot/BOW/TF-IDF 高得多),稀疏性也更高。實際應用中 N 通常取 2 或 3,很少超過 5。

    • 語義信息有限:?雖然捕捉了局部共現,但仍然不能很好地理解深層次的語義關系或長距離依賴。例如,"好"和"優秀"作為不同詞,它們的 N-Gram 仍然是不同的特征。

  • 應用場景:?需要捕捉局部詞序的任務,如:

    • 拼寫檢查(糾正錯詞需要前后文)

    • 機器翻譯(短語結構)

    • 語音識別(聲學模型與語言模型結合)

    • 基礎的文本生成(預測下一個詞)

    • 結合 BOW/TF-IDF 用于文本分類(提供比 unigram 更豐富的特征)


關鍵區別總結表

特性One-HotBOW (詞袋模型)TF-IDFN-Gram
基本單元單個詞單個詞單個詞連續的 N 個詞序列
核心信息詞是否存在 (0/1)詞在當前文檔中的頻率詞在當前文檔中的重要性?(TF * IDF)局部詞序?(上下文片段)
頻率信息? (只有存在性)? (詞頻)? (加權詞頻)? (N-Gram 頻次或加權頻次)
詞序信息???? (在 N 窗口內)
語義信息????? (有限,僅局部共現)
維度/稀疏性極高維 / 極稀疏高維 / 稀疏高維 / 稀疏極高維?(V^N) /?極稀疏
解決常見詞問題??? (IDF懲罰)? (本身不解決,可結合TF-IDF)
主要優勢簡單,表示類別簡單,包含詞頻強調區分性強的詞捕捉局部上下文和順序
主要缺點高維稀疏,無頻率/順序/語義無順序/語義,受常見詞影響大無順序/語義維度爆炸,僅局部順序
關系BOW 的基礎可視為 Unigram (1-gram) 頻率常作用于 Unigram 或 N-Gram可結合 BOW/TF-IDF?使用

代碼示例

1. One-Hot 編碼

代碼示例

Python

from sklearn.preprocessing import OneHotEncoder # 示例數據:3 個樣本,每個樣本是一個類別 data = [["cat"], ["dog"], ["cat"]] # 初始化 One-Hot 編碼器 encoder = OneHotEncoder() encoded = encoder.fit_transform(data) # 輸出結果 print("One-Hot 編碼結果:\n", encoded.toarray()) print("類別映射:", encoder.categories_)

輸出

One-Hot 編碼結果: [[1. 0.] [0. 1.] [1. 0.]] 類別映射: [array(['cat', 'dog'], dtype=object)]

2. BOW(Bag of Words,詞袋模型)

代碼示例

Pytho

from sklearn.feature_extraction.text import CountVectorizer # 示例文本 corpus = [ "the cat sat on the mat", "the dog sat on the log", "the cat and the dog sat" ] # 初始化詞袋模型 vectorizer = CountVectorizer() X = vectorizer.fit_transform(corpus) # 輸出結果 print("詞匯表:", vectorizer.get_feature_names_out()) print("BOW 向量:\n", X.toarray())

輸出

詞匯表: [and' 'cat' 'dog' 'log' 'mat' 'on' 'sat' 'the'] BOW 向量: [[0 1 0 0 1 1 1 2] [0 0 1 1 0 1 1 2] [1 1 1 0 0 1 1 3]]

3. TF-IDF(Term Frequency-Inverse Document Frequency)

代碼示例

Python

from sklearn.feature_extraction.text import TfidfVectorizer # 使用相同的文本數據 vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) # 輸出結果 print("詞匯表:", vectorizer.get_feature_names_out()) print("TF-IDF 向量:\n", X.toarray())

輸出

詞匯表: ['and' 'cat' 'dog' 'log' 'mat' 'on' 'sat' 'the'] TF-IDF 向量: [[0. 0.57735027 0. 0. 0.57735027 0.57735027 0.57735027 0. ] [0. 0. 0.57735027 0.57735027 0. 0.57735027 0.57735027 0. ] [0.68346878 0.34173439 0.34173439 0. 0. 0.34173439 0.34173439 0. ]]

4. N-Gram 模型

Python

from sklearn.feature_extraction.text import CountVectorizer # 使用 Bigram(ngram_range=(2,2)) vectorizer = CountVectorizer(ngram_range=(2, 2)) X = vectorizer.fit_transform(corpus) # 輸出結果 print("Bigram 詞匯表:", vectorizer.get_feature_names_out()) print("Bigram 向量:\n", X.toarray())

輸出

Bigram 詞匯表: ['cat sat' 'dog sat' 'log the' 'mat the' 'on the' 'sat on' 'the cat' 'the dog' 'the log' 'the mat' 'the sat'] Bigram 向量: [[0 0 0 1 1 1 1 0 0 1 0] [0 0 1 0 1 1 0 1 1 0 0] [0 1 0 0 1 1 1 1 0 0 1]]

總結與關系

  1. One-Hot 是最基礎的原子表示。

  2. BOW 是 One-Hot 在文檔級別的頻率擴展。?BOW 本質上就是基于 Unigram (1-gram)。

  3. TF-IDF 是 BOW 的重要加權改進版。?它在詞頻(TF)基礎上引入了逆文檔頻率(IDF)來抑制常見詞、提升關鍵詞語義權重。TF-IDF 通常作用于 Unigram,但也可以作用于 N-Gram。

  4. N-Gram 改變了基本單元。?它不是基于單個詞,而是基于連續的詞序列(詞組/片段)。這使其能夠捕捉局部詞序信息。N-Gram 模型本身只定義了單元,通常需要結合 BOW 或 TF-IDF 來形成文檔的向量表示(即 N-Gram BOW 或 N-Gram TF-IDF)。

  5. 它們都缺乏深層次語義理解。?這些方法都無法真正理解單詞的含義(語義)或復雜的上下文關系。捕捉語義需要更高級的技術,如詞嵌入(Word2Vec, GloVe)和上下文相關的語言模型(BERT, GPT)。

選擇哪種方法取決于具體任務的需求、計算資源以及對詞序和語義的要求。TF-IDF 和 N-Gram (通常是 Bigram/TF-IDF) 在傳統機器學習方法中應用非常廣泛且有效。而深度學習方法(如基于Transformer的模型)則能更好地捕捉語義和長距離依賴。

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

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

相關文章

產品經理如何做用戶調研和訪談

用戶調研和訪談是產品經理挖掘用戶需求、優化產品設計的核心環節。在一個完整的產品流程里面,用戶調研和訪談是非常重要的。 當年史玉柱推出腦白金時,就曾帶領團隊在江蘇很多城市進行了大量的走訪(用戶調研),和一幫老…

【python 讀取抖音/小紅書/微博今日頭條/百度熱點等平臺的熱點新聞】

輕松獲取全網熱點,Python助你掌握實時輿情 在信息爆炸的時代,抖音、小紅書、微博、今日頭條和百度熱點等平臺每天都會產生海量熱門內容。無論是品牌營銷、競品分析還是輿情監控,掌握這些熱點新聞至關重要。利用Python的強大爬蟲技術&#xff…

【1.3 MySQL知識庫 - 輕松理解版】

🚀 MySQL知識庫 - 輕松理解版 一、MySQL核心知識順口溜 🎵 🎤 經典記憶口訣 MySQL數據庫,InnoDB引擎強 ACID事務特性,隔離級別四檔 索引加速查詢,B樹是主梁 主從復制備份,讀寫分離扛 鎖機制防…

計算機網絡期末速成 網絡層 判斷及單選題

判斷題 路由器和鏈路層交換機都被稱為分組交換機。路由器與鏈路層交換機間的根本區別是:路由器在網絡層存儲轉發IP數據報,鏈路層交換機在鏈路層存儲轉發幀。 A. 對 B. 錯 答案: 對 解析: 路由器和鏈路層交換機確實都是分組交換機,但工作層次不同。路由器…

代理 AI 時代的隱私重構:從邊界控制到信任博弈

過去,我們將隱私等同于邊界與權限控制,依賴墻壁、鎖和規則構筑防線。而如今,隨著代理 AI 深度介入生活,成為能感知、決策的自主實體,它不僅處理數據,更在重塑我們的數字形象與內在認知。在此背景下&#xf…

C++實現手寫strstr函數

strstr 函數用于在主字符串中查找子字符串的首次出現位置,以下是高效的實現方案: KMP算法優化版本 #include <iostream> #include <string> #include <vector> using namespace std; // 計算KMP算法的部分匹配表(PMT) vector<int> getNext(const…

Linux操作系統網絡服務模塊一SSH帶外管理概述

前言&#xff1a; 在復雜的網絡運維環境中&#xff0c;?SSH帶外管理&#xff08;Out-of-Band Management&#xff09;?? 是確保系統高可用性的核心技術手段。區別于依賴業務網絡的“帶內管理”&#xff0c;帶外管理通過獨立物理通道?&#xff08;如專用管理網口或串…

org.springframework.cloud.gateway 組件解釋

org.springframework.cloud.gateway 是 Spring Cloud 生態系統中的一個新一代的、功能強大的 API 網關。 1. 什么是 API 網關 (API Gateway)&#xff1f; 在講解 Spring Cloud Gateway 之前&#xff0c;我們先要理解它扮演的角色——API 網關。 在一個微服務架構中&#xff0…

linux ollama 下載安裝

linux ollama 下載安裝 ollama 下載地址ollama 手動安裝解決找不到命令的問題升級[gcc](https://so.csdn.net/so/search?qgcc&spm1001.2101.3001.7020)Centos7 停止維護之后 [升級gcc||找不到devtoolset-8-gcc* 問題解決方案](https://www.cnblogs.com/Jedi-Pz/p/18447117…

2025 滲透工具:【中國蟻劍】連接一句話MUA文件 遠控虛擬機靶機

溫馨提示&#xff1a; 本程序僅作為虛擬機測試環境使用&#xff0c;請勿用于任何不當用途。使用即表示您同意自行承擔可能產生的所有責任。 一、場景復現 1、PhpMystudy軟件啟動網頁模擬靶機 小皮面板(phpstudy) - 讓天下沒有難配的服務器環境&#xff01; 2、開啟apache 3、…

Datawhale 網絡爬蟲技術入門第2次筆記

正則表達式 正則表達式&#xff08;Regular Expression&#xff09;&#xff0c;?種使?表達式的?式對字符串進?匹配的語法規則。 正則的語法&#xff1a;使?元字符進?排列組合來匹配字符串。 在線測試正則表達式&#xff1a;在線正則表達式測試OSCHINA.NET在線工具,os…

詳解Redis的集群模式(主從復制、哨兵與Cluster)

一、主從復制 (Master-Slave Replication) 1. 基本概念 主從復制是Redis最簡單的集群模式&#xff0c;由一個主節點(Master)和一個或多個從節點(Slave)組成。 2. 工作原理 數據同步&#xff1a;從節點啟動時會向主節點發送SYNC命令&#xff0c;主節點執行BGSAVE生成RDB文件并…

如何使用 Airtest 對 Flutter 和 Unity 應用進行UI自動化測試

使用 Airtest 進行 Flutter/Unity UI 自動化測試終極指南 一、 核心原理&#xff1a;為什么 Airtest 能行&#xff1f; 要理解如何用&#xff0c;先要明白其原理。Airtest 采取了“兩條腿走路”的策略&#xff0c;這正是它能通吃各種UI技術的關鍵。 第一條腿&#xff1a;基于…

河馬劇場多部自制劇霸榜,短劇精品化戰略持續推進

臨近暑期&#xff0c;短劇市場熱度逐漸攀升。近期&#xff0c;DataEye發布6月9日—6月15日微短劇熱力榜顯示河馬劇場以8部作品占據TOP30近三分之一席位&#xff0c;前三名中更是占據2個席位&#xff0c;以題材多元化、用戶覆蓋廣、數據爆發力強的特點引領行業風向。其中&#x…

冪級數 (0,R); R ;(R,+oo)

很好&#xff0c;我們現在來回答你問的這個問題&#xff1a; &#x1f7e0; 冪級數在收斂半徑 R R R 以外會發生什么&#xff1f; 我們考慮一個一般形式的冪級數&#xff1a; ∑ n 0 ∞ a n ( x ? x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞?an?(x?x0?)n 它的…

C#學習13——正則表達式

一、正則表達式 是一種匹配輸入文本的模式&#xff0c;是由特殊字符組成&#xff0c;用于匹配字符串中的字符組合。 二、正則表達式有哪些&#xff1f; 1.Regex 類&#xff08;引入System.Text.RegularExpressions;&#xff09; Regex 類用于表示一個正則表達式。 1&#…

【Redis】持久化機制:RDB / AOF 的應用與場景

文章目錄 Redis 持久化一、RDB1.1 說明1.2 觸發機制手動觸發自動觸發 1.3 流程說明1.4 文件處理1.5 優缺點 & 適用場景 二、AOF2.1 說明2.2 使用 AOF2.3 命令寫入2.4 文件同步2.5 重寫機制2.6 啟動時數據恢復2.7 優缺點 & 適用場景 三、不使用 AOF / RDB 的情況3.1 場景…

Python 企業級開發與DevOps實踐

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型項目結構與設計模式 項目結構規范 text 復制 下載 enterprise_app/ ├── docs/ # 項目文檔 ├── tests/ # 測試代碼 │ ├── unit/ …

E結構體基礎.go

前言&#xff1a;結構體是一種用戶自定義的數據類型&#xff0c;它可以將多個不同類型的數據整合在一起&#xff0c;形成一個有機的整體。這就好比在現實生活中&#xff0c;我們有各種各樣的物品&#xff0c;它們各自有不同的屬性和用途&#xff0c;而結構體就像是一個收納箱&a…

Spring @Autowired 依賴注入全解析

Autowired 是 Spring 框架中實現依賴注入的核心注解&#xff0c;其自動裝配過程可分為以下步驟&#xff0c;結合了類型匹配、名稱解析和容器協作機制&#xff1a; 1. 組件掃描與 Bean 定義注冊 掃描階段&#xff1a;Spring 容器啟動時&#xff0c;通過 ComponentScan 或 XML 配…