Word2Vec教程-Skip-Gram模型

简介: 这篇教程主要讲述了Word2Vec中的skip gram模型,主要目的是避免普遍的浅层介绍和抽象观点,而是更加详细地探索Word2Vec。现在我们开始研究skip gram模型吧

原文:Word2Vec Tutorial - The Skip-Gram Model


这篇教程主要讲述了Word2Vec中的skip gram模型,主要目的是避免普遍的浅层介绍和抽象观点,而是更加详细地探索Word2Vec。现在我们开始研究skip gram模型吧


The Model · 模型


skip-gram实际上是非常简单的神经网络模型形式;我认为任何所有微小的调整和变化都会使解释困扰。


我们进一步看,你可能在机器学习使用Word2Vec时用到下面一个技巧:使用一个隐藏层的简单神经网络来执行某个任务,但是接下来我们将不会在训练模型任务时使用那样的神经网络,而是仅仅是使用它来学习隐层神经网络的权重,在Word2Vec中指的是“词向量”。


另一个你可能在无监督学习中看到这种技巧,在无监督学习中,你训练一个自动编码器来将输入向量“压缩”到隐藏层,然后将它“解压”到的原始输出层。在训练完它后,你舍去输出层(解压步骤),只使用隐藏层的数据——这是一个不需要标记训练数据就能学习好图像特征的技巧。


The Fake Task · “伪”任务


现在我们需要讨论一下这种“伪”任务,我们要构建并运行神经网络,然后我们间接地获得到的后面所需的词向量。


我们要训练skip-gram神经网络做以下任务:给出一个句子中间的某个单词(输入词),观察输入单词旁边的单词并随机选择一个。而我们训练的神经网络将告诉我们词汇表中每个单词被选作为“邻近单词”(nearby word)的概率。


这里所说的“邻近”其实与算法中的一个“窗口大小”(window size)参数有关。一般窗口大小为5,意思是中心词前后的5个单词(一共10个单词)。


输出概率与输入单词与每个词汇表单词邻近程度相关。举例来说,训练的神经网络的输入单词为“苏联”,那么像“联盟”和“俄罗斯”的输出概率将会远大于像“西瓜”和“袋鼠”不相关单词的概率。


我们将通过“喂养”在训练文档中找到的“单词对”(word pair)来训练神经网络。下面的例子显示了一些训练样本(单词对),句子为“The quick brown fox jumps over the lazy dog.”,窗口大小为2,蓝色突出显示的是输入单词。


54.png


神经网络将会从显示的单词对的次数学习统计信息。例如,神经网络可能会得到更多的训练样本(“苏联”,“联盟”)而不是(“苏联”,“北美野人”)。当模型训练结束时,当你将“苏联”作为输入时,然后输入为“联盟”或“俄罗斯”的概率比输出为“野人”的概率更高。


Model Details · 关于模型的更多细节


思考下,这些单词应该怎么被表示哪?


首先,我们不能够将单词作为一个字符串输入到神经网络,所以我们需要一种方式去表示单词。为了达到目的,我们从训练文档中创建一个单词词汇表,假如我们现在有一个具有10000个不同单词的词汇表。


我们将输入单词比如“蚂蚁”(ants)表示为一个one-hot向量,这种向量有10000个元素(词汇表中的每个单词都被表示为这种形式)。1 的位置对应该词在词典中的位置,其他全为0。


下面是我们神经网络的结构:


55.png


在隐藏层中没有使用激活函数,而在输出层使用了softmax,我们稍后在讨论这个原因。


The Hidden Layer · 隐藏层


假如,我们要学习有关词向量的300个特征(比如词性,语义等等),那么隐藏层结构将会表示为一个权重矩阵:10000行(代表着词汇表中的每个单词)和300列(代表每一个隐层的神经单元)。


300个特征是谷歌基于谷歌新闻数据集训练的模型(你可以在 这里下载)。特征的数量是一个你调试应用的“超参数”(尝试不同的值来产生更好的结果)。

下面是权重矩阵,矩阵的每一行代表了我们词汇表中的一个单词。


56.png


现在你可能反问自己,-“one hot向量几乎全部是0,那么它的作用是什么呢?”如果你将一个1×10000 one hot向量乘以10000×300的矩阵,那么就会有效地选中矩阵中与1对应的行。下面是一个例子:


57.png


这就意味着模型中的隐藏层其实运作为一个单词查找表,隐藏层的输出为输入单词的“词向量”。


The Output Layer · 输出层


隐藏层产生的1×300的词向量将会传送到输出层,这个输出层是一个softmax regressio分类器,其要领就是每一个输出神经单元将会产生一个介于0到1的输出,并且所有输出值的和为1。


每个输出单元有一个权重矩阵,然后与来自隐藏层的词向量相乘,然后对结果运用exp(x)函数。最后,为了将输入结果加起来为1,我们将结果除以10000个输出节点的所有之和。


下面是单词“car”输出单元的计算。


58.png


注意:神经网络不会学习输入单词相对应的输出单词的偏移量,也不会学习一个单词前后不同单词组合的概率。为了理解这一点,我们假设在训练语料中,每次单词“York”的出现,前面会有“NEW”。这也就是说根据训练语料,单词“NEW”出现在“York”的概率是100%。然而,我们取出“York”附近的10个单词并随机取出一个单词,这个单词为“New”的概率不是100%;你可能会取到附近的其他单词


Intuition · 结论


到这里,我们来进一步了解下skip gram model。如果有两个不同的单词非常相似的“上下文”(就是,出现在这个两个单词周围的词语非常相似),对于这两个单词模型会输出非常相似的结果。如果两个单词的词向量非常相似,那么模型预测输出来的上下文也将是非常相似。


什么是所谓的两个单词有非常相似的上下文?我猜你想到近义词,比如“intelligent”和“smart”。或者是单词是非常相关的,比如“transmission”和“engine”


Next Up · 后续


你可能注意到 skip-gram 神经网络将包含一个非常大的weights向量。例如,一个带有300个特征,含有10000词的词汇表,那么在隐藏层和输出增将会产生3百万维的weights向量。在如此巨大的数据集训练代价将会是非常高的,接下来我们将会讲下word2vec作者优化的措施


Other Resources · 其他资源


【Word2Vec Resources】

Word2Vec教程-Negative Sampling 负采样


相关文章
|
28天前
|
机器学习/深度学习 数据采集 自然语言处理
使用 Word2Vec 模型进行情感分析
使用Word2Vec模型进行情感分析包括:数据预处理、训练Word2Vec模型、构建特征向量、情感分析及模型评估与优化。通过这些步骤,结合分类器预测文本情感,提升模型性能和准确性。
|
3月前
|
机器学习/深度学习 自然语言处理 Python
|
7月前
|
机器学习/深度学习 自然语言处理 C++
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
42 2
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
|
7月前
|
机器学习/深度学习 自然语言处理 ice
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
56 2
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
|
7月前
|
机器学习/深度学习 自然语言处理 算法
Coggle 30 Days of ML(23年7月)任务六:训练FastText、Word2Vec词向量
Coggle 30 Days of ML(23年7月)任务六:训练FastText、Word2Vec词向量
|
机器学习/深度学习 自然语言处理 算法
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
|
机器学习/深度学习 自然语言处理 运维
Word2Vec:一种基于预测的方法
Word2Vec:一种基于预测的方法
302 0
|
机器学习/深度学习 存储 数据采集
[Paddle2.0学习之第四步](上)词向量之skip-gram
[Paddle2.0学习之第四步](上)词向量之skip-gram
[Paddle2.0学习之第四步](上)词向量之skip-gram
|
机器学习/深度学习 存储 人工智能
文本深度表示模型——word2vec&doc2vec词向量模型
NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。
文本深度表示模型——word2vec&doc2vec词向量模型
|
自然语言处理 算法 Python
Gensim实现Word2Vec的Skip-Gram模型
gensim是一个开源的Python库,用于便捷高效地提取文档中的语义话题。它用于处理原始的、非结构化的电子文本(“纯文本”),gensim中的一些算法,如 Latent Semantic Analysis(潜在语义分析)、 Latent Dirichlet Allocation(潜在Dirichlet分布)、Random Projections(随机预测)通过检查训练文档中的共现实体来挖掘语义结构。
299 0