Word2vec中的連續詞袋 (CBOW)

banq發表於2024-03-13

連續詞袋(CBOW)模型是一種用於自然語言處理的神經網路模型。它可用於多種任務,例如語言翻譯和文字分類。它用於根據周圍的單詞來預測單詞。我們可以使用不同的最佳化演算法(例如隨機梯度下降)在大型資料集上訓練該模型。CBOW 模型在訓練後給出數值向量,稱為詞嵌入。詞嵌入用於將詞表示為數值向量。

Word2vec是一種基於神經網路的方法,用於建立包含其上下文意義和關聯的單詞的冗長向量表示。連續詞袋是實現 Word2vec 的主要方法。

連續詞袋簡介
連續詞袋是一種生成詞嵌入的自然語言處理技術。詞嵌入對於許多 NLP 任務很有用,因為它們表示語言中單詞之間的語義和結構聯絡。CBOW 是一種基於神經網路的演算法,可根據上下文單詞預測目標單詞。它是一種從未標記資料中學習的無監督方法。它可用於情感分析、機器翻譯和文字分類。

周圍單詞的視窗作為連續詞袋的輸入,然後預測視窗中心的目標單詞。該模型是在基於文字或單詞的龐大資料集上進行訓練的。它從先前的資料和輸入資料的模式中學習。該模型可以與其他自然語言處理技術(例如skip-gram模型)結合使用,以增強自然語言處理任務的效能。

CBOW 模型透過訓練改變隱藏層中神經元的權重,以生成最佳的目標詞輸出。該模型有效且快速地一次性預測輸出,稱為一次性學習。該模型的主要目的是開發單詞的複雜表示,其中語義上可比較的單詞在嵌入空間中接近。

連續詞袋的架構
CBOW 模型試圖分析周圍單詞的上下文來預測目標單詞。

就拿一句話來說吧:“Today is a rainy day.”。該模型將這個句子分解為單詞對(上下文和目標單詞)。單詞對看起來像 ([today, a], is), ([is, rainy], a), ([a, day], rainy)。模型將使用這些單詞對和視窗大小來預測目標單詞。

讓我們使用 Python 實現連續詞袋模型
Python 提供了一個名為 gensim 的模組,用於自然語言處理,提供各種嵌入模型。

pip install gensim   

步驟 1. 庫和資料
我們將匯入所有庫,然後載入我們的資料。我們選取了一個名為“brown”的 NLTK 語料庫。

from gensim.models import Word2Vec  
import nltk  
from nltk.corpus import brown  

我們匯入了 gensim 模型和 Word2Vec 詞庫。此外,我們還使用了 NLTK 及其語料庫。
nltk.download('brown')  
cbow_data = brown.sents()  # Using the Brown corpus from NLTK as sample data  

我們從 NLTK 模型中下載了棕色語料庫,並將其作為輸入資料。

步驟 2:初始化模型
model_CBOW = Word2Vec(cbow_data, min_count=1, window=5, sg=0)  

我們使用 gensim 庫的 Word2Vec 類建立了一個 CBOW 模型,並配置了該模型的一些超引數,如最小字數、嵌入向量大小、視窗大小和訓練演算法(CBOW = 0)。

步驟 3:訓練模型
Model_CBOW.train(cbow_data, total_examples=len(cbow_data), epochs=200)  

在訓練過程中,CBOW 模型會分析輸入資料,並修改隱藏層和輸出層中單元的偏置和權重,以減少預測的實際目標詞嵌入之間的誤差。這就是所謂的反向傳播。使用更多的歷時訓練可以獲得更準確的輸出結果。

步驟 4:單詞嵌入
word_vector = model.wv  

其中,模型正在學習嵌入。

步驟 5:檢查餘弦相似度
similar = word_vectors.similarity('woman', 'man')  
print(f"The Cosine Similarity between 'woman' and 'man': {similar}")  

輸出:

The Cosine Similarity between 'girl' and 'boy': 0.61204993724823

我們將計算兩個詞之間的餘弦相似度。它將告訴我們這兩個詞在意義上的相似程度。

我們可以分析詞與詞嵌入之間的相似度。詞義或上下文相似的詞有望相互接近。


 

相關文章