NLP基礎1_word-embedding

基于github項目:https://github.com/shibing624/nlp-tutorial/tree/main

自然語言處理任務

1) 簡單任務

  • 拼寫檢查 Spell Checking

  • 關鍵詞檢索 Keyword Search

  • 同義詞查找 Finding Synonyms

2) 中級任務

  • 解析來自網站、文檔等的信息

3) 復雜任務

  • 機器翻譯 Machine Translation

  • 語義分析 Semantic Analysis

  • 指代消解 Coreference

  • 問答系統 Question Answering

文本表示

傳統離散表示

在自然語言處理(Natural Language Processing,NLP)領域,文本表示是處理流程的第一步,主要是將文本轉換為計算機可以運算的數字。

文本表示方法的技術演進:

符號表示法(Symbolic)

示例:詞典編碼「自然語言處理」→ {"自":1, "然":2, "語":3, "言":4, "處":5, "理":6}

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["自然語言處理 是 人工智能 的 重要 分支"]
vectorizer = CountVectorizer(token_pattern=r'\b\w+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())  # ['人工智能', '分支', '處理', '自然語言處理', '重要']

詞袋模型(Bag-of-Words, BoW)

原理:忽略詞序,統計每個詞在文檔中的出現次數

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["I love NLP.", "NLP is amazing!"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())  # 輸出:[[1 1 1 0] [0 1 0 1]] 
print(vectorizer.vocabulary_)  # {'love': 2, 'nlp': 1, 'is': 3, 'amazing': 0}

例子1:

句1:Jane wants to go to Shenzhen 句2:Bob wants to go to Shanghai

使用兩個例句來構造詞袋: [Jane, wants, to, go, Shenzhen, Bob, Shanghai]

兩個例句就可以用以下兩個向量表示,對應的下標與映射數組的下標相匹配,其值為該詞語出現的次數

句1:[1,1,2,1,1,0,0] 句2:[0,1,2,1,0,1,1]

TF-IDF(詞頻-逆文檔頻率)

原理:降低常見詞權重,提升重要詞權重

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["The cat sat on the mat.", "Dog on mat."]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())  # 非對稱矩陣

優劣對比

方法優點缺點
BoW簡單高效,易于實現忽略詞序、語義信息,維度災難
TF-IDF減少常見詞干擾仍無法捕捉語義關系

?分布式表示(詞嵌入)

核心思想:用稠密向量表示詞語,捕獲語義關聯

Word2Vec

原理:通過上下文預測目標詞(Skip-Gram)或反之(CBOW)

from gensim.models import Word2Vec
sentences = [["nlp", "is", "cool"], ["deep", "learning", "too"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
print(model.wv["nlp"])  # 輸出100維向量

向量示例"king" - "man" + "woman" ≈ "queen"

GloVe(Global Vectors)

原理:基于全局詞共現矩陣的加權最小二乘訓練

from gensim.scripts.glove2word2vec import glove2word2vec
from gensim.models import KeyedVectors
glove2word2vec("glove.txt", "word2vec_format.txt")
model = KeyedVectors.load_word2vec_format("word2vec_format.txt")

優劣對比

方法優點缺點
Word2Vec高效捕獲局部語義未利用全局統計信息
GloVe結合全局共現統計訓練速度較慢

?上下文感知表示

核心突破:根據上下文動態調整詞向量

ELMo(Embeddings from Language Models)

原理:雙向LSTM生成上下文相關向量

from allennlp.modules.elmo import Elmo, batch_to_ids
options_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json"
weight_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5"
elmo = Elmo(options_file, weight_file, 1)
character_ids = batch_to_ids(["hello world"])
embeddings = elmo(character_ids)['elmo_representations'][0]

BERT(Bidirectional Encoder Representations)

原理:Transformer編碼器 + Masked LM訓練

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello NLP!", return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state  # [1, seq_len, 768]

向量示例
同一詞在不同上下文的BERT表示:

  • "bank" in "river bank" → [0.2, -0.7, ..., 0.4]

  • "bank" in "bank account" → [0.8, 0.1, ..., -0.3]

方法類型典型代表語義捕獲上下文敏感訓練成本應用場景
傳統離散表示BoW, TF-IDF?極低簡單文本分類
靜態詞嵌入Word2Vec中等(靜態)?中等關鍵詞擴展、推薦
上下文動態嵌入BERT??極高語義理解、問答系統

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

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

相關文章

ClickHouse系列--BalancedClickhouseDataSource實現

clickhouse-jdbc中負載均衡數據源的實現。 基本邏輯如下: 1.通過配置的url串,來切分構造url列表; 2.通過一個定時線程任務,來不斷的去ping url列表,來更新可用的url列表; 3.在可用列表中隨機返回一個可用ur…

Linux目錄說明

Linux Filesystem Hierarchy Standard(FHS) 1. /bin 全稱:Binary(二進制文件)功能:存放系統最基礎的可執行命令,所有用戶(包括普通用戶)都能使用,用于系統啟…

鴻蒙 Grid 與 GridItem 深度解析:二維網格布局解決方案

一、引言:網格布局 —— 多維度數據展示的黃金方案 在鴻蒙應用開發體系中,網格布局作為處理多元素有序排列的核心方案,廣泛應用于電商商品陳列、圖片畫廊、功能矩陣等場景。鴻蒙提供的 Grid 與 GridItem 組件通過聲明式語法構建靈活的二維布…

??Vue 開發環境配置:使用 devServer.proxy 解決跨域問題?-vue中文件vue.config,js中配置devserver做反向代理到后端

??Vue 開發環境配置:使用 devServer.proxy 解決跨域問題?? ??引言?? 在現代 Web 開發中,前端和后端通常獨立開發,前端運行在 http://localhost:8080,而后端可能運行在 http://localhost:8000 或其他端口。由于瀏覽器的 …

JVM 中的 GC 算法演進之路!(Serial、CMS、G1 到 ZGC)

引言 想象一下,Java 程序運行就像在一個巨大的圖書館里借書還書。這個圖書館(JVM 的內存堆區)為了高效運轉,需要一個聰明的“圖書管理員”來清理失效的書籍(垃圾對象)。這,就是垃圾回收器&#…

(9)python+playwright自動化測試-頁面(page)

1.簡介 通過前邊的講解和學習,細心認真地你可能發現在Playwright中,沒有Element這個概念,只有Page的概念,Page不僅僅指的是某個頁面,例如頁面間的跳轉等,還包含了所有元素、事件的概念,所以我們…

《自動控制原理 》- 第 1 章 自動控制的基本原理與方式

1-1 自動控制的基本原理與方式 自動控制是指在沒有人直接參與的情況下,利用外加的設備或裝置,使機器、設備或生產過程的某個工作狀態或參數按照預定的規律運行。自動控制的核心原理是反饋控制,即通過將系統的輸出量回送到輸入端,與…

DL00715-基于YOLOv11的水面漂浮物目標檢測含數據集

【論文必備】基于YOLOv11的水面漂浮物目標檢測——讓你的研究走在科技前沿! 在環境監測、海洋保護和水質管理領域,水面漂浮物的檢測一直是一個亟待解決的難題。傳統的人工巡檢方式不僅耗時費力,還無法覆蓋廣泛的水域范圍。如今,基…

權電阻網絡DAC實現電壓輸出型數模轉換Multisim電路仿真——硬件工程師筆記

目錄 1 基礎知識 1.1 運算放大器在DAC中的作用 1.2 常見的基于運算放大器的DAC電路 1.2.1 倒T形電阻網絡DAC 1.2.2 權電阻網絡DAC 1.2.3 開關電容DAC 1.3 運算放大器的選擇 1.4 設計注意事項 2 仿真實驗 2.1 權電阻網絡DAC實現數字0對應電壓輸出 2.2 權電阻網絡DAC實…

Redis主從集群

? 一、什么是 Redis 主從集群? Redis 主從(Master-Slave)集群是一種最基礎的集群方式: 一臺 Redis 作為主節點(Master),負責寫操作; 一到多臺 Redis 作為從節點(Slave&…

【水印論文閱讀1】將水印規則的定義域從離散的符號空間轉移到連續的語義空間

【水印論文閱讀1】將水印規則的定義域從離散的符號空間轉移到連續的語義空間 寫在最前面**為什么“token序列空間”有根本缺陷?****為什么“語義向量空間”能破局?****1. 連續性(抗攻擊的核心)****2. 高維復雜性(防破解…

Glide緩存機制

一、緩存層級與設計目標 雙級緩存: 內存緩存:弱引用 LruCache 磁盤緩存:DiskLruCache 設計目標: 減少網絡流量消耗 避免Bitmap頻繁創建/銷毀引發的GC 提升圖片加載速度 二、內存緩存機制 1. 雙緩存結構 緩存類型存儲對象…

BaiduSitemap - Typecho站點地圖生成與多搜索引擎推送插件

文章目錄 ?? BaiduSitemap - Typecho站點地圖生成與多搜索引擎推送插件? 功能特點?? 插件架構核心模塊文件結構?? 安裝方法方法一:手動安裝方法二:Git克隆?? 配置說明站點地圖基本設置搜索引擎配置百度搜索引擎必應(Bing)搜索引擎谷歌(Google)搜索引擎?? 使用…

androidx中<layout>根布局的意義及用法

在 Android 開發中,<layout> 根布局是 Android Jetpack Data Binding 庫的核心組件,用于聲明該 XML 布局文件將使用數據綁定功能。以下是詳細說明: ?? 一、基本作用 1. 啟用數據綁定 <layout> 標簽標志著此布局文件支持數據綁定,編譯器會為其生成對應的綁定類…

QTreeWidget 簡單使用

效果圖&#xff1a; 關鍵代碼&#xff1a; void MainProj::_InitTree() { connect(m_pTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(TreeItemClicked(QTreeWidgetItem*, int))); m_pTreeWidget->header()->setHidden(1); /*QTreeWid…

手勢-handpose的pipeline介紹

手勢-handpose的pipeline包括&#xff1a; 1、手部檢測算法&#xff1a;單幀檢測出左右手的邊界框。 2、手部跟蹤算法&#xff1a;連續幀跟蹤&#xff0c;鎖定左右手跟蹤目標&#xff0c;作為后續的手部ui操作。 3、手部關鍵點檢測算法&#xff1a;基于單幀的檢測框圖像作為輸…

計算機操作系統(十七)內存管理

計算機操作系統&#xff08;十七&#xff09;內存管理 前言一、內存的使用與程序重定位&#xff08;一&#xff09;內存是什么&#xff1f;&#xff08;二&#xff09;程序的重定位過程&#xff08;三&#xff09;總結&#xff1a;內存使用的核心問題 二、連續分區管理&#xf…

【編譯原理】期末

單選題 (4分) 令文法G[E]為&#xff1a;E->ET | T T->T*F | F F-> (E) | i 句型 F*iT 的最左素短語是&#xff08; &#xff09; A.F B.i C.T D.F*i B 短語&#xff1a; F*iT、F*i、F、i 素短語&#xff1a; i 最左素短語&#xff1a; i 單選題 (4分) 若在…

一個簡單測試Deepseek吞吐量的腳本,國內環境可跑

一個簡單測試Deepseek吞吐量的腳本,這里用DeepSeek-R1-Distill-Qwen-32B ,支持單卡4090 24G可跑,具體看你的硬件情況做調整,理論支持所有的模型,看你需要,可以修改模型名稱,重點是pip使用國內的源,模型下載用阿里的ModelScope,無障礙下載,使用. 最后可以生成一個txt與html報表.…

前端基礎知識JavaScript系列 - 19(正則表達式)

一、是什么 正則表達式是一種用來匹配字符串的強有力的武器 它的設計思想是用一種描述性的語言定義一個規則&#xff0c;凡是符合規則的字符串&#xff0c;我們就認為它“匹配”了&#xff0c;否則&#xff0c;該字符串就是不合法的 在 JavaScript中&#xff0c;正則表達式也…