与word2vec_Word2Vec

一、为什么要使用word2vec

  1. 可以降低维度

一般会使用one-hot编码,而这种编码额维度等于词汇量,所以在词汇量增大到上万维的时候,会发生维度灾难,其中one-hot编码中很多都是0,没有被利用。所以就提出使用Word2Vec,把维度降到百位。

2. 词语之间的相似性

one-hot任意两个词之间的相似性都是一样的,这显然不符合我们实际的规律。"我"和"你"的相似性显然高于"我"和"正确"的相似性。而word2vec经过训练,就可以体现出这种差距。

二、word2vec的两种实现方法

1.CBOW模型——给定上下文,预测目标词

输入context,共C个词,将输入的词

经过第一个隐藏层
之后相加,得到一个向量1xN,再乘以
,得到一个1xV大小的向量,经过softmax,得到每一个吃的向量。

c1e44c9f3239f4b24fa894180f77b3ab.png

2. skip-gram模型——给定目标词,预测上下文

给定目标词,1xV,乘以

,得到1xN,然后再乘以
,得到1xV,再做softmax,得到概率分布。最后的损失函数包含上下文个词(C)的损失。

98df9b62bb3c39ba3a0bc78a89caa1a3.png

三、简化模型

由于以上两种softmax太费时间,所以提出了两种优化方法。

1.Hierarchical Softmax

使用HuffmanTree来表示,最终的词汇(词汇量V)都是放在了叶子节点上,非叶子节点的个数为V-1个,最后只是需要log(V)次二分类便可达到终点,而每个词汇都有一个不一样的前缀。所以复杂度从V降为log(V),再加上高频词汇路径会更短,所以复杂度会更小,但是实现起来比较麻烦。

11fcfcddf46526fc48834efb9d318835.png

2. Negative Sampling

为了解决每次更新所有的节点,浪费时间,所以提出了这个方案。就是负采样一些样本,而后在这个里边选出目标词,这样就省去了很多的计算量。

四、对于输入是某个词,是否会影响到其他的词向量?比如输入是

,是否会影响
的词向量更新。

1. 假设

假设输入一段序列是

,输入词汇是
,one-hot编码是[0,1,0,0],而目标词汇是
,one-hot编码是[1,0,0,0],假设V=4,N=3,其中第一行为第一个词对应的词向量。

矩阵

矩阵

2. 输入序列

3. 经过隐藏层输出

这里使用损失函数使用交叉熵,对应

,这里y=[1,0,0,0],所以
,由于
对应的标签为0,所以只有
会影响参数的更新。

4. 更新

参数

其中

经过一次的运行,可以得到如下更新,对于
参数的更新类似。

5. 结论

对于W中的

的此项量由于其输入是0,所以不会更改。因此只会更改输入是
对应的词向量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值