前言
當今的大語言模型非常智能,但是你有沒有想過這些事情:
-
機器是怎么理解“國王”和“王后”之間的關系?
-
“貓”和“狗”是怎么在 AI 中“相似以及區分”的?
-
文本又是怎么變成模型能讀懂的數字?
這一切,都要和一個強大的工具有關系,詞嵌入:Word2Vec!
先看一張圖片,如下是一個tensflow實現的word2vec的密密麻麻的詞圖,是不是感覺很壯觀,那么AI是如何做到的呢 ?
本篇就要說下, Word2Vec是如何讓 AI “讀懂”文字的,先看定義,如下
定義
Word2Vec 是 Google 在 2013 年提出的一個自然語言處理模型,它能把文字轉換成向量(數字),而且這些向量還包含了語義信息!
用一句話總結它的核心價值:Word2Vec 把人類理解的詞變成“計算機能理解的向量”,并且保留詞與詞之間的關系!
怎么這么神奇,這就需要去了解下輸出增強
輸出增強
在word2vec出來之前,傳統做法是使用「獨熱編碼 One-Hot Encoding」來表示單詞,比如:
單詞 | One-hot 向量(長度為5) |
---|---|
貓 | [1, 0, 0, 0, 0] |
狗 | [0, 1, 0, 0, 0] |
老鼠 | [0, 0, 1, 0, 0] |
從表中看到,存在兩個主要的問題:
-
向量非常稀疏,占用內存
-
單詞之間沒有任何語義關系
比如,“貓”和“狗”在獨熱向量中完全沒有聯系,而 Word2Vec 能讓「相似意思」的詞靠得更近!那么Word2Vec 輸出的是什么樣的向量?和獨熱向量比有啥優勢?我們看下Word2Vec的輸出向量
輸出的向量
Word2Vec 會給每個詞一個低維度的密集向量,比如:
單詞 | 向量(假設為3維) |
---|---|
貓 | [0.21, 0.54, -0.31] |
狗 | [0.19, 0.50, -0.29] |
老鼠 | [-0.42, 0.18, 0.33] |
更神奇的是,它還能保留詞之間的關系:具備了一種“類人思維”的意思。通過各個維度的數據相似度,來區分和相似貓狗老鼠,那么各個維度的數據又是怎么訓練出來的呢?
訓練方式
Word2Vec 有兩種主要的訓練方式:
- CBOW訓練
CBOW(Continuous Bag of Words),是根據“上下文詞”,預測“中心詞”。
舉例:
給定上下文:我 喜歡 __ 晚飯
模型要學會填空:“吃”
結構圖:
上下文詞 → 中間隱藏層 → 預測中心詞
適合小數據集。
- Skip-Gram訓練
根據“中心詞”,預測“上下文詞”。
舉例:
中心詞:“吃”,模型要學會預測“我”“喜歡”“晚飯”
結構圖:
中心詞 → 中間隱藏層 → 預測多個上下文詞
適合大數據集。
實戰示例
我們用 Gensim 來實現 一個Word2Vec的示例如下
from gensim.models import Word2Vecsentences = [["我", "喜歡", "吃", "晚飯"],["貓", "喜歡", "魚"],["狗", "也", "喜歡", "魚"]]model = Word2Vec(sentences, vector_size=100, window=2, min_count=1, sg=1) # sg=1表示用Skip-Gramprint(model.wv["貓"]) # 查看“貓”的詞向量
print(model.wv.most_similar("貓")) # 查找最相近的詞
應用場景
場景 | 示例 |
---|---|
語義相似性 | 推薦系統中:喜歡“披薩”的人可能也喜歡“漢堡” |
文本聚類 | 新聞分類、問答系統 |
情感分析 | 正負面情緒詞向量聚類 |
機器翻譯 | 詞義對齊、多語言向量空間 |
局限性分析
雖然 Word2Vec 非常強大,但也有一些局限:
-
靜態詞向量:一個詞在不同語境下表示一樣,比如“銀行”在“金融銀行”和“河岸”中的意思不同,但 Word2Vec 分不清
-
對上下文敏感度弱:只靠鄰近的詞來訓練
-
冷啟動問題:對新詞不友好
但好在,這些問題在后來的 BERT、ELMo 等上下文嵌入模型中得到了改善。
總結
特點 | Word2Vec |
---|---|
優點 | 簡潔、高效、能捕捉詞的語義關系 |
訓練方式 | CBOW / Skip-Gram |
輸出結果 | 低維度、密集的詞向量 |
主要應用 | NLP 中的基礎詞嵌入層 |
局限 | 不考慮上下文、不支持多義詞 |