word2vec

一、参考资料

(1)斯坦福224n课堂笔记

https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1214/

(2)github代码

这个是skip-gram的

https://github.com/Adoni/word2vec_pytorch

二、自己复述

什么是word2vec?怎么训练的?有什么用?优缺点是什么?用输入-隐层,还是隐层到-输出表示词的embedding?用输入到隐层

 

word2vec是一个以无监督方式从大量文本中语料中学习词向量的一种模型。使得语义相似的词在高维向量空间内距离相近。

主要有CBOW和skip-gram两种模型,也就是从上下文预测中心词,和根据中心词预测上下文。认真看的是skip-gram模型。

模型结构类似一个3层神经网络,输入层/隐层和输出层,输入层的维度为词袋的维度,隐层的维度为词向量的维度,输出层的维度也为词袋的维度。模型的权重矩阵就可以当做是词的embedding。

模型怎么算是训练好了呢。假如中心词是a,上下文是b,输入a,输出层b对应的位置的概率最大。用交叉熵来量化,算这个概率的时候,用到softmax,要对词袋中的所有词都计算一遍e*,计算量非常大,使用负采样来优化,只更新部分负样本对应的权重参数。

负样本的选取是从词袋中随机抽取 ,词抽中的概率与词频有关。一般来说一个正样本抽5个负样本。

模型训练的正样本为真实的中心词与上下文对,负样本为随机抽的非真实的上下文。

 优点:简单,容易训练,不需要人工标注数据。有考虑上下文,相对于之前svd等完全上下文无关的效果较好

确定:词与向量是静态的一对一,没办法处理一词多意的情况

 

2.复习问题

负采样代码是怎么实现的:正(上下文)、负样本(随机取样)是怎么放进模型的;损失函数又是怎么算的;参数怎么更新的?

假设训练的batch_size是8,负采样个数是5

forward时,模型输入

pos_u:中心词u,torch.Size([8])

pos_v:上下文v,torch.Size([8])

neg_v:负采样,torch.Size([8,5])

posted @ 2022-04-17 23:26  HappierJoanne  阅读(81)  评论(0编辑  收藏  举报