自然语言处理的一大步,应用Word2Vec模型学习单词向量表征

在常见的自然语言处理系统中,单词的编码是任意的,因此无法向系统提供各个符号之间可能存在关系的有用信息,还会带来数据稀疏问题。使用向量对词进行表示可以克服其中的一些障碍。本文通过推理、范例及数学公式介绍了从原始文本中学习「词嵌入」的模型 Word2Vec。该模型通常用在预处理阶段,可以提高计算效率。

让我们用推理、范例及数学公式来介绍 Word2Vec

引言

Word2Vec 模型用于学习被称为「词嵌入」的单词向量表示,通常用在预处理阶段,之后,学习到的词向量可以被输入到一个判别模型(通常是一个 RNN)中,进而生成预测或被用于处理其他有趣的任务。

为什么要学习词的嵌入表示

图像和音频处理系统与丰富的高维数据集一起工作,其处理的图像数据被编码为各个原始像素强度的向量,因此所有信息都被编码在数据中,从而可以很容易地建立起系统中各种实体之间的关系(比如猫和狗)。

但是,在常见的自然语言处理系统中,单词被视为离散的原子符号,因此」猫」可以被表示为 Id537 而」狗」可以被表示为 Id143。这些编码是任意的,因而无法向系统提供各个符号之间可能存在关系的有用信息。这意味着该模型在处理关于「狗」的数据时无法充分利用关于「猫」的知识(例如它们都是动物、宠物、有四只脚等)。

将单词表示为独特、离散的序列号还会导致数据稀疏问题,这通常意味着我们可能需要更多数据才能成功地训练统计模型,而使用向量对词进行表示可以克服其中的一些障碍。

举例来说:

传统的自然语言处理方法涉及到许多语言学本身的知识。理解诸如音素和语素之类的术语是相当基础和必要的,因为有许多语言学分支致力于这样的研究。我们来看看传统的自然语言处理如何试图理解下面的单词。

假设我们的目标是收集关于这个词的一些信息(表征它的情感,找到它的定义等)。利用我们的语言学知识可以将这个词分解成 3 个部分。

深度学习最基本的层次是表示学习。在这里,我们将通过相同方法在大规模数据集上为单词构建向量表示。

词向量

我们把每一个单词表示为一个 d 维的向量。在这里 d=6。我们希望根据这个句子,为每一个单独的词构建它的向量表示。

现在让我们来思考一下如何填充这些值。我们希望这些值能够一定程度上表示这个单词和它的上下文、含义或语义信息。一种方法是构建共现矩阵。

共现矩阵包含了语料库(或训练集)中每一个单词同出现在它后一个单词的统计信息。下表是上面所示句子的共现矩阵。

通过这个简单的矩阵,我们能够获得非常有用的信息。例如,「love」和「like」这两个词对名词(NLP 和 dogs)的计数都是 1。他们对「I」的计数也是 1,这表明这些词很可能是某种动词。对于远比一个句子更大的数据集,可以预料的是这种相似性会体现得更加清晰,因为「like」、」love」和其他具有相似上下文的同义词将开始具有相似的向量表示。

这是一个好的开始,但应该注意每个单词的维度将随着语料库的大小线性增加。如果我们有一百万词(在自然语言处理任务中并不算很多),我们将会得到一个一百万乘一百万的非常稀疏(有很多 0)的矩阵,存储效率很低。后来人们在探索更好的词向量表示上取得了很多进展。其中最著名的是 Word2Vec。

正式介绍 

向量空间模型(VSM)表示(嵌入)连续向量空间中的单词,其中语义上相似的单词被映射到相邻的点(「都嵌在彼此附近」)。向量空间模型自然语言处理中有着悠久、丰富的历史,但是所有方法都以某种方式依赖于分布假说,该假说认为出现在相同语境中的词语具有相似的语义。基于这一原则的方法可以被分为两类:

 1. 基于计数的方法(例如隐性语义分析)

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

二者的区别在于:

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

预测模型直接尝试根据学习到的近邻单词的小密集嵌入向量(考虑模型的参数)来预测单词。

Word2vec 是一种用于从原始文本中学习词嵌入的模型,它有很高的计算效率。它主要有两种实现方式,一种是连续词袋模型(CBOW),另一种是 Skip-Gram 模型。这两种方式在算法上是相似的,唯一的差别在于 CBOW 从源上下文单词中预测目标单词,而 Skip-Gram 则恰恰相反,它根据目标单词预测源上下文单词。

接下来,我们将重点讨论 skip-gram 模型。

应用到的数学知识

神经概率语言模型一般使用最大似然原则进行训练,其目标是要最大化在给定前面的单词 h(对于「history」)时的下一个单词 wt(对于「target」)的 softmax 概率

其中 score(wt, h) 计算目标词 wt 与上下文 h 的相容性(常用点积)。

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

这为语言建模提供了一个合适的标准化概率模型

我们可以用另一种形式来更好地展示这种方法,它可以清晰地展示在训练过程中为了最大化目标函数而不断改变的选择变量(或参数)。

我们的目标是找到可以用于预测当前单词的周围词汇的向量表示。我们尤其希望最大化我们在整个语料库上的平均对数概率:

这个等式的主要含义是,在当前单词的一定窗口范围 c 内出现的单词 wt 存在一定的概率 p。这个概率同当前词 wt 和我们设定的参数 theta 相关。我们希望设定的参数 theta 可以最大化整个语料库的上述概率。

基本参数化:Softmax 模型

基本的 skip-gram 模型定义了经过 softmax 函数计算的概率 p。如果我们的词汇表中有 N 个词,而我们希望学习的嵌入向量的维度为 k,那么我们可以设定 wi 是 N 维的 ont-hot 向量,theta 是一个 N×K 的嵌入矩阵,从而有:

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

在架构方面,它是一个简单的三层神经网络

 1. 使用一个 3 层神经网络(1 个输入层+ 1 个隐藏层+ 1 个输出层)。

 2. 输入一个词,并训练模型来预测它的相邻词汇。

 3. 删除最后一层(输出层)并保留输入和隐藏层。

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

限制这种参数化方法在大规模语料中的应用的一个主要缺点是计算的效率。具体来说,为了计算单次的正向传播过程,我们需要对整个语料库的词汇进行统计,以计算 softmax 函数。这对于大型数据集来说是非常昂贵的,所以我们希望能够在这个模型和计算效率之间找到一个平衡。

提高计算效率

对于 word2vec 中的特征学习,我们不需要完整的概率模型。CBOW 和 skip-gram 模型是使用二元分类目标(逻辑回归)来训练的,其目标是要在相同的上下文中将真实目标词语(wt)与 k 个伪(噪音)词语 -w 进行区分。

当模型给真实单词分配更高的概率并且将低概率分配给噪音词时,我们可以得到最大化的目标函数。从技术上来讲,我们一般称之为负采样,它提出的更新近似于 softmax 函数更新的极限。但是从计算角度来看,它拥有很高的效率,因为这样一来损失函数的复杂度仅仅依赖于我们选择的噪音词的数量(k)而不是词汇表(V)中的所有单词。这可以大大提高训练的速度。像 Tensorflow 这样的软件包使用了一种非常相似的损失函数,称为噪声对比估计(NCE)损失。

SKIP-GRAM 模型的直观感受

以这个数据集为例:

the quick brown fox jumped over the lazy dog

我们首先构建一个包含所有单词和它们的上下文的数据集。现在,让我们保持原始定义,并将「上下文」定义为目标单词左侧和右侧的窗口单词。设定窗口大小为 1,我们可以得到(上下文,目标)对形式的数据集。

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

回想一下,skip-gram 会颠倒上下文和目标,试图根据目标词预测每个上下文单词,因此任务变为从」quick」预测」the」和」brown」以及从」brown」预测」quick」和」fox」等。

这样一来我们的数据集可以整理为(输入,输出)对,如下所示:

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

目标函数在定义上依赖于整个数据集,但是我们通常使用随机梯度下降(SGD)方法来对模型进行优化,即每次只使用一个例子(或者每次使用一小批数据,每批的数量通常在 16 到 512 之间)。接下来让我们看一下每一步的训练过程。

让我们想象一下上述例子的训练过程。这里的目标是从 the 预测 quick。我们从一个噪声分布 P(w)(通常是单字符分布)中选取 num_noise 个噪声样本(单字符分布假设每个单词的出现与所有其他单词无关,即我们可以将生成过程看作一个按序列掷骰子的过程)

为了简单起见,我们设定 num_noise = 1,我们选择 sheep 作为一个噪声样本。接下来我们计算这对观察到的和有噪声的例子的损失,即在」t」时刻的目标函数变成:

我们的目标是要对嵌入参数进行更新

 theta 用来最大化这个目标函数。我们通过导出与之相关的损失梯度来实现这一目标。

然后,我们通过向梯度方向迈出一小步来更新嵌入。当我们在整个训练集上重复进行这个过程时,可以对每个单词产生「移动」嵌入向量的效果,直到模型成功地区分真实单词和噪音单词为止。

我们可以通过将它们向下投影到 2 维来可视化学习到的向量。当我们观察这些可视化时,很明显这些向量捕获到了一些关于单词的语义信息以及词与词之间的关系,这在实际中是非常有用的。


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

工程Word2Vec词嵌入自然语言处理
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

判别模型技术

在机器学习领域,有一种分类方法将模型分为判别模型和生成模型(generative model)两种。 判别模型是一种对未知数据y与已知数据x之间关系进行建模的方法,是一种基于概率理论的方法。已知输入变量x,判别模型通过构建条件概率P(y|x)分布预测结果,或试图直接从输入x的空间学习映射到标签{0,1}(如感知器算法)的函数。生成模型则是考虑x与y之间的联合分布。 在实际应用中判别模型非常常见,如:逻辑回归(logistic regression),支持向量机(support vector machine), 提升方法(Boosting),条件随机场(conditional random fields),神经网络(neural network),随机森林(random forests)典型的生成模型则包括:高斯混合模型(Gaussian Mixture Model),隐马尔科夫模型(hidden markov model),简单贝叶斯(naive Bayes)等。不难看出两者的区别。

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

向量空间模型技术

向量空间模型是一个把文本文件表示为标识符(比如索引)向量的代数模型。它应用于信息过滤、信息检索、索引以及相关排序。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

词袋模型技术

词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。最近词袋模型也被应用在电脑视觉领域。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

word2vec技术

Word2vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。 训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层。 Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
暂无评论
暂无评论~