從One-Hot到TF-IDF:NLP詞向量演進解析與業務實戰指南(一)

從One-Hot到TF-IDF:詞向量演進之路

開場白:

想象一下,你試圖用Excel表格分析《紅樓夢》的情感傾向——每個字詞都是孤立的單元格,計算機看到的只有冰冷的0和1,而“黛玉葬花”的凄美意境卻消失得無影無蹤。這就是NLP工程師每天面對的根本難題:如何讓機器理解那些藏在文字背后的故事?

詞向量技術如同一位“語言煉金術師”,它把“我”、“北京”、“開心”這些符號,熔煉成帶有密碼的數字向量。從最原始的One-Hot編碼(像給每個詞發唯一身份證)到TF-IDF(像給詞語貼重要性標簽),再到Word2Vec、GloVe等模型帶來的語義深度捕捉,最后是現在最先進的編碼器和解碼器模型,這些技術已經極大地推動了自然語言處理的發展。

盡管技術越來越新,但是業務中總會有各種各樣的問題,遇到這種情景你該怎么辦呢?

  1. 當老板要求明天上線一個文本分類系統時,你是花3天調BERT模型,還是用2小時寫TF-IDF+XGBoost?

  2. 明明ChatGPT已經能寫詩,為什么電商大廠還在用20年前的技術檢測刷單評論?

本文將撕開算法黑箱,帶你親歷NLP史上最隱秘的生存法則——用80分的算法解決90分的業務問題,才是工程師的頂級智慧


一、One-Hot編碼

1.1 緣起

由于計算機只能讀懂二進制,所以直接喂給計算機自然語言計算機是不能工作的。

一個很簡單的思路就是用0和1等二進制信息來表示自然語言,于是便有了one-hot編碼表示自然語言的形式。

舉個例子,假如全世界的詞突然減少到了只剩下7個詞,即["我", "要", "去", "北京", "想想", "就", "開心"],那么全世界的詞表也就是["我", "要", "去", "北京", "想想", "就", "開心"],那么每個詞的one-hot編碼為:

  • "我" → [1, 0, 0, 0, 0, 0, 0]

  • "要" → [0, 1, 0, 0, 0, 0, 0]

  • "北京" → [0, 0, 0, 1, 0, 0, 0]

  • “我要去北京”? → [1, 1, 1, 1, 0, 0, 0]

代碼案例:(使用sklearn進行onehot編碼)

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
vectors = encoder.fit_transform([["我"], ["要"], ["去"], ["北京"], ["想想"], ["就"], ["開心"]])
1.2 核心優勢解析
  • 數學可解釋性:每個詞對應唯一正交向量,保證詞間獨立性

  • 零計算成本:無需訓練即可生成特征表示

1.3 缺陷
  • 維度災難:詞表規模(N)決定向量維度(N維),若詞匯量達3萬,每個詞需3萬維稀疏向量,存儲和計算效率極低。

  • 語義鴻溝:Onehot編碼無法捕捉詞匯之間的語義關系,例如“貓”和“狗”在語義上更為接近,但通過onehot編碼后,從向量角度來看,不同的詞向量是正交的,所以相似度為零。

  • 特征稀疏:實際文本中99.9%的維度值為0


二、詞袋模型(Bag of Words):從存在性到重要性的進化

有了one-hot的基礎之后,就引出詞袋模型了。

1.1 核心思想

詞袋模型在One-Hot的"存在性判斷"基礎上,引入詞頻統計這一重要性維度。其核心假設是:詞語在文檔中出現的次數與其語義重要性正相關。這種從布爾邏輯到整數統計的轉變,使得模型能夠區分"重要關鍵詞"與"普通修飾詞"。

舉個例子,假設我們有以下三句話:

  1. "我要去北京"
  2. "想想就開心"
  3. "我要去北京想想就開心"

基于之前的詞表 ["我", "要", "去", "北京", "想想", "就", "開心"],我們可以構建一個詞袋模型,表示如下:

文檔編號北京想想開心
11111000
20000111
31111111

可以看到,每一行表示一個文檔,每一列表示一個詞,值表示該詞在文檔中出現的次數。


代碼案例:(使用sklearn實現詞袋模型)
from sklearn.feature_extraction.text import CountVectorizer# 構建語料庫
corpus = ["我要去北京","想想就開心","我要去北京想想就開心"
]# 初始化詞袋模型
vectorizer = CountVectorizer()# 訓練并轉換語料庫
X = vectorizer.fit_transform(corpus)# 輸出詞表和對應的詞袋矩陣
print("詞表:", vectorizer.get_feature_names_out())
print("詞袋矩陣:\n", X.toarray())

輸出結果:

詞表: ['北京' '就' '開心' '想想' '去' '要' '我']
詞袋矩陣:[[1 0 0 0 1 1 1][0 1 1 1 0 0 0][1 1 1 1 1 1 1]]

1.2 核心優勢解析
  1. 簡單易用:詞袋模型實現簡單,易于理解和使用。
  2. 高效性:對于小規模數據集,詞袋模型能夠快速生成特征向量。
  3. 兼容性強:生成的稀疏矩陣可以直接用于機器學習算法,如邏輯回歸、支持向量機等。
  4. 無序性:忽略詞序后,模型對短文本的處理表現較好。

1.3 缺陷
  1. 忽略語義信息:詞袋模型完全忽略了詞語之間的順序關系,可能會丟失上下文信息。例如,“我喜歡你”和“你不喜歡我”會被視為相同的向量。
  2. 高維稀疏性:當詞表很大時,生成的特征向量會非常稀疏,導致計算效率低下。
  3. 無法捕捉相似性:不同詞之間沒有相似性度量,例如“開心”和“快樂”會被視為完全不同的詞。

1.4 業務價值

有人說,詞袋模型太古老了,現在業務中已經沒有價值了。

非也非也。即便是這么古老的技術也是有意義的。

比如從直播中檢測是否有人用錄播冒充直播的情況

輸入是一段超長文本(重復錄播可以做到24/7的不間斷直播),輸出是是否存在錄播重復True/False。

錄播檢測場景的技術選型邏輯:
1. 編輯距離O(n2)時間復雜度,對10分鐘直播流(約5000字)需計算2500萬次對比
2. 詞袋模型:滑動窗口內詞頻統計 → 向量化 → 余弦相似度計算,時間復雜度降為O(n)

技術對比

方案時間復雜度準確率適用場景
編輯距離O(n2)98%短文本精準匹配
詞袋模型+余弦相似度O(n)92%實時流媒體檢測

所以說,即便是最古老的技術也是有價值的


三、TF-IDF

1.1 核心思想

TF-IDF 是一種統計方法,用于評估一個詞在文檔或語料庫中的重要性。

其核心思想是:如果某個詞在一個文檔中頻繁出現,但在整個語料庫中很少出現,則該詞可能對這個文檔來說是非常重要的。

  • TF(Term Frequency, 詞頻):衡量一個詞在文檔中出現的頻率。可以通過簡單計數、歸一化等方式計算。

    • TF(詞) = (該詞在文檔中出現的次數) / (文檔中所有詞的數量)

    • 舉個例子,如果一個詞在一篇有100個詞的文檔里出現了5次,那么這個詞的詞頻就是 5/100=0.055/100=0.05。

  • IDF(Inverse Document Frequency, 逆文檔頻率):衡量一個詞的普遍重要性。如果一個詞在很多文檔中都出現過,那么它可能不是一個好的區分者。

    • IDF(詞) = log(總文檔數 / 包含該詞的文檔數量)

    • 這里的 log 是以 e 為底的對數函數。例如,如果有1000篇文檔,其中10篇包含某個詞,則 IDF = log(1000/10)=log(100)log(1000/10)=log(100)。

  • TF-IDF:結合了上述兩種指標,旨在通過降低在所有文檔中都很常見的詞匯的重要性來突出那些有助于區分文檔的詞匯。

    • TF-IDF = TF × IDF
    • 這意味著,一個詞在一個特定文檔中的重要性不僅取決于它在這個文檔中出現的頻率,還取決于它在整個文檔集合中的普遍程度。

代碼案例:(使用sklearn實現TF-IDF)
from sklearn.feature_extraction.text import TfidfVectorizer# 構建語料庫
corpus = ["我要去北京","想想就開心","我要去北京想想就開心"
]# 初始化TF-IDF模型
vectorizer = TfidfVectorizer()# 訓練并轉換語料庫
X = vectorizer.fit_transform(corpus)# 輸出詞表和對應的TF-IDF矩陣
print("詞表:", vectorizer.get_feature_names_out())
print("TF-IDF矩陣:\n", X.toarray())

1.2 核心優勢解析
  1. 強調關鍵信息:相比于簡單的詞袋模型,TF-IDF 更加關注那些能夠區分不同文檔的關鍵詞匯。
  2. 減少常見詞影響:通過 IDF 部分,減少了像“的”、“是”這樣的高頻但無實際意義的詞匯的影響。
  3. 適應性強:可以應用于各種類型的文本數據,并且不需要復雜的參數調整。
1.3 缺陷
  1. 忽略上下文:盡管TF-IDF能有效識別關鍵詞,但它仍然忽略了詞語之間的順序和上下文關系。
  2. 維度災難:對于非常大的語料庫,生成的特征向量維度非常高,可能導致計算效率問題。
  3. 無法捕捉同義詞:不同的詞即使具有相似的含義,也會被視為完全不同的實體。
1.4 業務價值

TF-IDF 在如今仍然很常用,如低成本策略大多采用TF-IDF做特征工程,然后接一個分類器做文本分類,這種業務實際中太多了。

較常用的,TF-IDF (特征) + XGBoost/SVM(分類器)= 分類模型

雖然效果上限低于GPU類模型(RNN和預訓練模型),但是成本超低,響應超快,仍然有不少企業采用這種解決方案。


四、技術演進全景圖與業務選型建議

4.1 技術對比矩陣

評估維度One-Hot詞袋模型TF-IDF
語義區分能力?詞頻差異跨文檔重要性
空間復雜度O(V)O(V)O(V)
實時計算性能O(1)O(n)O(n log n)
上下文感知???
最佳適用場景小規模枚舉特征短文本聚類信息檢索


五、結語

今天就是本專欄的第一篇干貨,簡單介紹了一下 tf-idf 的由來和實現。

由于本專欄的策略是實踐中學習,所以我這期將原理,下期就要講代碼了,歡迎訂閱,謝謝大家~

思考題🤔

  1. 對于TF-IDF考慮這樣一種情況,有若干篇文檔,但一種一篇文章是單獨討論狗的,所以狗這個詞的權重就會變的很高。你覺得這樣合理么?有什么解決方案嗎?
  2. TF-IDF出來50000維特征,領導卻說‘反正現在內存便宜直接跑模型唄’——你們會乖乖照做,還是偷偷降維?如果降,怎么和老板解釋‘降維不丟信息’


下期預告:使用 tfidf 進行常見業務的文本分類(代碼實現)🚀

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

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

相關文章

2. kubernetes操作概覽

以下是 Kubernetes 的核心操作概覽,涵蓋常用命令、資源管理和典型場景的操作流程: 1. 核心操作工具 (1) kubectl 命令行工具 Kubernetes 的所有操作均通過 kubectl 實現,常用命令如下: 操作類型命令示例作用說明查看資源狀態ku…

從Ampere到Hopper:GPU架構演進對AI模型訓練的顛覆性影響

一、GPU架構演進的底層邏輯 AI大模型訓練效率的提升始終與GPU架構的迭代深度綁定。從Ampere到Hopper的演進路徑中,英偉達通過?張量核心升級?、?顯存架構優化?、?計算范式革新?三大技術路線,將LLM(大語言模型)訓練效率提升至…

p2p的發展

PCDN(P2P內容分發網絡)行業目前處于快速發展階段,面臨機遇與挑戰并存的局面。 一、發展機遇 技術融合推動 邊緣計算與5G普及:5G的高帶寬、低延遲特性與邊緣計算技術結合,顯著提升PCDN性能,降低延遲&#x…

計算機視覺與深度學習 | 視覺里程計(Visual Odometry, VO)學習思路總結

視覺里程計(Visual Odometry, VO)學習思路總結 視覺里程計(VO)是通過攝像頭捕獲的圖像序列估計相機運動軌跡的技術,廣泛應用于機器人、自動駕駛和增強現實等領域。以下是一個系統的學習路徑,涵蓋基礎理論、核心算法、工具及實踐建議:一、基礎理論與數學準備 核心數學工具…

Ubuntu 24.04 中文輸入法安裝

搜狗輸入法,在Ubuntu 24.04上使用失敗,安裝教程如下 https://shurufa.sogou.com/linux/guide 出現問題的情況,是這個帖子里描述的: https://forum.ubuntu.org.cn/viewtopic.php?t493893 后面通過google拼音輸入法解決了&#x…

阿里云 MSE Nacos 發布全新“安全防護”模塊,簡化安全配置,提升數據保護

作者:張文浩 阿里云在其微服務引擎(MSE)注冊配置中心 Nacos 上正式推出全新“安全防護”功能模塊,旨在幫助企業用戶有效管理安全狀態和降低開啟安全相關功能的學習成本,提升微服務架構的安全性。首期推出的“安全防護…

C#核心(23)StringBuilder

前言 我們先前已經了解了String的一些基本規則和常見的用法,今天就來講一下和string有所區別的StringBulider。 在 C# 中,StringBuilder 類是一個非常有用的工具,特別是在需要頻繁修改字符串時。與 String 類型不同,StringBuilder 類提供了一種動態字符串,可以在不創建新…

活動圖與流程圖的區別與聯系:深入理解兩種建模工具

目錄 前言1. 活動圖概述1.1 活動圖的定義1.2 活動圖的基本構成要素1.3 活動圖的應用場景 2. 流程圖概述2.1 流程圖的定義2.2 流程圖的基本構成要素2.3 流程圖的應用場景 3. 活動圖與流程圖的聯系4. 活動圖與流程圖的區別4.1 所屬體系不同4.2 表達能力差異4.3 使用目的與語境4.4…

idea運行springboot項目,運行時不能生成target

1,問題 項目本來運行正常,突然重啟項目運行時,提醒主類找不到,發現target未生成 2,解決辦法 查看.idea里面的文件,正常是下面這樣的 如果有缺失,刪除.idea里面的文件,清除idea緩…

【unity游戲開發——Animator動畫】Animator動畫狀態機復用——重寫動畫控制器 Animator Override Controller

注意:考慮到UGUI的內容比較多,我將UGUI的內容分開,并全部整合放在【unity游戲開發——Animator動畫】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 一、狀態機復用是什么?二、實戰專欄推薦完結 一、狀態機復…

山東大學軟件學院創新項目實訓(11)之springboot+vue項目接入deepseekAPI

因為該階段是前后端搭建階段,所以沒有進大模型的專項訓練,所以先用老師給的deepseek接口進行代替 且因為前端設計部分非本人負責且還沒有提交到github上,所以目前只能先編寫一個簡易的界面進行功能的測試 首先進行創建model類 然后創建Cha…

FreeRTOS入門與工程實踐-基于STM32F103(二)(互斥量,事件組,任務通知,軟件定時器,中斷管理,資源管理,調試與優化)

互斥量 一、互斥量(Mutex):解決多任務 “搶資源” 的問題 1. 是什么? 互斥量是一種 “任務間互斥訪問資源” 的工具,本質是一個 只能被鎖定(0)或釋放(1)的二進制信號量…

軟考筆記10——網絡與信息安全基礎知識

第十章節——網絡與信息安全基礎知識 網絡與信息安全基礎知識 第十章節——網絡與信息安全基礎知識一、網絡概述1. 計算機網絡概念2. 計算機網絡分類3. 網絡拓補結構4. ISO/OSI網絡體系結構1. ISO/OSI參考模型 二、網絡互聯硬件1. 網絡的設備2. 網絡的傳輸介質 三、網絡協議與標…

Tycoon2FA釣魚工具包發布重大更新,強化反檢測能力

釣魚即服務(PhaaS)平臺升級反檢測功能 網絡安全公司Sekoia于2023年發現的釣魚工具包Tycoon2FA近期發布重大更新,顯著提升了其反檢測能力。該工具包現采用多項高級規避技術,包括通過HTML5 canvas實現的自定義驗證碼、混淆JavaScri…

【信息系統項目管理師】高分論文:論信息系統項目的整合管理(旅游景區導游管理平臺)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文一、制定項目章程二、制訂項目管理計劃三、指導和管理項目工作四、管理項目知識五、監控項目工作六、實施整體變更控制七、結束項目或階段論文 在國家《中國旅游“十三五”發展規劃信息化專項規劃的背景下…

深入理解微信小程序開發:架構、組件化與進階實戰

📘博文正文: 深入理解微信小程序開發:架構、組件化與進階實戰 微信小程序已成為移動互聯網的重要入口。隨著業務復雜度提升,僅靠入門知識已無法應對日常開發需求。本文將深入剖析小程序開發架構、組件化模式、狀態管理、網絡封裝…

PBKDF2全面指南(SpringBoot實現版)

文章目錄 第一部分:PBKDF2基礎概念1. 什么是PBKDF2?2. 為什么需要PBKDF2?3. PBKDF2的工作原理4. PBKDF2與其他密碼散列函數的比較第二部分:在Java和SpringBoot中使用PBKDF21. Java內置的PBKDF2支持2. SpringBoot中集成PBKDF22.1 添加依賴2.2 配置PBKDF2密碼編碼器2.3 自定義…

RTP Payload Format for H.264 Vide(1)

摘要:: 本備忘錄描述了一種用于 ITU-T H.264 視頻編碼標準(與 ISO/IEC 國際標準 14496-10 技術上相同)的 RTP 負載格式,但不包括可伸縮視頻編碼(SVC)擴展和多視角視頻編碼(MVC&#…

論文翻譯:2024-arxiv How to Steer LLM Latents for Hallucination Detection?

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 How to Steer LLM Latents for Hallucination Detection? https://arxiv.org/pdf/2503.01917 https://www.doubao.com/chat/2818934852496130 其它資料: https://blog.csdn.net/we…

第四篇:[特殊字符] 深入理解MyBatis[特殊字符] 掌握MyBatis Generator ——入門與實戰

引言 什么是 MyBatis Generator? MyBatis Generator (MBG) 是一個代碼生成工具,專為 MyBatis 框架設計。它可以根據數據庫表結構自動生成 Java 實體類、Mapper 接口、Mapper XML 文件以及 Example 類。通過使用 MBG,開發者可以顯著減少編寫…