图嵌入前篇之词嵌入模型 Wrod2Vec

文章介绍了Word2Vec模型,特别是Skip-gram模型在词向量表示中的应用。通过神经网络语言模型NNLM作为背景,详细阐述了Skip-gram的前向传播和反向传播过程,并给出了使用Pytorch实现Skip-gram模型的代码示例。
摘要由CSDN通过智能技术生成

词向量模型 Word2Vec

Skip-gram 模型是图嵌入模型 Random Walk 中要使用到的模型,因此先学习 Word2Vec

神经网络语言模型 NNLM

目标:根据给定的词序列,预测下一个会出现的词,如给定 “他”,“是”,“一个”,预测下一个会出现的词的概率

模型输入

设定语料库中词的个数是 v,对每个词进行 one-hot 编码,得到每个词对应的编码是 1×v维的;设需要得到的词向量为k 维,构建一个 v×k 维的矩阵 C

假设给定 x 个词,预测下一个出现的词,那么就先根据这 x 个词的独热编码乘以 C,得到对应的 x 个词向量

模型训练
  • 前向传播:对这 x 个词向量根据模型的w加权求和,并施加激活函数 tanh,再 Softmax 求得概率

  • 反向传播:更新矩阵 C、w

引入 Word2Vec

NNLM 模型的目的是为了预测下一个要出现的词,所得到的词向量只是副产品;而 Word2Vec 是以得到词向量为目的所训练的网络模型,根据上下文进行训练

  • CBOW:给定上下文预测这个词
  • Skip-gram:给定词预测上下文

设每个词对应的词向量矩阵 C,输入的多个词的 one-hot 向量拼接为 x,输入到隐藏层的权重矩阵为w,偏置bias为 b,则前向传播表示为为:softmax(w1(xC) + b)

因为这里目的是为了训练得到词向量,所以没有加激活函数(不需要非线性的变换、加快训练速度)

Skip-gram Pytorch实现

import torch
from torch import nn

class SkipGram(nn.Module):
    def __init__(self, vocabulary_size, embedding_size):
        super().__init__()

        self.vocabulary_size = vocabulary_size
        self.embedding_size = embedding_size

        self.embedding = nn.Embedding(self.vocabulary_size, self.embedding_size) 
        self.output = nn.Linear(self.embedding_size, self.vocabulary_size) 
        self.log_softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):    
        x = self.embedding(x)  
        x = self.output(x)     
        log_ps = self.log_softmax(x)  
        return log_ps
        ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值