农企新闻网

Word2Vec —— 深度学习的一小步,自然言语处置的一大步

发布者:何同东
导读雷锋网按:本文为雷锋网(大众号:雷锋网)字幕组编译的技术博客,原标题 A、Word2Vec — a baby step in Deep Learning but a giant leap towards Natural Language Processing,作者为机器学习工程师 Suvro Banerjee翻译 | 于志鹏 林骁    校正 | 程思婕   整理  |  孔令双原文链接:http

雷锋网按:本文为雷锋网 (大众号:雷锋网) 字幕组编译的技术博客,原标题 A、Word2Vec — a baby step in Deep Learning but a giant leap towards Natural Language Processing,作者为机器学习工程师 Suvro Banerjee

翻译 | 于志鹏 林骁    校正 | 程思婕   整理  |  孔令双

原文链接:

https://towardsdatascience.com/word2vec-a-baby-step-in-deep-learning-but-a-giant-leap-towards-natural-language-processing-40fe4e8602ba

引言

Word2Vec 模型用来学习单词的向量表示,我们称为「词嵌入」。通常作为一种预处置步骤,在这之后词向量被送入判别模型(通常是 RNN)生成预测后果和执行各种风趣的操作。 

为什么要学习 word2vec

图像和声响处置零碎所需丰厚、高维的数据集,按各原始图像的像素强度被编码为向量的方式,一切信息都被编码在这样的数据中,因而就可以在零碎中树立各种实体(如 cat 和 dog)之间的关系。

但是,传统的自然言语处置零碎通常将单词视为团圆的原子符号,所以 cat 可以被表示为 Id537,dog 可以表示为 Id143。这些编码是恣意的并且不能向零碎提供任何关于各个原子符号之间关系的信息。这意味着,模型在处置 dogs 的数据时不能与模型曾经学习过的 cats 的特征联络起来(如它们都有是植物,都有四条腿,都是宠物等等)。

将单词表示为独一的、团圆的 ID 还会进一步招致数据稀疏,还意味着我们能够需求更多的数据才干成功训练统计模型。运用向量表示就可以防止这些成绩。

让我们来看一个例子 

传统的 NLP 办法触及许多言语学范畴知识,要求你了解诸如「音素」及「词素」等术语,由于言语学中有很多分类,音素学和词素学是其中的两种。让我们来看看传统的 NLP 办法如何尝试了解上面的单词。 

假定我们要获取关于单词的一些信息(诸如它所表达的心情、它的定义等),运用言语学的办法我们将词分为 3 个局部。即前缀、后缀、词干。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

比方,我们晓得「un」前缀表示相反或否认的意思,我们也晓得「ed」可以指定表示单词的时态(过来时)。我们可以从「interest」的词干中很容易的推断出整个词的含义和表达的情感. 是不是十分复杂?但是,当思索一切不同的前后AI已经渗透到了生活中的方方面面。在智能交通领域,人工智能技术也正在发挥作用。缀时需求十分娴熟的言语学家来了解一切能够组合的含义。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

深度学习,实质上就是表示学习。我们将要采用一些办法经过大数据集的训练来创立单词的表示。

词向量

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

假定我们用一个 d 维向量表示每一个单词,假定 d=6。我们想要为句子中的每个不反复单词创立单词词向量。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

如今来思索一下如何赋值,我们希望可以用某种方式来表示这个单词和它的上下文、含义、语义。一种办法是创立一个共生矩阵。 

共生矩阵是这样一种矩阵,它包括这个词在一切语料库(或训练集)中和一切其他词组合呈现的次数。我们来看一下共生矩阵的样子。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

经过下面这个复杂的共生矩阵的例子,我们可以取得很多相当有用的信息。比方,我们留意到「love」和「like」这两个词向量中都含有若干个 1,这是对他们所接名词(NLP 和 dogs)的记数。对「I」的记数也含若干个1,因而标明这个单词一定是某个动词。当处置多句的大数据集时,你可以想象这种类似性会变得愈加明晰,比方「like」、「love」和其他同义词将具有类似的词向量,由于他们在类似的语境中。 

目前,虽然我们有了一个很好的末尾,但是我们也要留意到每个单词的维度将随着语料库的增大而线性添加。假如我们有 100 万个单词 (在 NLP 的规范中并不是很多),我们将会有一个 100 万*100 万大小的矩阵,并且是十分稀疏的(少量 0 元素)。在存储效率方面这个显然不是最好的方案。在寻觅表示这些词向量的最佳办法中有很多改良。其中最著名的就是 Word2Vec 。

正式引见 

向量空间模型(VSMs)在延续向量空间中表示(嵌入) 单词,其中语义类似的单词被映射到临近点(嵌入在彼此左近)。VSMs 在 NLP 开展中有着悠久的历史,但都依赖于散布式假定,该假定指出,呈现在相反语境中的单词具有类似语义。应用这一准绳的办法可以分为两类:

  1. 1.基于记数的办法(例如:潜在语义的剖析);

  2. 2.预测办法(例如:神经概率言语模型)

他们的区别是--

用计数的办法计算某个词在大型文本语料库中与其相邻词汇共同呈现的频率的统计数据,然后将这些统计数据的每个词映射为小且密集的向量。  

预测模型直接尝试依据学习的小密集嵌入向量(思索模型的参数)来预测来自其邻居的单词。

 Word2vec 是一种特别无效的计算预测模型,用于从原始文本中学习单词嵌入。它有两种方式,即延续字袋模型(CBOW)和 the Skip-Gram 模型。在算法上,这些模型是类似的,除了 CBOW 从源上下文单词中预测目的单词,而 the skip-Gram 相反并预测来自目的单词源上下文的单词。

在接上去的讨论中,我们将重点讨论 skipg 模型。

数学运用  

传统上,神经概率言语模型运用最大似然原理停止训练,以 softmax 函数的方式使给定后面的单词 h(「history」)的下一个单词 wt(「target」)的概率最大化。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

应用 score(wt, h) 计算目的词 wt 与上下文 h 的兼容性(通常运用点积运算)。

我们经过在训练集上最大化它的对数似然来训练这个模型。所以,我们最大化以下损失函数。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

这为言语建模提供了一个适宜的规范化概率模型。  

这个相反的论点也可以用略微不同的公式来表示,它清楚地显示了为了使这个目的最大化而改动的变量(或参数)。  

我们的目的是找到一些词汇表示,这些词汇可以用于预测以后单词的四周词汇。特别是,我们希望最大化我们整个语料库的均匀对数概率:

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

这个方程从实质上说,有一些概率 p 察看以后单词 wt 的大小为 c 的窗口内的特定单词。这个概率取决于以后单词 wt 和参数θ的一些设置(由我们的模型确定)。我们希望设置这些参数θ,以便在整个语料库中这个概率最大化。

根本参数化:Softmax 模型 

根本 skip-gram 模型定义了经过 softmax 函数的概率 p,正如我们后面看到的那样。假如我们以为 wi 维数为 N 和θ的单热编码矢量,并且它是一个 N×K 矩阵嵌入矩阵,这表示我们的词汇表中有 N 个词,而我们学习的嵌入具有维数 K,那么我们可以定义 -


值得留意的是,在学习之后,矩阵theta可以被以为是嵌入查找矩阵。

在架构方面,它是一个复杂的三层神经网络。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

  1. 搭建三层网络构造(一个输出层,一个隐藏层,一个输入层)

  2. 传入一个单词,并让它训练其左近的单词

  3. 移除输入层,但保存输出层和隐藏层

  4. 接着,从词汇表中输出一个单词。隐藏层给出的输入是输出单词的「单词嵌入」

这种参数化有一个次要的缺陷,限制了它在大型的语料库中的用途。详细来说,我们留意到为了计算我们模型的单个正向经过,我们必需对整个语料库词汇停止总结,以评价 softmax 函数。关于大型数据集来说这是十分朴素的,所以我们为了计算效率思索这个模型的替代近似。

进步计算效率

关于 word2vec 中的特征学习,我们不需求完好的概率模型。CBOW 和 skip-gram 模型是运用二分类目的(逻辑回归)来训练的,以在相反的上下文中将真实目的词语(wt)与 k 个虚数(搅扰)词语 w 停止区分。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

在数学上,该操作是对每个对象停止最大化。


当模型将高概率分配给真虚词,并将低概率分配给乐音词,这个目的被最大化。 从技术上讲,这被称为负采样,它提出的更早先似于极限中softmax函数的更新。 但是在计算上它特别有吸引力,由于计算损失函数如今只能依据我们选择的乐音词的数量(k)而不是词汇表(V)中的一切单词, 这使它训练速度更快。 像Tensorflow这样的软件包运用了一种十分类似的损失函数,称为噪声比照估量(NCE)损失。

Skip-gram 模型的直观感受

作为一个示例,我们需求思索数据集-

the quick brown fox jumped over the lazy dog

我们首先构成一个单词数据集和它们呈现的上下文。如今,让我们坚持运用 the vanilla 定义,并将「上下文」辨别将单词窗口定义为目的单词左侧和右侧。运用窗口大小为 1,我们就有了 (context, target) 对的数据集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram 会颠倒上下文和目的,并试图从目的词中预测每个上下文单词,因而义务将从「quick」,「quick」和「fox」中预测「the」和「brown」」。  

因而我们的数据集成为(input,output),如下所示:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目的函数是在整个数据集上定义的,但我们通常运用随机梯度下降(SGD)对每个示例(或 batch_size 示例的「minibatch」停止优化,其中通常为 16 <= batch_size <= 512)停止优化。让我们来看一下这个进程的一个步骤。

让我们想象一下,在训练步骤中,我们察看下面的第一个训练案例,其中的目的是疾速预测。我们经过从一些噪声散布(通常是单字符散布)中选择 num_noise 噪声(比照)例子的数目来选择(该单元假定每个词语的呈现与一切其他词语的呈现有关,也就是说我们可以将生成进程看作是一个骰子序列滚动序列 P(w)。

为了复杂起见,我们假定 num_noise = 1,我们选择 sheep 作为一个搅扰的例子。接上去我们计算这对察看到的和有噪声例子的损失,即在工夫步骤「t」的目的变成 -


我们的目的是对嵌入参数θ停止更新以最大化该目的函数。 我们经过推导关于嵌入参数θ的损失梯度来做到这一点。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

然后,我们经过向梯度方向的挪动来更新嵌入参数。当这个进程在整个训练集上反复时,这会对每个单词发生「挪动」嵌入向量的效果,直到模型成功地域分真实单词和乐音单词为止。

我们可以经过将它们向下投影到 3 维来可视化学习向量。当我们察看这些可视化变量时,很分明,这些向量捕捉了一些关于单词的语义信息以及它们之间的关系,在实践使用上时十分有用的。

参考材料

  1. Word2Vec的Tensorflow完成

  2. 词语和短语的散布式表征及其组合性 - Tomas Mikolov,Ilya Sutskever,Kai Chen,Greg Corrado 和 Jeffrey Dean 的研讨论文

  3. Aneesh Joshi对word2vec的适用指南

  4. Adit Deshpande自然言语的评论

  5. Rohan Verma的言语模型

雷锋网字幕组编译。

Word2Vec —— 深度学习的一小步,自然语言处理的一大步

雷锋网版权文章,未经受权制止转载。概况见。