词嵌入的主要思想是将文本转换为数字。
这种转换是必要的,因为许多机器学习算法(包括深度网络)需要它们的输入是连续的向量,他们并不能处理纯文本字符串。
因此,像词嵌入这样的自然语言建模技术被用来将单词或短语从词汇表映射到一个由数字组成的类似向量。除了可以通过学习算法进行处理外,这种向量还有两个重要的优点:
- 降维——这是一种更有效的方式
- 与上下文类似——这是一种更好的表示方式
我们知道Bag of Words方法可以产生一个非常大、非常稀疏的一个one hot编码,其中矩阵的长度就是词汇表的大小。词嵌入的目的是创造一个更低维的向量表示。叫词向量(word vectors)。
词向量用于语义分析,从文本中提取信息,然后用来做自然语言理解。一个语言模型能够预测文本信息,就需要知道上下文单词的相似性。例如,我们想找到水果的单词(比如苹果、橘子),那我们就很可能在采摘、吃或者榨汁附近找到它们,而不会找到飞机这个词。
通过使用词嵌入来保持这些相似的特征,因此文中经常出现的单词在向量空间中也会非常接近。要了解这个为什么有效,请查看The amazing power of word vectors.
所以什么是词嵌入呢?它是指:构建一个低维的向量来表示语料库中的文本,它保留了单词的上下文相似性。
Word2Vec
现在我们知道了他是什么了,那么他是怎么工作的呢?如果你之前遇到过降维,你就会知道这通常都是使用无监督学习来完成的。这就是最著名的词嵌入方法word2vec使用的方法。
有两种方法可以实现word2vec,CBOW(continuous Bag-Of-Words)和Skip-gram。
在CBOW中,我们有一个围绕目标词的窗口,然后考虑它周围的单词(上下文)。我们把这些词作为输入,输入到我们的网络中,然后输入让他预测目标单词。
Skip-gram则恰恰相反,你有一个目标单词,你试着预测这个单词周围的单词,也就是预测这个单词周围的上下文。
输入字作为一个one-hot编码编码向量,然后通过一个线性的隐藏层,然后进入一个softamx进行预测。这里的思想是训练隐藏层的权重矩阵来找到单词的有效表示。这个权重通常称为嵌入矩阵,可以作为查询表的查询。
Xin Rong创建了一个非常整洁的可视化系统,这个系统展示了词嵌入是怎样训练的,并给出了一个非常棒的演讲。
嵌入矩阵的大小是由隐藏层神经元个数(嵌入大小)决定的。因此,如果有10000个单词和300个隐藏单元,那么矩阵的大小将是10000*300(因为我们使用one-hot编码作为输入)。计算后,我们将得到一个词向量:
于是,每个单词都有一个自己的向量,因此命名:Word2Vec。
嵌入大小(既隐藏层大小)往往比词汇表要小很多(嵌入大小通常只有几百,而词汇表要数万个)。所以使用的词嵌入大小是一种权衡:更大的词嵌入意味着更高的计算复杂度,也就是意味着更长的运行时间,但是能够获取到更微妙地表示和更好的模型。
词嵌入有一个有趣的特征,因为它表示的是词上下文之间的相似度,因此他们可以进行算数运算。一个经典的例子就是男人减去国王加上女人等于女王。
另一种指的提到的嵌入方法是GloVe,他通过累计共同出现的次数,和Word2Vec有略微的不同。
word2vec的主要观点是,我们可以要求在单词向量的基本算法下保留语义信息,例如king – man + woman = queen。(如果你问我的话,我会说它非常优雅、才华横溢)Mikolov等人通过 CBOW 和 skip-gram模型(word2vec有两种类型)实现了这一点,这些模型被训练成预测人们在现实世界中如何直觉地进行类比。在这种方法下,重要的是两个单词之间的距离,语料库的内在统计特性(这是大多数早期方法的关键)最终会丢失。
在斯坦福大学的NLP小组,他们喜欢类似的保存,但不喜欢失去透明度和直接考虑语料库的词出现统计,他们认为这是问题的根本。他们假设,通过确定一种方法来实现线性算法下的类比保存,仅使用语料库的这些基本统计特性作为输入,他们将在准确性和可解释性方面都有所提高。 GloVe 证明他们成功了。
在实践中,主要的区别是 GloVe 嵌入在某些数据集上工作得更好,而word2vec嵌入在其他数据集上工作得更好。它们都能很好地捕捉类比的语义,这让我们,在词汇语义上有了很大的进步。
那么深度学习是怎么来的呢?
请记住,Word2Vec是一个两层的神经网络,因此它本身并不是深度学习的一个例子。但是像Word2Vec和GloVe这样的技术可以将原始文本转换为数字形式,比如使用带有词嵌入的RNN网络。
综上所述,词嵌入的目的就是将单词转换成数字,然后向深度学习这样可以吸收和处理这些数据,从而形成对自然语言的理解。
词嵌入只是一种语言,只不过它像数字一样。
0 条评论