【NLP】daydayup 词向量训练模型word2vec

词嵌入算法 word2vec

word2vec是一种高效训练词向量的模型,基本出发点是上下文相似的两个词。它们的词向量也应该相似。一般分为CBOW(Continuous Bag-of-Words)与 Skip-Gram

  • CBOW 词袋模型,使用中心词周围的词来预测中心词,中心词是目标,周围词是输入
  • Skip-gram 根据中心词来预测周围词,中心词是输入,周围词是目标
  • 左图为CBOW 右图是Skip-gram

在这里插入图片描述

CBOW模型

连续词袋模型,根据上下文来预测目标单词的模型。使用上下文各词的词向量的均值作为拼接起来的词向量。

对小型的数据比较合适

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt

# 定义数据类型为浮点数
dtype = torch.FloatTensor 

# 语料库,包含训练模型的句子
sentences = ["i like dog", "i like cat", "i like animal",
             "dog cat animal", "apple cat dog like", "cat like fish",
             "dog like meat", "i like apple", "i hate apple",
             "i like movie book music apple", "dog like bark", "dog friend cat"]

# 将所有句子拼接为一个字符串并按空格分词
word_sequence = ' '.join(sentences).split()
# 获取词汇表中的所有唯一词
word_list = list(set(word_sequence))
# 创建词典,词汇表中的每个词都分配一个唯一的索引
word_dict = {
   w: i for i, w in enumerate(word_list)}

# 创建跳字模型的训练数据
cow = []  # 训练数据
for i in range(1, len(word_sequence) - 1):
    # 获取两个上下文词对应的id
    context = [word_dict[word_sequence[i - 1]], word_dict[word_sequence[i + 1]]]
    # 当前词对应的id
    target = word_dict[word_sequence[i]]

    # 将目标词与上下文词配对,添加到训练数据中
    cow.append([context,target])
# print(cow)
# 定义嵌入维度(嵌入向量的大小)为2
embedding_size = 2
# 每次训练的批量大小
batch_size = 5
voc_size = len(word_list)

# 定义CBOW模型
class CBOW(nn.Module):
    def __init__(self):
        super(CBOW, self).__init__()
        # 定义词嵌入矩阵W,随机初始化,大小为(voc_size, embedding_size)
        self.embed = nn.Embedding(voc_size,embedding_size)
        self.l = nn.Linear(embedding_size,voc_size)

    # 前向传播
    def forward(self, x):
        x = self.embed(x)
        x = torch.mean(x,dim=1) # 自动降维
        x = self.l(x)
        return x

# 创建模型实例
model = CBOW()

# 定义损失函数为交叉熵损失
criterion = nn.CrossEntropyLoss(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值