Word2vec中的连续词袋 (CBOW)

连续词袋(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

我们将计算两个词之间的余弦相似度。它将告诉我们这两个词在意义上的相似程度。

我们可以分析词与词嵌入之间的相似度。词义或上下文相似的词有望相互接近。