Word2Vec的CBOW模型

这篇具有很好参考价值的文章主要介绍了Word2Vec的CBOW模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Word2Vec中的CBOW(Continuous Bag of Words)模型是一种用于学习词向量的神经网络模型。CBOW的核心思想是根据上下文中的周围单词来预测目标单词。

例如,对于句子“The cat climbed up the tree”,如果窗口大小为5,那么当中心单词为“climbed”时,上下文单词为“The”、“cat”、“up”和“the”。CBOW模型要求根据这四个上下文单词,计算出“climbed”的概率分布。

Word2Vec的CBOW模型,word2vec,人工智能,机器学习

Word2Vec的CBOW模型,word2vec,人工智能,机器学习

Word2Vec的CBOW模型,word2vec,人工智能,机器学习

一个简单的CBOW模型

import torch
import torch.nn as nn
import torch.optim as optim

# 定义CBOW模型
class CBOWModel(nn.Module):
    def __init__(self, vocab_size, embed_size):
        super(CBOWModel, self).__init__()
        self.embeddings = nn.Embedding(vocab_size, embed_size)
        self.linear = nn.Linear(embed_size, vocab_size)

    def forward(self, context):
        embedded = self.embeddings(context)
        embedded_sum = torch.sum(embedded, dim=1)
        output = self.linear(embedded_sum)
        return output

# 定义训练函数
def train_cbow(data, target, model, criterion, optimizer):
    optimizer.zero_grad()
    output = model(data)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()
    return loss.item()

# 假设有一个简单的语料库和单词到索引的映射
corpus = ["I like deep learning", "I enjoy NLP", "I love PyTorch"]
word_to_index = {"I": 0, "like": 1, "deep": 2, "learning": 3, "enjoy": 4, "NLP": 5, "love": 6, "PyTorch": 7}

# 将语料库转换为训练数据
context_size = 3
data = []
target = []
for sentence in corpus:
    tokens = sentence.split()
    for i in range(context_size, len(tokens) - context_size):
        context = [word_to_index[tokens[j]] for j in range(i - context_size, i + context_size + 1) if j != i]
        target_word = word_to_index[tokens[i]]
        data.append(torch.tensor(context, dtype=torch.long))
        target.append(torch.tensor(target_word, dtype=torch.long))

# 超参数
vocab_size = len(word_to_index)
embed_size = 10
learning_rate = 0.01
epochs = 100

# 初始化模型、损失函数和优化器
cbow_model = CBOWModel(vocab_size, embed_size)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(cbow_model.parameters(), lr=learning_rate)

# 开始训练
for epoch in range(epochs):
    total_loss = 0
    for i in range(len(data)):
        loss = train_cbow(data[i], target[i], cbow_model, criterion, optimizer)
        total_loss += loss
    print(f'Epoch {epoch + 1}/{epochs}, Loss: {total_loss}')

# 获取词向量
word_embeddings = cbow_model.embeddings.weight.detach().numpy()
print("Word Embeddings:\n", word_embeddings)
  1. CBOW模型定义(class CBOWModel):

    • __init__ 方法:在初始化过程中定义了两个层,一个是nn.Embedding用于获取词向量,另一个是nn.Linear用于将词向量求和后映射到词汇表大小的空间
    • forward 方法:定义了模型的前向传播过程。给定一个上下文,首先通过Embedding层获取词向量,然后对词向量进行求和,最后通过Linear层进行映射。
  2. 训练函数(train_cbow):

    • train_cbow 函数用于训练CBOW模型。接受训练数据、目标、模型、损失函数和优化器作为输入,并执行前向传播、计算损失、反向传播和优化器更新权重的过程。
  3. 语料库和单词到索引的映射:

    • corpus 包含了三个简单的句子。
    • word_to_index 是单词到索引的映射。
  4. 将语料库转换为训练数据:

    • 对每个句子进行分词,然后构建上下文和目标。上下文是目标词的上下文词的索引列表,目标是目标词的索引。
  5. 超参数和模型初始化:

    • vocab_size 是词汇表大小。
    • embed_size 是词向量的维度。
    • learning_rate 是优化器的学习率。
    • epochs 是训练迭代次数。
    • CBOWModel 实例化为 cbow_model
    • 使用交叉熵损失函数和随机梯度下降(SGD)优化器。
  6. 训练过程:

    • 使用嵌套的循环对训练数据进行多次迭代。
    • 对每个训练样本调用 train_cbow 函数,计算损失并更新模型权重。
  7. 获取词向量:

    • 通过 cbow_model.embeddings.weight 获取训练后的词向量矩阵,并将其转换为 NumPy 数组。

需要注意的是,代码中的训练过程比较简单,通常在实际应用中可能需要更复杂的数据集、更大的模型和更多的训练策略。此处的代码主要用于展示CBOW模型的基本实现。

在CBOW(Continuous Bag of Words)模型中,神经网络的输入和输出数据的构造方式如下:

  1. 输入数据:

    • 对于每个训练样本,输入数据是上下文窗口内的单词的独热编码(one-hot encoding)向量的拼接。
    • 上下文窗口大小为3,因此对于每个目标词,上下文窗口内有3个单词。这3个单词的独热编码向量会被拼接在一起作为输入。
    • 对于语料库中的每个目标词,都会生成一个对应的训练样本。

    以 "I like deep learning" 为例:

    • "deep" 是目标词,上下文窗口为["like", "I", "learning"]。
    • 对应的独热编码向量分别是 [0, 1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0]。
    • 这三个向量拼接在一起作为神经网络的输入。

    对于整个语料库,这个过程会生成一组输入数据。

  2. 输出数据:

    • 输出数据是目标词的独热编码向量,表示模型要预测的词。
    • 对于 "I like deep learning" 中的 "deep",其对应的独热编码向量是 [0, 0, 0, 1, 0, 0, 0, 0]。
    • 整个语料库中,为每个目标词生成相应的输出数据。

综上所述,CBOW模型的神经网络输入数据是上下文窗口内单词的拼接独热编码向量,输出数据是目标词的独热编码向量。在训练过程中,模型通过学习输入与输出之间的映射关系,逐渐调整权重以更好地捕捉语境信息。文章来源地址https://www.toymoban.com/news/detail-786330.html

到了这里,关于Word2Vec的CBOW模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Word2Vec模型——将文本转换成向量的方法

            在美赛的时候,用了一下这个模型,发一下。         Word2Vec是一种用于将文本转换为向量表示的技术。它是Google在2013年开发的一种工具,主要用于将单词转换为向量表示,并在向量空间中找到单词之间的语义关系。Word2Vec模型有两种架构:连续词袋模型(Conti

    2023年04月21日
    浏览(27)
  • Word2Vec详解

    Word2Vec 基本思想:通过训练将每一个词映射成一个固定长度的向量,所有向量构成一个词向量空间,每一个向量(单词)可以看作是向量空间中的一个点,意思越相近的单词距离越近。 如何把词转换为向量? 通常情况下,我们可以维护一个查询表。表中每一行都存储了一个特

    2024年02月13日
    浏览(38)
  • 论文精读--word2vec

    word2vec从大量文本语料中以无监督方式学习语义知识,是用来生成词向量的工具 把文本分散嵌入到另一个离散空间,称作分布式表示,又称为词嵌入(word embedding)或词向量 We propose two novel model architectures for computing continuous vector representations of words from very large data sets. The qua

    2024年02月22日
    浏览(41)
  • 机器学习——Word2Vec

    参考资料: https://zhuanlan.zhihu.com/p/114538417 https://www.cnblogs.com/pinard/p/7243513.html 统计语言模型是基于 语料库 构建的 概率模型 ,用来计算一个词串 W = ( w 1 , w 2 , ⋯   , w T ) W=(w_1,w_2,cdots,w_T) W = ( w 1 ​ , w 2 ​ , ⋯ , w T ​ ) 构成句子的概率 : p ( W ) = p ( w 1 , w 2 , ⋯   . w T ) = p

    2024年02月11日
    浏览(37)
  • 自然语言处理(三):基于跳元模型的word2vec实现

    回顾一下第一节讲过的跳元模型 跳元模型(Skip-gram Model)是一种用于学习词向量的模型,属于Word2Vec算法中的一种。它的目标是通过给定一个中心词语来预测其周围的上下文词语。 这节我们以跳元模型为例,讲解word2vec的实现 文章内容来自李沐大神的《动手学深度学习》并加

    2024年02月11日
    浏览(37)
  • Word2Vec实现文本识别分类

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章:365天深度学习训练营-第N4周:用Word2Vec实现文本分类 🍖 原作者:K同学啊|接辅导、项目定制 语言环境:Python3.9.12 编译器:jupyter notebook 深度学习环境:TensorFlow2 本次内容我本来是使用miniconda的环境的,但是好

    2024年02月16日
    浏览(34)
  • 深度学习(3)--递归神经网络(RNN)和词向量模型Word2Vec

    目录 一.递归神经网络基础概念 二.自然语言处理-词向量模型Word2Vec 2.1.词向量模型 2.2.常用模型对比 2.3.负采样方案 2.4.词向量训练过程 递归神经网络(Recursive Neural Network, RNN)可以解决有时间序列的问题,处理诸如树、图这样的递归结构。 CNN主要应用在计算机视觉CV中,RNN主要

    2024年01月21日
    浏览(33)
  • 一文了解Word2vec 阐述训练流程

      在机器学习领域,嵌入(embeddings)的概念无疑是其中最令人兴奋的创新之一。想象一下,每当你与 Siri 、 Google Assistant 、 Alexa 或 Google Translate 互动,甚至在使用具有下一个词预测功能的手机输入法(比如苹果输入法、搜狗输入法)时,你其实都在享受词嵌入模型带来的

    2024年02月05日
    浏览(39)
  • 【NLP】Word2Vec原理和认识

            Word2Vec是NLP领域的最新突破。Tomas Mikolov是捷克计算机科学家,目前是CIIRC(捷克信息学,机器人和控制论研究所)的研究员,是word2vec研究和实施的主要贡献者之一。词嵌入是解决NLP中许多问题不可或缺的一部分。它们描绘了人类如何向机器理解语言。您可以将它

    2024年02月12日
    浏览(29)
  • NLP实战:使用Word2vec实现文本分类

    目录 一、数据预处理 1、加载数据 2. 构建词典 3.生成数据批次和迭代器 二、模型构建 1.搭建模型 2.初始化模型 3.定义训练与评估函数 三、训练模型 1. 拆分数据集并运行模型 2. 测试指定数据 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包