引言
对于自然语言处理任务,我们不能直接使用纯文本字符串作为输出,而是需要将文本字符转化为连续值的向量。
词嵌入的主要思想是将文本转换为较低维度空间的矢量表示。对于这种转化后的向量有两个重要的要求:
较低维度空间:尽量降低编码词向量产生的稀疏性。
保证上下文相似性:为了使语言模型更好的预测文本的含义。
总的来说,词嵌入就是一种从文本语料库构建低维向量表示的方法,可以保留单词的上下文相似性。
介绍Word2Vec
现在我们知道它是什么,接下来讨论词嵌入如何工作。如果您曾遇到降维,那么您通常会使用无监督学习算法来实现降维。这是最著名的算法之一用于生成单词嵌入的方法:word2vec。
实际上,有两种实现word2vec的方式,即CBOW(连续词袋)和Skip-gram。
- CBOW:以上下文单词作为输入,预测目标单词(中心词)
- Skip-gram: 以目标单词作为输入,预测单词周围的上下文。
输入的单词使用one-hot编码。这将进入具有线性单元的隐藏层,然后进入softmax层进行预测。这里的想法是训练隐藏层权重矩阵,以找到我们单词的有效表示形式。该权重矩阵通常称为嵌入矩阵,可以作为查询表进行查询。
嵌入矩阵的大小为单词数乘以隐藏层中神经元的数量(嵌入大小)。嵌入的大小(即隐藏层神经元的个数,因此表示单词之间相似度的特征的数量)往往比词汇表中唯一单词的总数小得多。因此,如果您有10,000个单词和300个隐藏层神经元,则矩阵的大小将为10,000×300(因为输入编码为独热编码向量)。一旦计算出字向量,就可以对结果矩阵的相应行进行快速O(1)查找。最终每个单词都会产生一个与之关联的一个向量。
注意:所使用的嵌入大小设计是一个折衷:更多功能意味着额外的计算复杂性,因此运行时间更长,但是还允许更多的精细表示和可能更好的模型。
词嵌入的一个有趣特征是,由于它们是单词之间上下文相似性的数字表示,因此可以进行算术操作。经典示例是从“男人”中减去“国王”的“概念”,并添加“女人”的概念。答案将取决于您的训练方式,但您可能会看到其中一项最佳成绩是“女王”一词。这篇帖子解释了原因。
补充
另一个值得了解的单词嵌入算法是GloVe,它通过累加共现次数来工作略有不同(请参阅GloVe与word2vec有何不同?)
那么和深度学习有什么关系呢?
请记住,Word2vec只是两层浅层神经网络,因此它本身并不是深度学习的示例。但是,诸如Word2vec和GloVe之类的技术可以将原始文本转换成深层网络可以理解的数字形式,例如,使用带有词嵌入的递归神经网络。
- 作者: Chris Yan
- 链接: https:/Yansz.github.io/2019/01/10/词嵌入/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!