【word2vec学习笔记】1.什么是word2vec

作者: Panverson | 来源:发表于2019-10-12 17:30 被阅读0次

@author: Panverson

背景和诞生

在word2vec诞生之前,利用机器学习方法解决自然语言处理问题使,一般都是用one-hot编码(可以翻译成“独热编码”)去表征词语。one-hot编码是一种稀疏矩阵,计算时会带来很多麻烦,因为:

  1. 向量的维度会随着句子的词的数量类型增大而增大;
  2. 任意两个词之间都是孤立的,无法表示语义层面上词汇之间的相关信息.

PS:当然,在深度学习中涉及到矩阵相乘,有人会说one-hot编码算起来十分麻烦(有多少单词这个矩阵就有多少维数)。事实上,one-hot编码算起来一点也不麻烦,因为它是稀疏的,矩阵中只有一个数字是1,其他都是0。学过线代的都知道,这种相乘的计算其实是很方便的。


one-hot计算示意

传统的独热表示仅仅将词符号化,不包含任何语义信息。如何将语义融入到词表示中?Harris 在 1954 年提出的“分布假说”为这一设想提供了理论基础:上下文相似的词,其语义也相似。Firth 在 1957年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定。
所以我们可以将我们的任务拆解成两部分:

  1. 选择一种方式描述上下文;
  2. 选择一种“模型”刻画某个词(即“目标词”)与其上下文之间的关系。

什么意思呢?可以这么理解:
以CBOW模型为例,如果有一个句子“我今天听了周杰伦的歌”,在训练的时候,将“我今天听了周杰伦的”作为输入,预测出最后一个词是“歌”。
分布式表示的较大优点在于它具有非常强大的表征能力,比如n维向量每维k个值,可以表征k的n次方个概念。下图的神经网络语言模型(NNLM)采用的就是文本分布式表示。而词向量(word embedding)是训练该语言模型的一个附加产物,即图中的矩阵C。

文本的分布式表示

这个时候,word2vec就诞生了。其实,word2vec是词嵌入(word embedding)的一种方式。它将上文提到的one-hot的两个缺点解决了:

  1. 将vector每一个元素由整形改为浮点型,变为整个实数范围的表示。将原来稀疏的巨大维度压缩嵌入到一个更小维度的空间。
  2. 矩阵的每个维度都代表一定的语义。
    例如:
    对于训练好的几个词语,可能是这样的:


    word2vec

    可以得出这个结论:


    Man - King = Woman - Queen
    这就是word2vec的神奇所在。这个特性意味着Word2Vec所生成的词向量具有了语义推理能力。
    但很遗憾,我们自己去训练词向量的时候,其实很难复现这个结果出来(需要的计算资源实在是太庞大了)。幸运的是,对于小型的预料库,还是有一定的效果的。

两种模型

两个训练方案分别是CBOW和Skip-Gram,如图所示


两个模型

其中,CBOW通过上下文来预测当前词;而Skip-gram通过当前词预测上下文。至于原理,咱们下次再说。

参考资料

博客:
苏剑林. (2017, Apr 02). 《【不可思议的Word2Vec】 1.数学原理 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/4299
word2vec原始论文:

[1] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR, 2013.
[2] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. Distributed Representations of Words and Phrases and their Compositionality. In Proceedings of NIPS, 2013.

相关文章

网友评论

    本文标题:【word2vec学习笔记】1.什么是word2vec

    本文链接:https://www.haomeiwen.com/subject/lazqmctx.html