深度学习和自然语言处理:诠释词向量的魅力

简介: 本次的主题是“word2vec”,主要是总结了Google公司的Mikolov等人关于词向量的工作(以及你可以用它做什么)。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

以下为译文:

今天的帖子,我收集的材料源于五篇论文。本次的主题是“word2vec”,主要是总结了Google公司的Mikolov等人关于词向量的工作(以及你可以用它做什么)。论文分别是:

·       Efficient Estimation of Word Representations in Vector Space – Mikolov et al. 2013

·       Distributed Representations of Words and Phrases and their Compositionality – Mikolov et al. 2013

·       Linguistic Regularities in Continuous Space Word Representations – Mikolov et al. 2013

·       word2vec Parameter Learning Explained – Rong 2014

·       word2vec Explained: Deriving Mikolov et al’s Negative Sampling Word-Embedding Method – Goldberg and Levy 2014

第一篇论文中,我们学习到了词向量方面的连续Bag-of-Words模型和连续 Skip-gram模型(我们马上将谈到词向量)。第二篇文章中,我们充分展示了词向量的魅力,并优化了Skip-gram模型(层次softmax和负采样)。另外,还将词向量的概念和性质推广到短语中。第三篇文章描述了基于词向量的向量推理,并介绍了著名的“King – Man + Woman = Queen”的例子。最后的两篇论文是其他人对Milokov论文的一些思想进行了深入的解释。

可以在Google Code上找到word2vec的实现。

什么是词向量

从某种意义上来讲,词向量只是简单的权重向量。在简单的一位有效编码方式下,向量中每一个元素都关联着词库中的一个单词,指定词的编码只是简单的将向量中相应元素设置为1,其他的元素设置成0。

假设我们的词汇只有五个词:King, Queen, Man, Woman, 和 Child。 我们可以将单词“Queen”编码为:

word2vec-one-hot.png?w=1132

如果使用这样的编码,除了等量的运算,我们无法对词向量做比较。

在word2vec中,词的分布式表征被使用。在向量维数比较大(比如1000)的情况下,每一个词都可以用在元素的分布式权重来表示。因此,一个词的表示形式在向量中的所有元素中传播,每一个元素都对许多词的定义有影响,而不是简单的元素和词之间的一对一映射。如果我标记了假象词向量的维度(当然,在算法中没有这样的预分配标签),它可能看起来是这样的:

word2vec-distributed-representation.png?

这样的向量来以某种抽象的方式来表示一个词的“意义”,接下来我们可以看到,只是通过简单地检查一个大的语料库,它可能以一个令人惊讶的方式学习词向量并能够捕捉到的词汇之间的关系。当然,我们也可以把向量作为神经网络的输入。

词向量推理

事实上我们发现,被学习的词表征用一种非常简单的方式捕捉有意义的语法和语义规律。具体来说,对于有特定关系的词组,语法规律可以看作固定的向量偏移。举个例子,我们把单词i的向量表示为xi,如果我们关注单复数的关系,我们可以发现xapple–xapples≈xcar–xcars, xfamily–xfamilies ≈ xcar–xcars等这样的规律。更令人惊讶的是,各种语义关系也是一样,正如SemEval 2012年测量关系相似性的工作所揭示的那样。

向量非常适用于解决类比的问题,比如a对b来说正如c对什么这种形式的问题。举个例子,使用基于余弦距离的向量偏移可以解决男人对女人来说正如叔叔对什么(婶婶)的问题。

举个例子,下图表示性别关系的三对词的矢量偏移:

         word2vec-gender-relation.png?w=600

下图表示单复数关系:

        word2vec-plural-relation.png?w=1132

这类型的向量可以回答“King – Man + Woman = ?”的问题并得出结果“Queen”。在没有额外提供信息的情况下,仅仅是通过浏览大量的语义资料(正如我们即将见到的)获取这样的知识是非常令人激动的。

稍微令人惊讶的是,词表征的相似性超过了语法规律。它仅仅是对词向量的简单运算,就能得出如下面例子的vector(“King”) – vector(“Man”) + vector(“Woman”)接近“Queue”的词表征的结果。

 King, Man, Queen, 和Woman的向量如下所示:

word2vec-king-queen-vectors.png?w=1132

向量合成King – Man + Woman = ?的结果:

word2vec-king-queen-composition.png?w=11

这里还有一些用同样技术的实现结果:

word2vec-ee-table-8.png?w=1132

        这里有国家-首都关系的一个2维的主成分分析预测:

word2vec-dr-fig-2.png?w=1132

        下面是一些类似于“a对b正如c对什么?”这类问题的例子:

word2vec-dr-table-2.png?w=1132

        我们也可以使用向量元素之外的元素智能来解决诸如“德国+航线”的问题,通过合成向量来获得最终的结果:

        word2vec-dr-table-5.png?w=1132

有这样语意关系的词向量可以用来改进很多现有的自然语言处理应用比如机器翻译、信息检索和问答系统,甚至会催生出新的创意和应用。

        下图展示了基于语法和语义的词关系测试,使用一个skip-gram训练模型得到的640维的词向量可以获得55%的语义准确率和59%的语法准确率。

        word2vec-efficient-estimation-table-3.pn

学习词向量

Mikolov等人并不是第一个使用词的向量表示形式的,但是他们确实减小了计算的复杂性,使在大量数据上学习高维词向量成为可行的。举个例子,“我们已经使用了谷歌新闻语料库进行训练的单词向量。该语料库包含6B词组。我们已经限制了词汇量的100万个最频繁的单词……”。

        神经网络语言模型(前馈或递归)的复杂性来自于非线性隐层(S)。

        尽管这就是神经网络的魅力所在,我们决定探索更简单的模型,也许精度并不如神经网络,但也可能是更有效的训练更大量数据。

        两种新的架构被提出:Continuous Bag-of-Words model和 Continuous Skip-gram model.我们先看Continuous Bag-of-Words(CBOW)。

        考虑这样一段散文“The recently introduced continuous Skip-gram model is an efficient method for learning high-quality distributed vector representations that capture a large number of precises syntatic and semantic word relationships.”,想象这段文字上有一个滑动窗口,包括当前的词和前后的四个词,具体如下图所示。

        word2vec-context-words.png?w=1132

        上下文词组成了输入层,每一个词都用一位有效编码的方式来表示。如果词汇量是V,这些词都变成V维向量,相应的词被设置成1,其余的为0。下图表示单隐层和一个输出层。

        word2vec-cbow.png?w=1132

        训练的目标是最大限度地观察实际输出词(焦点词)在给定输入上下文且考虑权重的的条件概率。在我们的例子中,给出了输入(“一个”,“有效”,“方法”,“为”,“高”,“质量”,“分布式”,“向量”)我们要最大限度地获得“学习”作为输出的概率。

       由于我们的输入向量都是一位有效编码的方式来表示,和权重矩阵W1相乘就相当于简单的选择一行。

       word2vec-linear-activitation.png?w=1132

        如果输入了C个词向量,隐层的激活函数其实就是用来统计矩阵中的热点行,然后处以C来取平均值。

        这意味着,隐藏层单元的链接(激活)函数就是简单的线性运算(直接将权重和作为下一层的输入)。

       从隐层到输出层,我们用一个权重矩阵W2来为每一个词计算得分,同样,可以使用softmax来计算词的后验分布。

       skip-gram和CBOW正好相反,它使用单一的聚焦词作为输入,目标上下文词作为输出,正如下图所示:

       word2vec-skip-gram.png?w=1132

       正如之前提到的,隐层的激活函数只是权重矩阵W1 对应行的简单统计。在输出层,我们输出C个多项式分布。训练的最终目标就是减小输出层所有上下文词的预测错误率。举个例子,如果输入“learn”,我们可能得到在输出层得到“an”, “efficient”, “method”, “for”, “high”, “quality”, “distributed”,“vector”。

优化

在一个训练实例中,为每一个词输出词向量代价是非常大的……

首先从直觉上来看,对每次训练实例中更新的输出向量进行一个数量上的限制是解决这个问题的办法。但是我们提供了两种优雅的方法,一个是基于层次的柔性最大传递函数,另一个就是采样。

Hierarchical softmax 使用二叉树来表示词汇表中的所有词,每一个词在树中表示为叶子。对于每一个叶,从根到叶存在一个独特的路径,这条路径是用来估计由叶表示的单词的概率。“我们用从根到叶的随机游走的概率来定义这样的概率。”

word2vec-hierarchical-softmax.png?w=1132

这样的好处是不用对V个节点一一评估来获得神经网络中的概率分布,而是只用评估 log2(V)个节点。在这里我们使用二叉哈夫曼树,因为它给高频词汇赋予更短的编码,这样一来,训练过程就变快了。

负采样的想法很简单,就是每一次迭代我们只更新样本的输出词。目标输出词应该被留在样本中,并且应该被更新,我们还要加入一些(非目标)词作为负样本。“在采样过程中,概率分布是必要的,概率分布选择的灵活性比较大, 一般都根据经验来选择”。

Milokov等人也使用简单的二次采样方向来计量训练集合中比率和频次的不平衡性。(举个例子,“in”,“the”, 和“a”比不常出现的词提供更少的信息)。训练集中的每一个词都有一个丢弃概率,可以用下面的公式表示:

f(wi) 表示词 wi 出现的频率t 是一个阈值,一般来说取10-5附近的数。

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

文章原标题《The amazing power of word vectors》,作者:Adrian Colyer

文章为简译,更为详细的内容,请查看原文


相关文章
|
5小时前
|
机器学习/深度学习 自然语言处理
利用深度学习技术改进自然语言处理中的命名实体识别
命名实体识别(Named Entity Recognition, NER)在自然语言处理领域扮演着重要角色,但传统方法在处理复杂语境和多样化实体时存在局限性。本文将探讨如何利用深度学习技术,特别是基于预训练模型的方法,来改进命名实体识别,提高其在现实场景中的性能和适用性。
|
5小时前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与挑战
【5月更文挑战第11天】 随着人工智能技术的飞速发展,深度学习已经成为了自然语言处理(NLP)领域的核心动力。本文旨在探讨深度学习技术在NLP中的创新应用,并分析当前面临的主要挑战和潜在的解决途径。我们将重点讨论循环神经网络(RNN)、卷积神经网络(CNN)以及最新的变换器模型(Transformers),这些模型在文本分类、机器翻译和语音识别等任务中取得了显著成效。文章还将涉及深度学习模型的可解释性问题、数据依赖性和计算资源要求等关键议题,为未来的研究方向提供参考。
|
5小时前
|
机器学习/深度学习 编解码 自然语言处理
如何评价深度学习在自然语言处理、计算机视觉等领域的应用成果?
【5月更文挑战第3天】如何评价深度学习在自然语言处理、计算机视觉等领域的应用成果?
31 6
|
5小时前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在图像识别中的应用与挑战探索机器学习中的自然语言处理技术
【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经成为计算机视觉领域的核心动力。本文将探讨深度学习在图像识别任务中的关键技术、应用实例以及面临的主要挑战。我们将重点讨论卷积神经网络(CNN)的架构优化、数据增强技术以及迁移学习的策略,并通过具体案例分析其在医疗影像、自动驾驶和面部识别等领域的应用成效。同时,我们也将指出当前模型泛化能力不足、对抗性攻击以及算力资源需求等挑战,并提出潜在的解决方向。 【4月更文挑战第30天】 在人工智能领域,自然语言处理(NLP)是赋予机器理解和响应人类语言能力的关键技术。本文将深入探讨NLP的发展历程、核心技术及其在不同领域的应用案例。我们将从
|
5小时前
|
机器学习/深度学习 自然语言处理 PyTorch
【Python 机器学习专栏】自然语言处理中的深度学习应用
【4月更文挑战第30天】本文探讨了深度学习在自然语言处理(NLP)中的应用,包括文本分类、情感分析和机器翻译等任务。深度学习的优势在于自动特征学习、强大的表达能力和处理大规模数据的能力。常见模型如RNN、LSTM、GRU、CNN和注意力机制在NLP中发挥作用。Python的TensorFlow、PyTorch、NLTK和SpaCy等工具支持NLP研究。然而,数据稀缺、模型解释性和计算资源需求高等挑战仍待解决。随着技术进步,未来深度学习将进一步推动NLP发展,实现更智能的语言交互。
|
5小时前
|
机器学习/深度学习 自然语言处理 算法
PyTorch与NLP:自然语言处理的深度学习实战
随着人工智能技术的快速发展,自然语言处理(NLP)作为其中的重要分支,日益受到人们的关注。PyTorch作为一款强大的深度学习框架,为NLP研究者提供了强大的工具。本文将介绍如何使用PyTorch进行自然语言处理的深度学习实践,包括基础概念、模型搭建、数据处理和实际应用等方面。
|
5小时前
|
机器学习/深度学习 数据采集 自然语言处理
利用深度学习技术实现自然语言处理中的情感分析
情感分析在自然语言处理中扮演着重要角色,它能够帮助我们理解用户的情感态度,从而为产品改进和营销决策提供有力支持。本文将介绍如何利用深度学习技术,特别是循环神经网络和卷积神经网络,来实现情感分析任务。我们将讨论数据预处理、模型构建和训练过程,以及如何评估模型性能,帮助读者了解并应用情感分析在实际项目中。
|
5小时前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理方面的应用
【4月更文挑战第8天】
36 2
|
5小时前
|
机器学习/深度学习 人工智能 自然语言处理
利用深度学习进行自然语言处理的最新进展
自然语言处理(NLP)是人工智能领域的一个重要分支,近年来,深度学习技术的发展为NLP带来了革命性的进步。本文将介绍最新的深度学习技术在NLP领域的应用,包括文本分类、情感分析、语义理解等方面的进展和实践经验。
|
5小时前
|
机器学习/深度学习 计算机视觉
深度学习在图像识别中的应用与挑战
【5月更文挑战第13天】 随着计算机视觉和人工智能技术的飞速发展,深度学习已成为推动图像识别领域进步的核心动力。本文将探讨深度学习技术在图像识别中的应用,并分析其面临的主要挑战。我们将从卷积神经网络(CNN)的基础出发,探索其在图像分类、目标检测和语义分割等方面的应用实例,并针对数据偏差、模型泛化能力、计算资源需求等关键问题展开讨论。通过案例分析和性能比较,我们旨在为读者提供一个关于深度学习在图像识别中应用的全面视角,同时指出未来的研究方向和技术趋势。