【深度學習:進階篇】--4.2.詞嵌入和NLP

在RNN中詞使用one_hot表示的問題

  • 假設有10000個詞
    • 每個詞的向量長度都為10000,整體大小太大
  • 沒能表示出詞與詞之間的關系
    • 例如Apple與Orange會更近一些,Man與Woman會近一些,取任意兩個向量計算內積都為0

目錄

1.詞嵌入

1.1.特點

1.3.word2vec介紹

1.3.Word2Vec案例

1.3.1.訓練語料

1.3.2.步驟

1.3.3.代碼

?2.測試代碼


1.詞嵌入

定義:指把一個維數為所有詞的數量的高維空間嵌入到一個維數低得多的連續向量空間中,每個單詞或詞組被映射為實數域上的向量。

注:這個維數通常不定,不同實現算法指定維度都不一樣,通常在30~500之間。

如下圖所示:

1.1.特點

  • 能夠體現出詞與詞之間的關系
    • 比如說我們用Man - Woman,或者Apple - Orange,都能得到一個向量
  • 能夠得到相似詞,例如Man - Woman = King - ?
    • ? = Queen

1.2.word2vec介紹

Bengio等人在一系列論文中使用了神經概率語言模型使機器“習得詞語的分布式表示。

2013年,谷歌托馬斯·米科洛維(Tomas Mikolov)領導的團隊發明了一套工具word2vec來進行詞嵌入。

Word2Vec 是一種廣泛使用的??詞嵌入(Word Embedding)??技術,由 Google 團隊(Tomas Mikolov 等)于 2013 年提出。它通過神經網絡模型將單詞映射到??低維稠密向量空間??,使得語義相似的詞在向量空間中距離相近。Word2Vec 是 NLP 領域的基礎技術之一,廣泛應用于文本分類、機器翻譯、推薦系統等任務。

Word2Vec 的核心假設是:??“具有相似上下文的單詞,其語義也相似”??。它通過訓練神經網絡,使得模型能夠從大量文本中學習單詞的分布式表示(Distributed Representation)。

1.??主要特點??

  • ??稠密向量表示??:每個單詞用一個固定長度的低維向量(如 100~300 維)表示,相比傳統的 one-hot 編碼更高效。
  • ??語義相似性??:語義相近的詞(如 "king" 和 "queen")在向量空間中距離較近。
  • ??計算高效??:采用??負采樣(Negative Sampling)??或??層次 Softmax(Hierarchical Softmax)??優化訓練速度。

2. Word2Vec 的兩種模型??

Word2Vec 包含兩種不同的訓練方式:

??(1) CBOW(Continuous Bag of Words)??

  • ??目標??:根據上下文單詞預測當前單詞。
  • ??適用場景??:適合小型數據集或高頻詞。
  • ??示例??:
    • 輸入:["the", "cat", "on", "the"](上下文窗口=4)
    • 輸出:預測?"mat"(中心詞)

??(2) Skip-Gram??

  • ??目標??:根據當前單詞預測上下文單詞。
  • ??適用場景??:適合大型數據集或低頻詞,效果通常比 CBOW 更好。
  • ??示例??:
    • 輸入:"mat"(中心詞)
    • 輸出:預測?["the", "cat", "on", "the"](上下文窗口=4)
  • skip-gram

算法學習實現:https://www.tensorflow.org/tutorials/representation/word2vec

下載gensim庫

pip install gensim

1.3.Word2Vec案例

1.3.1.訓練語料

由于語料比較大,就提供了一個下載地址:搜狗搜索引擎 - 上網從搜狗開始

  • 搜狗新聞中文語料(2.7G)
  • 做中文分詞處理之后的結果

1.3.2.步驟

  • 1、訓練模型

  • 2、測試模型結果

1.3.3.代碼

  • 訓練模型API
    • from gensim import Word2Vec
    • Word2Vec(LineSentence(inp), size=400, window=5, min_count=5)
      • LineSentence(inp):把word2vec訓練模型的磁盤存儲文件
      • 轉換成所需要的格式,如:[[“sentence1”],[”sentence1”]]
      • size:是每個詞的向量維度
      • window:是詞向量訓練時的上下文掃描窗口大小,窗口為5就是考慮前5個詞和后5個詞
      • min-count:設置最低頻率,默認是5,如果一個詞語在文檔中出現的次數小于5,那么就會丟棄
      • 方法:
        • inp:分詞后的文本
        • save(outp1):保存模型

這里需要傳入訓練好的分詞結果:corpus_seg.txt

訓練的代碼如下

import sys
import multiprocessingfrom gensim.models import Word2Vec
from gensim.models.word2vec import LineSentenceif __name__ == '__main__':if len(sys.argv) < 3:sys.exit(1)# inp表示語料庫(分詞),outp:模型inp, outp = sys.argv[1:3]model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())model.save(outp)

運行命令

python trainword2vec.py ./corpus_seg.txt ./model/*

指定好分詞的文件以及,保存模型的文件

  • 加載模型測試代碼
    • model = gensim.models.Word2Vec.load("*.model")
      • model.most_similar('警察')
      • model.similarity('男人','女人')
      • most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
improt gensim
gensim.models.Word2Vec.load("./model/corpus.model")model.most_similar("警察")Out:
[('警員', 0.6961891651153564),('保安人員', 0.6414757370948792),('警官', 0.6149201989173889),('消防員', 0.6082159876823425),('憲兵', 0.6013336181640625),('保安', 0.5982533693313599),('武警戰士', 0.5962344408035278),('公安人員', 0.5880240201950073),('民警', 0.5878666639328003),('刑警', 0.5800305604934692)]model.similarity('男人','女人')
Out: 0.8909852730435042model.most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
Out: [('妻子', 0.7788498997688293)]

?2.測試代碼

??步驟????功能描述????關鍵點/注意事項??
??1. 導入庫??加載必要的Python庫gensim?用于Word2Vec,nltk?用于分詞,os?用于路徑操作。
??2. 檢查NLTK數據??確保punkt分詞數據存在,若缺失則自動下載- 使用try-except避免中斷。
-?quiet=True隱藏下載日志。
??3. 定義示例數據??提供待訓練的文本句子實際應用中需替換為大規模文本(如從文件讀取)。
??4. 分詞處理??將句子拆分為單詞列表- 優先用word_tokenize處理標點。
- 失敗時回退到split()(效果較差)。
??5. 訓練Word2Vec??根據分詞結果訓練詞向量模型-?vector_size=100: 詞向量維度。
-?sg=1: 使用Skip-Gram算法(適合小數據)。
??6. 保存模型??將模型保存到磁盤后續可通過Word2Vec.load("word2vec.model")復用模型。
??7. 測試模型??驗證詞向量效果(查詢詞向量和相似詞)
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import nltk
import os# 確保下載必要的NLTK數據
try:nltk.data.find('tokenizers/punkt')print("NLTK punkt data already downloaded")
except LookupError:print("Downloading NLTK punkt data...")nltk.download('punkt', quiet=True)# 某些環境可能需要額外下載punkt_tabtry:nltk.download('punkt_tab', quiet=True)except:print("punkt_tab not available, using only punkt")# 示例文本數據
sentences = ["I love natural language processing.","Word2Vec is a popular embedding technique.","Deep learning is changing the world."
]# 分詞(帶錯誤回退機制)
try:tokenized_sentences = [word_tokenize(sent.lower()) for sent in sentences]print("Tokenizer succeeded!")
except LookupError as e:print(f"Tokenizer failed: {e}")print("Falling back to simple whitespace tokenizer...")tokenized_sentences = [sent.lower().split() for sent in sentences]# 訓練 Word2Vec 模型
model = Word2Vec(sentences=tokenized_sentences,vector_size=100,    # 向量維度window=5,          # 上下文窗口大小min_count=1,       # 忽略低頻詞sg=1,              # 1=Skip-Gram, 0=CBOWnegative=5,        # 負采樣數量epochs=10          # 訓練輪次
)# 保存模型
model.save("word2vec.model")
print("Model saved successfully!")# 測試詞向量
try:print("Example word vector for 'learning':", model.wv['learning'])print("Most similar to 'processing':", model.wv.most_similar('processing'))
except KeyError as e:print(f"Word not in vocabulary: {e}")
# 加載模型
model = Word2Vec.load("word2vec.model")# 獲取單詞向量
vector = model.wv["word2vec"]  # 獲取 "word2vec" 的向量# 計算相似詞
similar_words = model.wv.most_similar("nlp", topn=3)
print(similar_words)  # 輸出:[('natural', 0.92), ('language', 0.88), ('processing', 0.85)]

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

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

相關文章

WebRTC 的 ICE candidate 協商

文章目錄 前言WebRTC 的 ICE candidate 協商1. 什么是 ICE candidate&#xff1f;2. ICE 協商的流程3.前端使用 ICE candidate 協商代碼示例1&#xff09;收集 candidate 并發送2&#xff09;WebSocket 接收 candidate 并添加 4. ICE candidate 的類型5. ICE 協商常見問題6. 關…

卡爾曼濾波介紹

卡爾曼濾波介紹&#x1f4d6; **卡爾曼濾波原理簡介**&#x1f511; **核心思想**&#x1f4e6; **卡爾曼濾波的組成**&#x1f50d; **代碼分析&#xff08;kalman_filter.py&#xff09;**&#x1f3d7;? 1. 狀態空間定義&#x1f504; 2. 初始化模型矩陣&#x1f680; 3. 核…

遞歸與循環

文章目錄遞歸TestRecursiveListRemoveNodeTestRecursiveListRemoveNode2循環TestWhileLoopListRemoveNodeTestWhileLoopListRemoveNode2遞歸 關鍵理解這幾點&#xff1a; 1、求解基本問題 2、將原問題拆分為小問題&#xff0c;直至基本問題&#xff08;難點&#xff09; 3、借…

3D魔方游戲

# 3D魔方游戲 這是一個基于Three.js的3D魔方游戲&#xff0c;支持2到6階魔方的模擬操作。 ## 功能特點 - 支持2到6階魔方 - 真實的3D渲染效果 - 鼠標操作控制 - 隨機打亂功能 - 提示功能 - 重置功能 ### 安裝依賴 bash npm install ### 啟動游戲 bash npm start 然…

下載安裝 com0com

下載 在 sourceforge 網站下載安裝器&#xff1a;下載鏈接 安裝完成后可以在設備管理器中看到默認創建的一對虛擬串口 使用串口調試助手收發 使用串口調試助手分別打開。如下圖所示&#xff0c;在端口選擇的下拉列表中可以看到剛才在設備管理器中看到的 COM3 和 COM5 分…

C++ 應用軟件開發從入門到實戰詳解

目錄 1、引言 2、IDE 開發環境介紹 2.1、Visual Studio 2.2、Qt Creator 3、 C語言特性 3.1、熟悉泛型編程 3.2、了解C/C異常處理 3.3、熟練使用STL容器 3.4、熟悉C11新特性 4、Windows 平臺的編程技術與調試技能 4.1、需要掌握的若干編程技術和基礎知識 4.2、需…

Python爬蟲實戰:研究slug相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網技術的快速發展,網絡上的信息量呈爆炸式增長。如何從海量的非結構化數據中提取有價值的信息,成為當前數據科學領域的重要研究方向。網絡爬蟲作為一種自動化數據采集工具,可以高效地獲取網頁內容,為數據分析提供豐富的數據來源。 Sl…

人工智能-基礎篇-18-什么是RAG(檢索增強生成:知識庫+向量化技術+大語言模型LLM整合的技術框架)

RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;是一種結合外部知識檢索與大語言模型&#xff08;LLM&#xff09;生成能力的技術框架&#xff0c;旨在提升生成式AI在問答、內容創作等任務中的準確性、實時性和領域適應性。 1、核心概念 …

CppCon 2018 學習:What do you mean “thread-safe“

什么是“線程安全”&#xff1f; “線程安全”指的是一個函數、方法或代碼塊能夠在多個線程同時執行時&#xff0c;不會出現意外的交互或破壞共享數據&#xff0c;能夠安全地運行。 POSIX 對線程安全的定義很清楚&#xff1a; “一個線程安全的函數可以在多個線程中被安全地并…

熱方程初邊值問題解法

已知公式&#xff1a; u ( x , t ) ∫ ? ∞ ∞ G ( x , y , t ) g ( y ) d y . u(x,t)\int_{-\infty}^{\infty}G(x,y,t)g(y)dy. u(x,t)∫?∞∞?G(x,y,t)g(y)dy. &#xff08;1&#xff09; 其中 G ( x , y , t ) 1 2 k π t e ? ( x ? y ) 2 4 k t G(x,y,t)\frac{1}{2…

怎樣理解:source ~/.bash_profile

場景復現 $ source ~/.bash_profileAnalysis 分析 一句話概括 source ~/.bash_profile “在 當前 終端會話里&#xff0c;立刻執行并加載 ~/.bash_profile 中的所有命令&#xff0c;讓其中定義的環境變量、函數、alias 等即時生效&#xff0c;而無需重新登錄或開新 Shell。…

搜索問答技術概述:基于知識圖譜與MRC的創新應用

目錄 一、問答系統應用分析 二、搜索問答技術與系統 &#xff08;一&#xff09;需求和信息分析 問答需求類型 多樣的數據源 文本組織形態 &#xff08;二&#xff09;主要問答技術介紹 發展和成熟度分析 重點問答技術基礎&#xff1a;KBQA和DeepQA KBQA&#xff08;…

TCP數據的發送和接收

本篇文章結合實驗對 TCP 數據傳輸中的重傳機制、滑動窗口以及擁塞控制做簡要的分析學習。 重傳 實驗環境 這里使用兩臺騰訊云服務器&#xff1a;vm-1&#xff08;172.19.0.3&#xff09;和vm-2&#xff08;172.19.0.6&#xff09;。 超時重傳 首先 vm-1 作為服務端啟動 nc…

python 保存二維數組到本地

Python中保存二維數組有多種方法&#xff0c;以下是常用的幾種方式&#xff1a;1. 使用NumPy&#xff08;推薦&#xff09;import numpy as np# 創建二維數組 arr np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 保存為.npy文件&#xff08;NumPy專用格式&#xff09; np.save…

LIN總線通訊中從節點波特率同步原理

波特率同步原理&#xff1a;從節點如何通過0x55校準時鐘&#xff1f; 一、同步場的核心作用&#xff1a;統一“時間標尺” 在LIN總線中&#xff0c;主節點與從節點各自擁有獨立的時鐘源&#xff08;如MCU內部RC振蕩器&#xff09;&#xff0c;但由于制造工藝差異&#xff0c;…

【Unity筆記02】訂閱事件-自動開門

流程 當玩家移動到觸發區域的時候&#xff0c;門自動打開 事件系統 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class EventSystem : MonoBehaviour {public static EventSystem Instance { get; private set; }…

控制臺字符動畫

旋轉的立方體 #include <cstdint> #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <ctime> #include <thread> using namespace std;float angleX .0f; float a…

基于 PyTorch 的貓狗圖像分類實戰

基于 PyTorch 的貓狗圖像分類實戰 項目背景簡介 深度學習框架 PyTorch 因其動態計算圖和靈活易用性&#xff0c;被廣泛應用于圖像分類等計算機視覺任務。在入門計算機視覺領域時&#xff0c;常常以手寫數字識別&#xff08;MNIST&#xff09;作為 “Hello World”&#xff0c…

SwiftUI 7(iOS 26 / iPadOS 26)中玻璃化標簽頁的全新玩法

&#x1f378; Liquid Glass 登場&#xff1a;界面設計煥然一新 WWDC25 可謂驚喜連連&#xff0c;其中最引人矚目的變革之一&#xff0c;莫過于蘋果推出的全新跨平臺設計語言 —— Liquid Glass&#xff08;液態玻璃&#xff09;。這一設計風格涵蓋了從按鈕到導航欄&#xff0…

PDF處理控件Spire.PDF教程:在Java中讀取PDF,提取文本、圖片和表格

在數據驅動的現代開發中&#xff0c;高效處理 PDF 文檔已成為 Java 開發者不可或缺的核心能力。無論是處理各類發票掃描件、業務分析報告&#xff0c;還是包含豐富圖表的技術文檔&#xff0c;掌握 Java 版的 PDF 解析技術都將大幅提升數據處理效率&#xff0c;充分釋放文檔中的…