词向量(从one-hot到word2vec)

点点圈 提交于 2019-12-04 21:01:00

词向量的意思就是通过一个数字组成的向量来表示一个词,这个向量的构成有很多种方法,如one-hot编码、基于共现矩阵的方式、word2vec、动态词向量ELMo等。

一、one-hot向量

在这里插入图片描述在这里插入图片描述
优势:简单易懂、稀疏存储

不足:维度灾难词汇鸿沟(向量之间都是孤立的)

二、基于共现矩阵的方式

在这里插入图片描述
在这里插入图片描述
上述矩阵是一个n*n的对称矩阵X,矩阵维数随着词典数量n的增大而增大,可以使用奇异值分解SVD将矩阵维度降低。但是仍存在问题:

  • 矩阵X的维度经常改变
  • 由于大部分词并不共现而导致的稀疏性
  • 矩阵维度过高带来的高计算复杂度

三、基于神经网络的方式(word embedding):word2vec

在这里插入图片描述
Word2Vec通过Embedding层将One-Hot Encoder转化为低维度的连续值(稠密向量),并且其中意思相近的词将被映射到向量空间中相近的位置。 从而解决了One-Hot Encoder词汇鸿沟和维度灾难的问题。

1.Embedding层

Embedding层(输入层到隐藏层)是以one hot为输入、中间层节点数为词向量维数的全连接层,这个全连接层的参数就是我们要获取的词向量表!
在这里插入图片描述

2.Word2vec模型概述

word2vec其实就是简化版的NN,它事实上训练了一个语言模型,通过语言模型来获取词向量。所谓语言模型,就是通过前n个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是词向量表。

记词典大小为V
输入层:one-hot vector,V个节点
隐藏层:无激活函数,D个节点(D<V)
模型训练后输入层和隐藏层之间权重即为我们要获取的词向量
输出层:softmax回归输出输入词的邻近词的概率分布,V个节点
神经网络语言模型word2vec
在这里插入图片描述
在这里插入图片描述
对同样一个句子:Hangzhou is a nice city。我们要构造一个语境与目标词汇的映射关系,其实就是input与label的关系。 假设滑窗尺寸为1 ,那么

CBOW的样本形式为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice
Skip-Gram的样本形式为:(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)

3.模型求解:负采样方法

本文我们只对负采样方法negative sampling展开介绍

3.1 NCE Loss提出背景

Softmax是用来实现多类分类问题常见的损失函数。但如果类别特别多,softmax的效率就是个问题了。比如在word2vec里,每个词都是一个类别,在这种情况下可能有100万类。那么每次都得预测一个样本在100万类上属于每个类的概率,这个效率是非常低的。

3.2 NCE的主要思想

  • 对于每一个样本,除了他自己的label,同时采样出N个其他的label
  • 从而我们只需要计算样本在这N+1个label上的概率,而不用计算样本在所有label上的概率
  • 而样本在每个label上的概率最终用了Logistic的损失函数
  • NCE本质上是把多分类问题转化为2分类问题
    在这里插入图片描述

3.3 NCE负采样策略

带权采样:高频词选为负样本的概率大,低频词概率小在这里插入图片描述

4.word2vec之连续词袋模型CBOW

根据当前词的上下文环境来预测当前词
在这里插入图片描述
在这里插入图片描述

5.word2vec之跳字模型skip-gram

根据当前词预测上下文

可以理解为是将CBOW模型中的context(w)拆成一个个来考虑
在这里插入图片描述

6.word embedding存在的问题

多义词问题

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!