Word2Vec詞嵌入技術和動態詞嵌入技術

Word2Vec(Word to Vector)是 2013 年由 Google 團隊提出的無監督詞嵌入模型,是一種靜態詞嵌入技術,核心目標是將自然語言中的離散詞匯映射為低維、稠密的實數向量(即 “詞向量”),讓向量空間的距離和方向能夠反映詞匯的語義關聯(如 “國王” 與 “女王” 的向量差近似 “男人” 與 “女人” 的向量差)。它解決了傳統文本表示(如 One-Hot 編碼)“維度災難” 和 “語義孤立” 的問題,成為 現代自然語言處理(NLP)的基礎技術之一。

核心背景:為什么需要 Word2Vec?

在 Word2Vec 出現前,主流的文本表示方法存在明顯缺陷,無法捕捉語義信息:

  1. One-Hot 編碼:將每個詞表示為長度等于詞匯表大小的向量,僅對應詞的位置為 1,其余為 0。
    • 缺陷:維度極高(詞匯表 10 萬則向量長度 10 萬)、稀疏性強,且無法體現詞與詞的語義關聯(如 “貓” 和 “狗” 的向量點積為 0,無任何相似性)。
  2. Bag of Words(詞袋模型):統計詞在文本中的出現頻率,忽略語序和語義。
    • 缺陷:同樣無法捕捉語義,且 “重要” 和 “不重要” 的詞權重無差異(需依賴 TF-IDF 優化,但仍無語義關聯)。

Word2Vec 的核心突破是:用低維向量的 “數值關系” 刻畫詞匯的 “語義關系”,例如:

  • 向量計算:vec(國王) - vec(男人) + vec(女人) ≈ vec(女王) 式子變換一下可以這樣理解:vec(國王) - vec(女王) ≈ vec(男人) - vec(女人)
  • 相似性:cos( vec(貓), vec(狗) ) 的值遠大于 cos( vec(貓), vec(汽車) )

Word2Vec 算法的兩大核心模型(落地的實現技術)

Word2Vec 并非單一模型,而是包含兩種互補的無監督學習架構,二者均基于 “上下文與目標詞的共現關系”(即 “通過周圍詞預測中心詞,或通過中心詞預測周圍詞”)構建語義關聯。

1. CBOW 模型(Continuous Bag of Words,連續詞袋模型)

核心思想:用 “上下文詞” 預測 “中心詞”
例如句子 “我 愛 自然 語言 處理”,若以 “自然” 為中心詞,上下文窗口(假設窗口大小為 2)為 “愛” 和 “語言”,CBOW 的任務是:輸入 “愛” 和 “語言” 的向量,輸出 “自然” 的概率。

模型結構(3 層神經網絡)

  • 輸入層:上下文詞的 One-Hot 向量(假設窗口大小為 2,共 2 個向量,每個長度為 V,V 為詞匯表大小)。
  • 隱藏層:對輸入的上下文詞向量取平均(或求和),得到一個長度為 N 的向量(N 為詞向量維度,通常取 50-300),此層無激活函數。
  • 輸出層:Softmax 層,輸出詞匯表中每個詞作為 “中心詞” 的概率,目標是讓真實中心詞的概率最大。

特點

  • 小數據集更魯棒:上下文詞的平均操作能降低噪聲影響。
  • 訓練速度更快:每次輸入多個上下文詞,對高頻詞的處理更高效。

2. Skip-gram 模型(跳字模型)

核心思想:用 “中心詞” 預測 “上下文詞”
仍以句子 “我 愛 自然 語言 處理” 為例,以 “自然” 為中心詞,上下文窗口為 2,Skip-gram 的任務是:輸入 “自然” 的向量,輸出 “愛” 和 “語言” 的概率。
模型結構(3 層神經網絡)

  • 輸入層:中心詞的 One-Hot 向量(長度為 V)。
  • 隱藏層:將輸入向量與權重矩陣(V×N)相乘,得到長度為 N 的詞向量,無激活函數(此向量即為最終的詞嵌入結果)。
  • 輸出層:Softmax 層,輸出詞匯表中每個詞作為 “上下文詞” 的概率,目標是讓真實上下文詞的概率最大。

特點

  • 低頻詞更友好:能從少量低頻詞的共現中學習到更準確的語義(例如 “量子”“區塊鏈” 等低頻專業詞)。
  • 語義捕捉更精準:在大數據集上表現優于 CBOW,是 Word2Vec 中更常用的架構。

兩種模型對比

在這里插入圖片描述

關鍵優化:解決 Softmax 計算瓶頸

Word2Vec 的原始模型(尤其是輸出層的 Softmax)存在嚴重的計算瓶頸:
Softmax 的概率計算需遍歷整個詞匯表(P(w_i) = exp(z_i) / Σ_{j=1 to V} exp(z_j)),若詞匯表大小 V=100 萬,則每次預測需計算 100 萬次指數和求和,訓練效率極低。

為解決此問題,Word2Vec 引入了兩種核心優化方法:

1. 負采樣(Negative Sampling,NS)

核心思想:將 “多分類問題” 轉化為 “二分類問題”

  • 原始任務:判斷 “中心詞與上下文詞是否為真實共現對”(需區分 V 個詞,多分類)。
  • 優化后任務:對1 個真實共現對(正樣本)K 個隨機采樣的非共現對(負樣本) ,訓練模型區分 “正 / 負樣本”(二分類)。

具體步驟

  1. 對當前中心詞 w 和上下文詞 c,標記為正樣本((w,c) 是真實共現對)。
  2. 從詞匯表中隨機采樣 K 個詞(通常 K=5-20),確保這些詞與 w 無共現關系,標記為負樣本((w,c1), (w,c2), …, (w,cK))。
  3. 用 Sigmoid 函數替代 Softmax,計算每個樣本的 “正例概率”,目標是讓正樣本概率接近 1,負樣本概率接近 0。

優勢

  • 計算量從 O (V) 降至 O (K),K 遠小于 V(如 V=100 萬,K=10),訓練速度提升 10 萬倍。
  • 負樣本采樣遵循 “高頻詞更易被采樣” 的原則(用P(w) ∝ f(w)^0.75,f (w) 為詞的頻率),更符合真實語言規律。

2. 層次 Softmax(Hierarchical Softmax)

核心思想:用 “二叉樹” 替代 “全連接 Softmax”
將詞匯表中的所有詞作為二叉樹的葉子節點,每個非葉子節點代表一個二分類決策(左子樹為 “0”,右子樹為 “1”)。從根節點到葉子節點的路徑,對應該詞的 “概率計算路徑”。

具體步驟

  1. 構建一棵哈夫曼樹(Huffman Tree):高頻詞的路徑更短,低頻詞的路徑更長,減少整體計算量。
  2. 計算詞 w 的概率時,無需遍歷所有葉子節點,只需沿根節點到 w 的路徑,計算每個非葉子節點的二分類概率(用 Sigmoid 函數),最終概率為路徑上所有概率的乘積。

優勢

  • 計算量從 O (V) 降至 O (logV)(哈夫曼樹的深度為 log2V),適合高頻詞占比高的場景。
  • 無需采樣負樣本,避免負樣本選擇帶來的誤差。

四、訓練過程與超參數

在這里插入圖片描述
在這里插入圖片描述

五、優缺點與應用場景

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

六、與其他詞嵌入技術的對比

在這里插入圖片描述

七、實踐工具與代碼示例

在這里插入圖片描述
2. Gensim 實現 Word2Vec 示例

from gensim.models import Word2Vec
from gensim.utils import simple_preprocess# 1. 準備語料(需先分詞,此處用simple_preprocess簡單分詞)
corpus = ["自然語言處理是人工智能的重要分支","Word2Vec是常用的詞嵌入技術","深度學習在NLP領域有廣泛應用","詞向量可以捕捉詞匯的語義關聯"
]
# 分詞:將每個句子拆分為詞列表
sentences = [simple_preprocess(text, deacc=True) for text in corpus]
# 結果:[['自然語言處理', '是', '人工智能', '的', '重要', '分支'], ...]# 2. 訓練Word2Vec模型
model = Word2Vec(sentences=sentences,    # 分詞后的句子列表vector_size=100,        # 詞向量維度window=5,               # 窗口大小min_count=1,            # 最小詞頻(此處語料小,設為1)workers=4,              # 并行訓練的線程數sg=1,                   # 1=Skip-gram,0=CBOWnegative=5              # 負采樣數量
)# 3. 模型應用
# 獲取詞向量
vec_nlp = model.wv["自然語言處理"]  # 輸出:(100,)的numpy數組# 計算詞相似度
sim = model.wv.similarity("自然語言處理", "NLP")  # 輸出相似度值# 查找最相似的詞
similar_words = model.wv.most_similar("人工智能", topn=3)  # 輸出Top3相似詞# 保存/加載模型
model.save("word2vec.model")
loaded_model = Word2Vec.load("word2vec.model")

總結

Word2Vec 通過 “局部共現 + 低維向量” 的核心思路,首次實現了 “語義可計算”,為現代 NLP 奠定了基礎。盡管其靜態詞向量的缺陷被 ELMo、BERT 等動態模型彌補,但由于其速度快、輕量、易理解的特點,至今仍在中小規模數據集、低資源場景中廣泛應用。理解 Word2Vec 的原理(CBOW/Skip-gram、負采樣),是掌握更復雜預訓練模型(如 BERT)的關鍵前提。

動態詞嵌入技術 后續補充

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

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

相關文章

Netty從0到1系列之Netty邏輯架構【上】

文章目錄一、Netty邏輯架構【上】1.1 網絡通信層1.1.1 BootStrap & ServerBootStrap1. ?核心方法鏈與配置2. ? 架構與流程3. ? 底層實現與原理分析4. ? 實踐經驗與總結1.1.2 Channel1.2 事件調度層1.2.1 事件調度層概述1.2.2 EventLoop【事件循環】1.2.3 EventLoopGrou…

Spring Cloud 高頻面試題詳解(含代碼示例與深度解析)

文章目錄Spring Cloud 高頻面試題詳解(含代碼示例與深度解析)1. 什么是 Spring Cloud?它與 Spring Boot 有什么關系?2. 服務發現:Eureka 和 Nacos 的區別與選型?Eureka 示例與原理Eureka vs Nacos 對比表3.…

Ascend310B重構驅動run包

在Atlas 200I AI加速模塊(Ascend310B)移植過程中如需要將自己編譯的Image、dt.img及內核模塊打包到啟動鏡像包中需要對"Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run"(下面統稱驅動run包)進行重構。下面將介紹如何重構run包。 重構驅動run包需…

Leecode hot100 - 287. 尋找重復數

題目描述 287. 尋找重復數 - 力扣&#xff08;LeetCode&#xff09; 定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 [1, n] 范圍內&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;返…

機器人控制器開發(驅動層——奧比大白相機適配)

文章總覽 編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1&#xff1a; 運行時報錯&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not…

`vcpkg` 微軟開源的 C/C++ 包管理工具的使用和安裝使用spdlog

vcpkg 是 微軟開源的 C/C 包管理工具&#xff0c;類似于 Python 的 pip、Node.js 的 npm、Rust 的 cargo。 它的主要作用是&#xff1a;幫助你快速下載、編譯、安裝和管理 C/C 第三方庫&#xff0c;并自動配置到你的項目&#xff08;比如 Visual Studio、CMake、MSBuild&#x…

Mysql 幻讀詳解

我們來詳細地聊一聊 MySQL InnoDB 中的“幻讀”&#xff08;Phantom Read&#xff09;問題。這是一個在數據庫事務隔離中非常核心且有時令人困惑的概念。 我會從定義、例子、原因以及解決方案幾個方面來徹底講清楚。 1. 什么是幻讀&#xff1f; 官方定義&#xff1a;幻讀指的…

如何生成 GitHub Token(用于 Hexo 部署):保姆級教程+避坑指南

如何生成 GitHub Token&#xff08;用于 Hexo 部署&#xff09;&#xff1a;保姆級教程避坑指南 前置說明&#xff1a;為什么需要 GitHub Token&#xff1f; 在使用 Hexo 部署博客到 GitHub Pages 時&#xff0c;你可能會遇到「密碼驗證失敗」或「需要雙重驗證」的問題——這…

常用加密算法之 AES 簡介及應用

相關系列文章 常用加密算法之 SM4 簡介及應用常用加密算法之 RSA 簡介及應用 引言 AES&#xff08;Advanced Encryption Standard&#xff0c;高級加密標準&#xff09;是一種??廣泛使用的對稱分組加密算法??&#xff0c;它使用相同的密鑰進行加密和解密操作&#xff0c…

Java面試問題記錄(一)

一、Java 核心基礎與進階1、我們知道 Java 中存在 “值傳遞” 和 “引用傳遞” 的說法&#xff0c;你能結合具體例子&#xff0c;說明 Java 到底是值傳遞還是引用傳遞嗎&#xff1f;這背后涉及到 JVM 中哪些內存區域的交互&#xff1f;Java中只有值傳遞&#xff0c;不存在引用傳…

Redis 主從復制、哨兵與 Cluster 集群部署

文章摘要 本文基于 VMware 虛擬機環境&#xff0c;詳細講解 Redis 高可用架構的核心組件與部署流程&#xff0c;涵蓋三大核心模塊&#xff1a;Redis 主從復制&#xff08;實現數據備份與讀寫分離&#xff09;、Redis 哨兵&#xff08;基于主從復制實現故障自動轉移&#xff0c;…

ElementUI 中 validateField 對部分表單字段數組進行校驗時多次回調問題

目錄 方案一&#xff1a;循環調用 Promise.all 合并結果 方案二&#xff1a;直接傳入數組字段 總結 在實際業務中&#xff0c;我們有時只需要對表單的部分字段進行校驗。ElementUI 提供的 validateField 方法支持單個字段&#xff0c;也支持字段數組&#xff0c;但在使用時…

Visual Studio 2026 震撼發布!AI 智能編程時代正式來臨

Visual Studio 2026 震撼發布&#xff01;AI 智能編程時代正式來臨 Visual Studio 2026 Insider圖標 開發者們的開發環境即將迎來前所未有的智能革命&#xff0c;微軟用Visual Studio 2026 重新定義了編碼體驗。 2025年9月10日&#xff0c;微軟正式推出了Visual Studio 2026 In…

Gamma AI:高效制作PPT的智能生成工具

你有沒有過這種崩潰時刻&#xff1f;領導讓你下午交一份產品介紹 PPT&#xff0c;你打開模板網站翻了半小時沒找到合適的&#xff0c;好不容易選了個模板&#xff0c;又得手動調整文字間距、搭配圖片&#xff0c;光是把數據做成圖表就花了一小時&#xff0c;最后趕出來的 PPT 還…

Python副業新玩法:用Flask搭小程序后端,躺賺被動收入的秘密

凌晨1點&#xff0c;林浩合上電腦時&#xff0c;手機彈出一條微信消息——是上周幫一家社區水果店搭的小程序后端&#xff0c;商家發來了當月的服務費到賬提醒。他靠在椅背上笑了&#xff1a;這是這個月第8筆“睡后收入”&#xff0c;加起來剛好覆蓋了下個月的房貸。半年前&…

基于PyQt5和阿里云TTS的語音合成應用開發實戰[附源碼】

項目概述 本文將詳細介紹一個基于PyQt5圖形界面框架和阿里云TTS(Text-to-Speech)服務的語音合成桌面應用程序的開發過程。該應用提供了完整的文字轉語音功能,包括多音色選擇、參數調節、實時試聽、語速調節和音頻下載等特性。 技術棧 前端界面: PyQt5 語音合成: 阿里云TTS服…

基于esp32c3 rust embassy 的墨水屏程序

EPD Reader 基于ESP32-C3的電子墨水屏閱讀器&#xff0c;支持ap 配網、sntp 時間同步、txt閱讀、天氣預報、顯示節假日信息、農歷顯示、自動休眠、web配置等功能。這是在另一個項目 一個rust embassy esp32c3 的練習項目-CSDN博客的基礎上修改的 。 界面比較粗糙&#xff0c;以…

Spring 單例測試及線程安全

創建一個賬戶類 package com.duanhw.demo22.account;import org.springframework.beans.factory.annotation.Value;//Service public class AccountService {Value("1000")private Integer balance;//存款public void deposit(Integer amount){int newbalance balanc…

【vue】組件寬度調整失效后,調整的方法

父容器布局限制 若組件放置在柵格布局&#xff08;如display: grid&#xff09;或彈性容器中&#xff0c;父元素的寬度限制可能導致子組件寬度失效。解決方案是為父容器設置明確的寬度&#xff0c;或通過百分比布局實現自適應16。例如&#xff1a; <div style"width:…

Java 在Word 文檔中插入頁眉頁腳:一份實用的編程指南

在現代企業應用中&#xff0c;Java 開發者經常需要處理各種文檔操作&#xff0c;其中對 Word 文檔的自動化處理尤為常見。無論是生成報告、合同還是其他商業文檔&#xff0c;頁眉頁腳作為文檔結構的重要組成部分&#xff0c;承載著公司 Logo、頁碼、版權信息等關鍵內容。手動添…