词向量的意思就是通过一个数字组成的向量来表示一个词,这个向量的构成有很多种方法,如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个节点
对同样一个句子: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存在的问题
多义词问题
来源:CSDN
作者:银山词霸Claire
链接:https://blog.csdn.net/weixin_38493025/article/details/85245044