作为一个深度学习的爱好者,肯定对 Embedding不陌生,但是你知道Embedding为什么那么热门吗?想知道Embedding技术流行的原因就一定要深入讲解一下 Word2vec。它不仅让词向量在自然语言处理领域再度流行,更关键的是,自从 2013 年谷歌提出 Word2vec 一来,Embedding 技术从自然语言处理领域推广到广告、搜索、图像、推荐等几乎所有深度学习的领域,成了深度学习知识框架中不可或缺的技术点。Word2vec 作为经典的 Embedding 方法,熟悉它对于我们理解之后所有的 Embedding 相关技术和概念都是至关重要的。下面,详细讲一讲 Word2vec 的原理。
为什么我们需要对词进行编码,也就是所谓的词向量化?我们知道任何模型,其输入都需要为数值型,而在NLP中,大多数是文字为主,而文字是无法直接被模型进行使用。所以我们需要将文字进行编码,而编码就是给每一个字符一个向量来进行表示。
word2vec出来之前--one-hot编码在word2vec出来之前,我们常用的主要是one-hot编码的方法,也就是对于每一个单词,我们用在一个位置为1,其余位置为0的向量进行表示。而向量的维度就是我们单词量的大小。而向量的每一个位置,只能用来表示唯一的一个单词。
假设我们的有词库只有10个单词,分别是:今,天,是,你,我,他,买,水,果,家。这里我们分别用one hot encoding的方法来表示每一个词,那么有下面的结果:
看到对于每一个单词,我们用唯一的一个向量对它进行了表示。那么很显然这种表示方法至少有下面的一些缺陷
- 单词与单词间的距离都是没有差别的,“今”和“天”的距离和“今”和“果”的距离是一样的。
- 随着单词量的增加,向量的维度也随之增加,而且对于词库中没有的新词,都无无法有唯一的向量与之一一对应。
- 当单词量较大时,也即向量的维度过高时,势必加大了任何机器学习模型的计算量,降低了计算效率。
如果将单词量为N,用一个n维的向量来表示每一个单词,并且n远远小于N,那是不是可以解决上述问题呢?基于这个思想Word2vec出现了,迎来了各种Embedding方法和相关应用。
什么是 Word2vec?自从Embedding技术出现自然语言处理(NLP)领域打开新大门了,在NLP领域中出现了各种Embedding模型,如Sentence2Vec、Doc2Vec、Everything2Vec等等。较于传统NLP的高维、稀疏的表示法(One-hot Representation),Word2Vec训练出的词向量是低维、稠密的。Word2Vec利用了词的上下文信息,语义信息更加丰富。
Word2vec 是“word to vector”的简称,顾名思义,它是一个生成对“词”的向量表达的模型。用一句简单的话来总结,word2vec是用一个一层的神经网络(即CBOW)把one-hot形式的稀疏词向量映射称为一个n维(n一般为几百)的稠密向量的过程。
想要训练 Word2vec 模型,我们需要准备由一组句子组成的语料库。假设其中一个长度为 _T_ 的句子包含的词有,并且我们假定每个词都跟其相邻词的关系最密切。
Word2vec的两种模型结构CBOW和Skip-gram
根据模型假设的不同,Word2vec 模型分为两种形式,CBOW 模型(图左)和 Skipgram 模型(图右)。
CBOW 模型假设句子中每个词的选取都由相邻的词决定, 因此我们就看到 CBOW 模型的输入是 wt 周边的词,预测的输出是 wt。
Skip-gram 模型则正好相反,它假设句子中的每个词都决定了相邻词的选取,所以你可以看到 Skip-gram 模型的输入是 wt,预测的输出是 wt 周边的词。
在实践中,Skip-gram 模型的效果会更好一些。
下次给你们讲讲 Word2vec 的模型细节和实现方式。