Python----NLP自然語言處理(詞向量與詞嵌入)

一、詞向量與詞嵌入

????????將文本語料分詞后,接下來就可以讓計算機學習這些詞,理解這些詞的含義。我們可以直接將文本數據輸入到計算機中讓計算機學習嗎?不可以,計算機只能看懂數字,看不懂文字。所以我們需要將詞語轉成一串數字讓計算機學習。

????????詞向量(Word Vector):指通過某種方式將每個單詞映射為一個固定維度的向量。每個向量的元素通常是浮點數,且這些元素通常不是獨立的,而是通過一定的訓練方式,使得相似的詞向量在向量空間中相對較近。

????????詞嵌入(Word Embedding):生成詞向量的技術或方法。

二、one_hot

????????這12個詞語用one hot的方法表示,我們只需要將對應單詞,在一個擁有所有詞語的詞庫中的對應位置標記1,其他位置標記0即可

????????所以說,one hot的維度是由詞庫的大小決定,詞庫有多少詞,詞向量就有多少維。

one hot的缺點:

  1. 維度災難:有多少個詞語,矩陣就需要擴大多少維,對于龐大的語料庫來說計算量和存儲量都是很大的問題。
  2. 無法度量詞語之間的相似性:我們用余弦相似度來計算任意兩個詞語之間的相似度,結果都會是0。

三、Word2Vec

3.1、Word2Vec

?????????由于one hot的種種問題,2013年科學家提出了Word2Vec的詞向量訓練算法。也就是將詞語表現為一串數字,這些數字它可以取任意實數。這樣一來,有限的維度的詞向量,就可以表示無數的詞語,16維的one hot只可以表示16個詞語,而16維的詞向量可以表示無數個詞。

????????這就解決了one hot的維度災難問題,同時Word2Vec也可以度量詞語之間的相似性。我們以二維的Word2Vec模型舉例:

????????我們可以將二維的Word2Vec向量中的第一個值作為x軸的值,第二個值作為y軸的值,那此時一個詞就是二維空間中的一個點,意思越相近的詞,向量越相似。通過計算兩個向量夾角的余弦,余弦值越接近1,代表兩個向量的夾角越小,兩個向量越相似,代表這兩個詞的含義越相近;反之,余弦值越接近0,代表這兩個詞越無關。而在one hot表示法中,任何兩個詞向量的余弦值都是0。這就解決了one hot無法度量詞語之間的相似性的問題。

????????而使用Word2Vec向量還有這樣一個好處,就是可以用向量的差值表示兩個詞之間的對應關系,比如男人到女人的向量,和國王到王后的向量,這兩個向量非常相似。那么向量(男人-女人)就可以表示性別(男-->女),比如我們再想找到舅舅對應女性,我們只需要找到離(舅舅-(男人-女人))最近的詞向量即可,大概率這個詞是舅媽。所以對于Word2Vec的向量來說,維度越高,越能精確表示詞與詞之間的精確關系。

3.2、用途

應用領域具體用途技術實現典型場景
語義相似度計算量化詞語/句子間的語義相似性計算詞向量的余弦相似度、歐氏距離推薦系統、文檔去重、同義詞挖掘
文本分類將文本表示為詞向量組合(如均值、加權)后分類詞向量 + 分類模型(SVM、神經網絡)情感分析、垃圾郵件檢測、新聞分類
信息檢索與問答系統改進查詢與文檔的語義匹配查詢詞和文檔詞向量相似度加權評分搜索引擎、智能客服
機器翻譯增強源語言和目標語言的詞對齊雙語詞向量映射(如跨語言 Word2Vec)神經機器翻譯(NMT)
命名實體識別(NER)提升實體邊界和類別的識別準確性詞向量作為 BiLSTM-CRF 等模型的輸入特征抽取人名、地名、醫學術語
生成任務為生成模型提供語義化的詞表示詞向量作為 Seq2Seq、Transformer 的輸入文本摘要、對話生成、AI 寫作
拼寫糾錯與自動補全根據上下文推測正確詞或補全句子結合詞向量和語言模型(如 n-gram、BERT)輸入法提示、搜索框補全

3.3、缺點

上下文無關

????????傳統的詞向量是靜態的,一個詞無論出現在什么上下文中,其向量都是固定的。比如bank在“河岸”和“銀行”中有不同的意義,但其詞向量是相同的。

對未登錄詞的處理不足

????????對于未在訓練數據中出現的詞,傳統詞向量模型無法生成向量。

詞間關系單一

????????詞向量捕捉的是線性關系,但無法直接表達復雜的語義關系(如因果關系、否定關系)。

????????窗口的長度有限,它只能考慮周圍的幾個詞語,沒有辦法考慮全局的文本信息,這個我們后面講Word2Vec的訓練就會提到

3.4、訓練流程

????????我們通過神經網絡模型可以對詞向量進行訓練,首先隨機初始化語料庫中所有詞語的向量值,并且隨機一個權重參數矩陣。比如說我們想訓練英文的詞向量,就需要準備所有的英文單詞,隨機初始化每一個單詞的詞向量。

????????其次,設定好輸入值和輸出值,設置輸入和輸出值的方法有很多,后面我們會提到,基本都是輸入值的是文本中的某些詞,輸出值的是輸入值文本周圍的某些詞。例如學習這么一句話:

????????Word2Vec 的訓練過程本質上是通過神經網絡學習詞語之間的分布式表示。其核心思想基于一個重要的語言學假設:在文本中相鄰出現的詞語往往具有語義上的關聯性。具體來說,當我們在訓練時輸入一個中心詞(如"NLP"),模型會嘗試預測其周圍可能出現的上下文詞(如"任務"、"處理"、"語言"等)。這個預測過程通過神經網絡架構實現:輸入層接收詞語的one-hot編碼,經過隱藏層的線性變換后得到對應的詞向量表示,再通過輸出層的Softmax激活函數計算上下文詞的概率分布。

????????在訓練過程中,模型會不斷比較預測結果與真實上下文之間的差異,通過損失函數(通常是負對數似然)量化這種差異,并利用反向傳播算法同時更新兩個關鍵部分:一是隱藏層的權重矩陣(即詞向量查找表本身),二是輸出層的權重參數。這種雙重更新機制是Word2Vec的一個重要特性,它使得詞向量在訓練過程中能夠動態調整。隨著訓練的進行,語義相關或功能相似的詞語(如"任務"和"NLP")在向量空間中的距離會逐漸靠近,表現為它們的詞向量夾角減小、余弦相似度增高。

????????值得注意的是,這種學習過程完全是無監督的,僅依賴于文本中詞語的自然分布規律。最終訓練得到的詞向量能夠捕捉豐富的語義關系,不僅能使相關詞語在向量空間中聚集,還能保持諸如"國王-男性+女性≈女王"這樣的線性類比關系。這種特性使得Word2Vec成為許多NLP任務的基礎工具,從簡單的語義相似度計算到復雜的文本分類和生成任務都能發揮重要作用。詞向量的質量很大程度上取決于訓練語料的規模和質量,以及模型參數的合理設置,如向量維度、上下文窗口大小等。

3.5、訓練細節

????????假如每次訓練讀取三個單詞,前兩個單詞是輸入,第3個單詞是輸出,這3個單詞要怎么選擇呢?我們通過窗體滑動的方式進行選擇,第一次選擇第123個單詞,讓這3個單詞產生關聯;第二次選擇第234個單詞,讓這3個單詞產生關聯;第三詞選擇第345個單詞,讓這3個單詞產生關聯...之后每次訓練向后滑動一個詞,直到學習完所有資料,這就是窗口滑動。

3.5.1、CBOW(連續詞袋模型)

????????通過上下文詞預測中心詞的模型。即輸入是上下文詞,輸出是中心詞,目標是讓其上下文詞的向量能夠準確中心詞。

3.5.2、Skip-gram(跳字模型)

????????通過中心詞預測上下文詞的模型。輸入是中心詞,輸出是上下文詞,目標是讓目標詞的向量能夠準確預測其上下文。Skip-gram計算量要大于CBOW,但對稀有詞的訓練效果要好于CBOW。

CBOW通過上下文預測中心詞,計算效率較高,適合常見詞的訓練

Skip-gram通過中心詞預測上下文,計算復雜度較高,但對稀有詞效果更好。

四、負采樣模型

????????負采樣(Negative Sampling)是Word2Vec模型中用于優化訓練效率的關鍵技術,它通過改進傳統Softmax的計算方式,使模型能夠高效地學習詞向量表示。該技術的核心思想是將復雜的多分類問題轉化為一系列二分類問題,從而大幅降低計算復雜度。

????????在具體實現上,負采樣采用了一種對比學習的策略。對于每個訓練樣本(中心詞和真實上下文詞組成的正樣本),模型會隨機采樣若干個非上下文詞作為負樣本。這種設計使得模型只需要區分正樣本和負樣本,而無需計算整個詞匯表的概率分布。例如,在處理"NLP-任務"這個正樣本時,模型可能會采樣"足球"、"電影"等無關詞匯作為負樣本,通過Sigmoid函數計算每個樣本的得分并優化損失函數。

????????負采樣的數學表達式采用了邏輯回歸的形式,其目標函數由兩部分組成:最大化正樣本的相似度得分,同時最小化負樣本的得分。這種設計不僅顯著提高了訓練速度(計算量從O(V)降低到O(k),其中V是詞匯表大小,k是負樣本數量),還能保

持較好的詞向量質量。實驗表明,當負樣本數量k=5-15時,模型效果與完整Softmax相當。

????????在實際應用中,負采樣通常采用頻率加權的采樣策略,即高頻詞被選為負樣本的概率更高,但會通過次采樣(subsampling)技術來平衡高頻詞的影響。這種技術上的改進使得Word2Vec能夠有效處理大規模語料庫,同時捕捉到詞語之間豐富的語義關系。負采樣的成功應用不僅限于Word2Vec,其思想也被廣泛應用于推薦系統、圖嵌入等其他表示學習領域。

?五、訓練模型效果

安裝工具包

pip install jieba=0.42.1
pip install gensim==4.3.1

代碼

import jieba  # 中文分詞庫
import gensim  # 自然語言處理庫
import re  # 正則表達式庫
from gensim.models import Word2Vec  # Word2Vec詞向量模型# 打開并讀取《三國演義》白話文文本文件
f = open('三國演義白話文.txt', 'r', encoding='utf-8')# 初始化一個空列表,用于存儲處理后的分詞結果
lines = []# 逐行處理文本
for line in f:# 使用jieba進行分詞temp = jieba.lcut(line)words = []  # 臨時存儲處理后的詞語# 對每個分詞結果進行清洗處理for word in temp:# 使用正則表達式去除標點符號和特殊字符i = re.sub("[\s+\.\!\/_,$%^*(+\"\'””《》]+|[+——!,。?、~@#¥%……&*():;‘]+", "", word)# 只保留非空詞語if len(i) > 0:words.append(i)# 只添加包含有效詞語的行if len(words) > 0:lines.append(words)# 使用處理后的語料訓練Word2Vec模型
# 參數說明:
# lines: 分詞后的語料庫(列表的列表)
# vector_size: 詞向量維度(20維)
# window: 上下文窗口大小(取中心詞前后各2個詞)
# min_count: 最低詞頻(出現次數少于3次的詞將被忽略)
# epochs: 訓練輪數(整個語料庫訓練10次)
# sg: 訓練算法(1表示使用skip-gram,0表示CBOW)
model = Word2Vec(lines, vector_size=20, window=2, min_count=3, epochs=10, sg=1)# 保存訓練好的模型(可選)
# model.save("word2vec.model")# 加載已保存的模型(可選)
# model = Word2Vec.load("word2vec.model")# 獲取"孔明"的詞向量并打印
print("孔明的詞向量:")
print(model.wv.get_vector('孔明'))# 查找與"孔明"最相似的20個詞
print("\n與孔明最相似的詞語:")
print(model.wv.most_similar('孔明', topn=20))# 獲取"荊州"的詞向量并打印
print("\n荊州的詞向量:")
print(model.wv.get_vector('荊州'))# 查找與"荊州"最相似的20個詞
print("\n與荊州最相似的詞語:")
print(model.wv.most_similar('荊州', topn=20))# 詞語類比:劉備 - 曹操 + 孔明 ≈ ?
# 相當于"劉備"加上"孔明"減去"曹操"的結果
print("\n詞語類比(劉備 - 曹操 + 孔明):")
words = model.wv.most_similar(positive=['劉備', '孔明'], negative=['曹操'], topn=10)
print(words)# 詞語類比:曹操 - 魏 + 蜀 ≈ ?
# 相當于"曹操"加上"蜀"減去"魏"的結果
print("\n詞語類比(曹操 - 魏 + 蜀):")
words = model.wv.most_similar(positive=['曹操', '蜀'], negative=['魏'], topn=10)
print(words)

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

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

相關文章

八、DMSP/OLS、NPP/VIIRS等夜間燈光數據能源碳排放空間化——碳排放空間分級、空間自相關

一、前言 前面已經將反演后能源碳排放提取、增長率、Slope趨勢法分析做了介紹,本節就是給大家介紹如何制作碳排放空間分級和空間自相關的一些具體操作步驟,其實網上也有比較多的各類學習資源,但是質量就層次不齊。這里就給大家詳細從頭到尾說明白解釋清楚如何獲取下圖這些成…

【電腦】鼠標的基礎知識

下面是一些關于鼠標的詳細知識:鼠標的基本結構外殼:通常由塑料或金屬制成,提供手握的地方。滾輪:位于中央,用于滾動頁面。有些高端型號的滾輪可以自定義功能。按鍵:最常見的是左鍵、右鍵和中鍵(…

A33-vstar筆記及資料分享:搭建交叉編譯環境

前言 本篇主要是介紹博主在構建A33-vstar開發板鏡像時的步驟,也踩了一些坑,才整理出來,如果有錯誤,還請指正。 A33-vstar開發板的資料: 通過網盤分享的文件:A33-Vstar開發板資料合集 鏈接: https://pan.bai…

基于51單片機智能家居監控系統設計

摘 要 智能家居是以住宅為平臺,利用綜合布線技術、網絡通信技術、安全防范技術、自動控制技術、音視頻技術將家居生活有關的設施集成,構建高效的住宅設施與家庭日程事務的管理系統,提升家居安全性、便利性、舒適性、藝術性,并實現…

在 OpenSUSE Tumbleweed 和 Leap 上安裝 VirtualBox

OpenSUSE 是一款特別適合工作站、服務器及虛擬化環境(如 VirtualBox 和 VMware)的 Linux 發行版。雖然知名度不及 Ubuntu,但實際使用中我發現它比 CentOS、RedHat 甚至 Ubuntu 更易理解、安裝和使用。當然,Ubuntu 龐大的社區支持確實使其更受歡迎。 該系統預裝了 LibreOff…

Ansible AWX 自動化運維

Ansible & AWX 自動化運維一、概述1. Ansible 簡介定義Ansible 是一款由 Michael DeHaan 創建的開源自動化工具,它基于 Python 語言開發,旨在簡化復雜的 IT 任務,如配置管理、應用部署、任務編排和云資源管理等。其核心設計理念是“無代理…

如何解決服務器頻繁重啟的問題?

高防CDN和香港高防服務器是兩種常見的網絡安全解決方案,用于應對DDoS攻擊和其他惡意流量。但它們的工作原理、應用場景和特點有所不同。以下是詳細的對比分析:1. 什么是高防CDN和香港高防服務器?1.1 高防CDN高防CDN (Content Delivery Networ…

docker安裝、啟動jenkins服務,創建接口自動化定時任務(mac系統)

前提:安裝Docker。 1、Docker拉取鏡像、啟動服務 (可參考Jenkins官網教程:安裝Jenkins) 1. 從Docker Hub下載最新的Jenkins LTS(長期支持)鏡像: docker pull jenkins/jenkins:lts2. 使用Doc…

板凳-------Mysql cookbook學習 (十一--------12)

第16章:使用存儲例程、觸發器和事件 16.0 引言 mysql> -- 首先設置分隔符(避免分號被解釋為語句結束) mysql> DELIMITER // mysql> mysql> -- 創建第一個存儲過程 mysql> CREATE PROCEDURE get_time()-> BEGIN-> SE…

linux端口監聽命令

端口監聽命令: netstat -nlp|grep 86886 netstat -nlp|grep 8686 netstat -nlp|grep 8686 netstat -nl|grep 8686 netstat -n|grep 8686各命令的含義與區別: 1. netstat -nlp | grep 86886 參數…

APP端定位實現(uniapp Vue3)(騰訊地圖)

一.申請騰訊地圖開發者 官網騰訊位置服務 - 立足生態,連接未來 注冊的話可以選擇個人和企業,推薦先注冊個人,企業的話如果后期有需要到時候個人可以升級為企業 申請完成之后點擊控制臺進入當前頁面后點擊應用管理 —— 我的應用 點擊創建應用 應用名稱隨便填(自己知…

Linux之Zabbix分布式監控篇(二)

一、前置回顧zabbix作為一個分布式監控工具,能幫助我們7*24*365監控硬件使用情況(cpu,內存),以及網絡流量波動,從而能讓運維能及時排查錯誤zabbix由zabbix-server(10051)、zabbix-agent(10050)、zabbix-database、zabb…

leetcode 3202. 找出有效子序列的最大長度 II 中等

給你一個整數數組 nums 和一個 正 整數 k 。nums 的一個 子序列 sub 的長度為 x ,如果其滿足以下條件,則稱其為 有效子序列 :(sub[0] sub[1]) % k (sub[1] sub[2]) % k ... (sub[x - 2] sub[x - 1]) % k返回 nums 的 最長有效子序列 的…

Mysql測試題

1 Which Linux MySQL server installation directories are the base directories? (Choose two) /usr/sbin /var/lib/mysql /var/log /usr/bin /etc 2 What does the RPM installation process for MySQL do? (Choose two) It creates the default my.cnf file It se…

自動化測試工具 Selenium 入門指南

Selenium 是一款強大的自動化測試工具,可用于模擬用戶在瀏覽器中的各種操作。它支持多種瀏覽器(如 Chrome、Firefox、Edge 等)和多種編程語言(如 Python、Java、C# 等),廣泛應用于 Web 應用程序的自動化測試…

Hystrix與Resilience4j在微服務熔斷降級中的應用對比與實戰

Hystrix與Resilience4j在微服務熔斷降級中的應用對比與實戰 1. 問題背景介紹 在微服務架構中,服務之間的依賴使得鏈路調用更加復雜。一旦某個下游服務發生故障或響應延遲,可能導致整個調用鏈阻塞甚至雪崩,影響系統可用性。熔斷(Ci…

PostgreSQL數據庫集群如何進行自動化性能監測?

前言:在這個數據爆炸的時代,PostgreSQL數據庫集群就像是我們的"數據寶庫"。但是,再好的寶庫也需要有專業的"保安"來守護。今天我們就來聊聊如何給PostgreSQL集群配備一套智能的"保安系統"——自動化性能監測。…

OneCode體系架構深度剖析:設計哲學與AI增強之道

引言 在企業級應用開發領域,架構設計決定了系統的擴展性、可維護性與演進能力。OneCode作為一站式開發平臺,其架構設計蘊含著對復雜業務場景的深刻理解與技術選型的前瞻性思考。本文將從六個維度系統剖析OneCode的架構設計理念,揭示其模塊劃分…

AWS中國區資源成本優化全面指南:從理論到實踐

引言:為什么AWS中國區成本優化如此重要? 在數字化轉型的浪潮中,越來越多的中國企業選擇AWS中國區作為其云計算服務提供商。然而,隨著業務規模的擴大,云資源成本往往成為企業關注的焦點。有效的成本優化不僅能夠直接降低IT支出,還能提高資源利用效率,為企業創造更大的商…

Redis中什么是看門狗機制

在 Redis 中,“看門狗機制”(Watchdog Mechanism)不是 Redis 的核心機制之一,但它在一些場景中起到了重要作用,尤其是在使用 Redlock 分布式鎖實現 或在 Redis Enterprise 等高級用法中。一、看門狗機制的通用含義看門…