機器學習自然語言處理

在自然語言處理(NLP)領域,詞向量(Word Embedding)是將人類語言轉化為計算機可理解形式的關鍵技術。它通過數學空間中的向量表示,捕捉詞語的語義和語法信息,有效解決了傳統離散表示的 “維數災難” 和 “語義鴻溝” 問題。接下來,我們將深入探討詞向量的原理,并結合代碼實踐,直觀感受其強大之處。?

一、詞向量的本質與核心作用?

詞向量是將語言符號(詞語)轉化為連續稠密向量的技術,核心思想是通過向量表示來反映詞語間的語義關聯。相似語義的詞語在向量空間中距離相近,例如 “國王” 與 “女王”、“蘋果” 與 “香蕉” 。在實際應用中,詞向量為 NLP 任務(如文本分類、機器翻譯、命名實體識別等)提供低維、稠密的特征輸入,也是預訓練模型(如 BERT、GPT)的底層技術支撐。?

二、詞向量的發展歷程與經典模型?

1. 早期離散表示(One-Hot Encoding)?

One-Hot Encoding 是早期常用的詞語表示方法,每個詞語用唯一的高維稀疏向量表示。例如,若詞典大小為 10 萬,那么每個詞語的向量維度就是 10 萬。這種方式存在明顯缺陷,無法體現詞語間的語義關聯,且維度過高導致計算效率低下。在 Python 中,我們可以使用scikit-learn庫簡單實現 One-Hot Encoding:?

?

TypeScript

取消自動換行復制

from sklearn.preprocessing import OneHotEncoder?

import numpy as np?

?

words = np.array([["apple"], ["banana"], ["cherry"]])?

encoder = OneHotEncoder()?

one_hot = encoder.fit_transform(words).toarray()?

print(one_hot)?

?

2. 分布式表示(Distributed Representation)的興起?

分布式表示通過上下文預測建模,將詞語映射到低維連續空間,其中經典的 Word2Vec 模型由 Google 在 2013 年提出,它包含 CBOW(連續詞袋模型)和 Skip-gram 兩種訓練模式。CBOW 通過詞語的上下文預測其本身,Skip-gram 則通過詞語預測其上下文。下面使用gensim庫來訓練一個簡單的 Word2Vec 模型:?

?

TypeScript

取消自動換行復制

from gensim.models import Word2Vec?

sentences = [["apple", "banana", "cherry"], ["banana", "date", "elderberry"]]?

model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)?

# 查看某個詞的詞向量?

print(model.wv["apple"])?

# 找出最相似的詞?

print(model.wv.most_similar("apple"))?

?

另一個經典模型 GloVe(Global Vectors for Word Representation)結合全局詞共現統計與局部上下文窗口,通過最小化加權最小二乘損失訓練向量。雖然gensim庫也提供了 GloVe 的實現,但更多時候我們會使用預訓練好的 GloVe 向量。?

3. 上下文敏感的動態詞向量?

早期詞向量是靜態的,無法處理多義詞。動態詞向量則能根據上下文生成不同表示,其中 ELMo(Embeddings from Language Models)通過雙向 LSTM 預訓練語言模型,生成包含上下文信息的詞向量。而 BERT(Bidirectional Encoder Representations from Transformers)使用 Transformer 編碼器,通過掩碼語言模型(MLM)和下一句預測(NSP)預訓練,將動態詞向量技術推向新高度。下面使用transformers庫獲取 BERT 的詞向量:?

?

TypeScript

取消自動換行復制

from transformers import BertTokenizer, BertModel?

import torch?

?

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')?

model = BertModel.from_pretrained('bert-base-uncased')?

text = "I went to the bank to deposit money"?

inputs = tokenizer(text, return_tensors="pt")?

with torch.no_grad():?

outputs = model(**inputs)?

last_hidden_states = outputs.last_hidden_state?

print(last_hidden_states.shape) # 輸出 [batch_size, sequence_length, hidden_size]?

?

三、詞向量的關鍵技術特性?

1. 向量空間的幾何意義?

在詞向量空間中,通常使用余弦相似度來衡量詞語相關性,公式為:?

sim(u,v)=∥u∥∥v∥u?v?

?

?

在 Python 中,可使用numpy計算余弦相似度:?

?

TypeScript

取消自動換行復制

import numpy as np?

?

vec1 = np.array([1, 2, 3])?

vec2 = np.array([4, 5, 6])?

cos_sim = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))?

print(cos_sim)?

?

此外,向量運算還能反映語義關系,如 “國王” - “男人” + “女人” ≈ “女王”。?

2. 維度選擇?

詞向量常見維度有 50、100、300 等,需要平衡計算效率與表達能力。低維向量適合輕量級任務,高維向量可捕捉更復雜語義。在訓練 Word2Vec 模型時,可通過vector_size參數指定維度。?

3. 評估指標?

詞向量的評估分為內在評估和外在評估。內在評估包括類比推理(如 “中國 - 北京” 對應 “日本 - 東京”)、詞語相似度排名;外在評估則關注在具體 NLP 任務(如情感分析)中的性能表現。?

四、詞向量的應用場景?

1. 基礎 NLP 任務?

在文本分類任務中,可將句子中詞語的向量平均或拼接作為特征輸入分類器。以下是一個簡單的文本分類示例,使用 Word2Vec 詞向量和邏輯回歸:?

?

TypeScript

取消自動換行復制

from sklearn.linear_model import LogisticRegression?

from sklearn.metrics import accuracy_score?

import numpy as np?

?

# 假設已經有訓練好的詞向量和標簽?

train_vectors = np.array([[1, 2, 3], [4, 5, 6]]) # 詞向量?

train_labels = np.array([0, 1]) # 標簽?

test_vectors = np.array([[7, 8, 9]])?

test_labels = np.array([1])?

?

clf = LogisticRegression()?

clf.fit(train_vectors, train_labels)?

predicted = clf.predict(test_vectors)?

print(accuracy_score(test_labels, predicted))?

?

2. 生成任務?

在機器翻譯中,源語言詞向量經編碼器生成上下文向量,解碼器生成目標語言;在文本生成任務中,GPT 等模型基于動態詞向量生成連貫文本。?

3. 跨語言處理?

跨語言詞向量(如 mBERT)可對齊不同語言的語義空間,支持零樣本翻譯。?

五、挑戰與前沿發展?

1. 挑戰?

詞向量技術面臨多語言鴻溝、時效性不足以及可解釋性差等挑戰。資源稀缺語言的詞向量質量低,靜態詞向量難以捕捉新詞和領域特定術語,向量空間的語義映射缺乏明確物理意義。?

2. 前沿方向?

目前前沿研究聚焦于動態詞向量優化,如 GPT-4、LLaMA 等大模型進一步提升上下文理解能力;探索圖結構詞向量,結合知識圖譜注入結構化語義;以及通過對比學習實現少樣本 / 無監督學習場景下的詞向量訓練。?

六、工具與資源推薦?

在實際應用中,有許多工具和資源可供使用。訓練工具方面,可使用 TensorFlow/PyTorch 自定義詞向量訓練框架,也可通過 SpaCy/Flair 獲取預訓練詞向量,支持多語言。預訓練模型庫推薦使用 Hugging Face Transformers,它包含 BERT、GPT 等模型的詞向量接口;FastText 官方預訓練向量支持 100 + 語言,可直接下載使用。?

詞向量作為連接自然語言與計算機的橋梁,其技術演進深刻影響著 NLP 的發展。從早期靜態表示到動態上下文感知,詞向量始終是理解語言語義的核心工具,未來也將在多模態、低資源等場景中持續突破。通過理論學習與代碼實踐相結合,我們能更好地掌握這一技術,應用于實際項目中。?

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

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

相關文章

如何自學FPGA設計?

眾所周知,FPGA設計自學難度不小,更不存在速成的捷徑。這里簡單說一下學習的規劃,希望能給入門者提供一些方向。 學會相應的知識 不論是科班畢業還是理工科專業出身,想要入行FPGA開發,基礎知識必須扎實。尤其是在高校…

南航無人機大規模戶外環境視覺導航框架!SM-CERL:基于語義地圖與認知逃逸強化學習的無人機戶外視覺導航

作者: Shijin Zhao, Fuhui Zhou, Qihui Wu單位:南京航空航天大學電子信息工程學院論文標題: UAV Visual Navigation in the Large-Scale Outdoor Environment: A Semantic Map-Based Cognitive Escape Reinforcement Learning Method論文鏈接…

Linux-進程間通信

1.進程間通信介紹 1.1通信目的 數據傳輸:?個進程需要將它的數據發送給另?個進程 資源共享:多個進程之間共享同樣的資源。 通知事件:?個進程需要向另?個或?組進程發送消息,通知它(它們)發?了某種事…

精益數據分析(69/126):最小可行化產品(MVP)的設計、驗證與數據驅動迭代

精益數據分析(69/126):最小可行化產品(MVP)的設計、驗證與數據驅動迭代 在創業旅程中,從需求洞察到產品落地的關鍵一躍是打造最小可行化產品(MVP)。今天,我們結合《精益…

從JavaScript快速上手Python:關鍵差異與核心技巧

引言 如果你是JavaScript開發者,可能會對Python的簡潔語法和豐富的生態感興趣。但兩種語言的設計哲學和實現細節存在顯著差異。本文將通過對比JS與Python的核心概念,幫助你快速過渡,避免“踩坑”。 一、語法差異:告別大括號&#…

TransmittableThreadLocal實現上下文傳遞-筆記

1.TransmittableThreadLocal簡介 com.alibaba.ttl.TransmittableThreadLocal(簡稱 TTL)是阿里巴巴開源的一個工具類,旨在解決 ThreadLocal 在線程池中無法傳遞上下文變量 的問題。它是對 InheritableThreadLocal 的增強,尤其適用…

TDengine 安全部署配置建議

背景 TDengine 的分布式、多組件特性導致 TDengine 的安全配置是生產系統中比較關注的問題。本文檔旨在對 TDengine 各組件及在不同部署方式下的安全問題進行說明,并提供部署和配置建議,為用戶的數據安全提供支持。 安全配置涉及組件 TDengine 包含多…

在Cursor中啟用WebStorm/IntelliJ風格快捷鍵

在Cursor中啟用WebStorm/IntelliJ風格快捷鍵 方法一:使用預置快捷鍵方案 打開快捷鍵設置 Windows/Linux: Ctrl K → Ctrl SmacOS: ? K → ? S 搜索預設方案 在搜索框中輸入keyboard shortcuts,選擇Preferences: Open Keyboard Shortcuts (JSON) …

python打卡day30@浙大疏錦行

知識點回顧: 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯:找到根目錄(python解釋器的目錄和終端的目錄不一致) 作業:自己新建幾個不同路徑文件嘗試下如何導入 具體操作步驟: 在桌面…

【kafka】基本命令

創建 Kafka Topic 的命令 以下是創建 Kafka Topic 的幾種常用方法&#xff1a; 1. 使用 kafka-topics.sh 基礎命令&#xff08;Kafka 自帶工具&#xff09; bin/kafka-topics.sh --create \--bootstrap-server <broker地址:端口> \--topic <topic名稱> \--parti…

編程速遞:適用于 Delphi 12.3 的 FMX Linux 現已推出

Embarcadero非常高興地宣布&#xff0c;用于使用Delphi構建Linux客戶端應用程序的FMX Linux UI庫再次在RAD Studio 12.3版本以及RAD Studio 12.2版本中提供支持&#xff0c;同時也適用于更早的版本。 作為RAD Studio的一個附加庫&#xff0c;FMX Linux為開發面向Linux的圖形用…

通過實例講解螺旋模型

目錄 一、螺旋模型的核心概念 二、螺旋模型在電子商城系統開發中的應用示例 第 1 次螺旋:項目啟動與風險初探

vue3 vite 路由

如路由是這種格式 http://localhost:7058/admin/product/brand路由配置如下 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue import NProgress from nprogress; import nprogress/nprogress.css; import {errorRour…

【Redis】Hash 存儲相比 String 存儲的優勢

在 Redis 中&#xff0c;Hash 存儲相比 String 存儲具有以下 優勢&#xff0c;特別適用于某些特定場景&#xff1a; ? 1. 更節省內存&#xff08;尤其適合存儲對象&#xff09; Hash 內部使用壓縮列表&#xff08;ziplist&#xff09;或哈希表實現&#xff0c;在數據量較小時…

CSS詳解:特性、選擇器與優先級

CSS詳解&#xff1a;特性、選擇器與優先級 目錄 CSS詳解&#xff1a;特性、選擇器與優先級一、CSS的核心特性1. 層疊性&#xff08;Cascading&#xff09;2. 繼承性&#xff08;Inheritance&#xff09;3. 優先級&#xff08;Specificity&#xff09;4. 響應式設計5. 動畫與過渡…

《算法導論(第4版)》閱讀筆記:p86-p90

《算法導論(第4版)》學習第 19 天&#xff0c;p83-p85 總結&#xff0c;總計 3 頁。 一、技術總結 無。 二、英語總結(生詞&#xff1a;2) 1. inkling (1)inkling: inclen(“utter in an undertone&#xff0c;低聲說話”) c. a hint(提示)&#xff1b;a slight knowledg…

nginx概念及使用

一、Nginx 核心概念 Nginx&#xff08;發音為 "engine-x"&#xff09;是一個高性能、開源的 Web 服務器和反向代理服務器&#xff0c;由俄羅斯工程師伊戈爾?賽索耶夫&#xff08;Igor Sysoev&#xff09;于 2004 年開發&#xff0c;最初用于解決當時高并發場景下 Ap…

2025藍橋杯JAVA編程題練習Day8

1. 路徑 題目描述 小藍學習了最短路徑之后特別高興&#xff0c;他定義了一個特別的圖&#xff0c;希望找到圖 中的最短路徑。 小藍的圖由 2021 個結點組成&#xff0c;依次編號 1 至 2021。 對于兩個不同的結點 a, b&#xff0c;如果 a 和 b 的差的絕對值大于 21&#xff0…

【趙渝強老師】Memcached的路由算法

Memcached支持兩種不同方式的客戶端路由算法&#xff0c;即&#xff1a;求余數Hash算法和一致性Hash算法。下面分別進行介紹。 一、 求余數的路由算法 求余數Hash算法的客戶端路由是對插入數據的鍵進行求余數&#xff0c;根據余數來決定存儲到哪個Memcached實例。 視頻講解如…

NLP學習路線圖(一): 線性代數(矩陣運算、特征值分解等)

引言&#xff1a;語言與矩陣的奇妙邂逅 在自然語言處理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每個詞語都像被施了變形術的精靈&#xff0c;在數學的殿堂中翩翩起舞。當我們用"king - man woman queen"這樣的向量魔法破解語義密碼時&#xff0c;線性…