国王-男人+女人=皇后,背后的词向量工作原理-阿里云开发者社区

开发者社区> 【方向】> 正文

国王-男人+女人=皇后,背后的词向量工作原理

简介: 本文对著名的词向量公式 king-man+woman=queen背后的原理进行了解释。通过文章我们可以一窥词向量算法在机器学习领域中对拼音文字语言处理上的出色结果
+关注继续查看

更多深度文章,请关注: https://yq.aliyun.com/cloud

作者介绍:PiotrMigdał - 一个数据科学自由职业者,拥有量子物理学博士学位,位于波兰华沙,积极参与资优教育,开发量子游戏,并在deepsense.io担任数据科学教师。目前专注于深度学习。


介绍

word2vec是将单词转换为向量的算法,该算法使得具有相似含义的单词表示为相互靠近的向量。此外,它能让我们使用向量算法来处理类比,例如着名等式 king - man + woman = queen

本文我将尝试解释它的工作原理,并且会特别强调向量差异的意义,同时尽量避免过于技术层面的细节。

如果你希望自己探索这方面的内容,这里是我学生Julia Bazińska的互动探索,她现在是华沙大学计算机科学的一名新生:

995765c623d0776867f9d010e4ea7eb8c459a144

计数,巧合和含义

有时一个看似简单的方法却能给出了意想不到的结果。 事实证明,仅仅从单词组合,而不是所有的语法和语境,可以提供我们获知一个单词的意义。 让我们看看这句话:

A small, fluffy roosety climbed a tree.


什么是roosety 我会说,像松鼠(squirrel)一样的小动物,因为这两个词可以很容易互换。 这种推理称为分布假设,可以归纳为:

理解一个词要看它的结伴关系 - 约翰·鲁伯特·弗斯

如果我们要训练计算机,最简单的方法就是让它只识别单词对。令 P(a|b) 为单词b在给定间隔内,存在单词a的条件概率(假设给定间隔不超过2个单词)。如果对于每个单词w都有

P(w|a)=P(w|b)

然后我们就能说单词a与b相似。换句话说,如果我们有了这个等式,不管是否有单词a或b,所有其他单词都以相同的频率出现。

即使简单的单词数统计,比较文本的出处,我们可以得到有趣的结果。例如: 金属乐的歌词中的单词统计(“哭泣”,“永恒”或“灰烬”是非常常见的,而“特别”或“大致”则不是),见重金属音乐和自然语言处理(Heavy Metal and Natural Language Processing)。

查看单词共同出现的现象可以给我们提供很多的信息。 例如,我的一个项目,TagOverflow,其目的是只基于Stack Overflow标签来发现程序的结构。 其中,我的关注点在于点互信息(PMI)的研究,这也引出了我们下一个话题。

770c8e7930d405e1b77deb054378dfd2d99e847e

点互信息和压缩技术

压缩器:将认知视为压缩。 压缩感知,近似矩阵分解 机器学习中的文化


原则上,我们可以计算每个词对的P(a|b)  但是即使只有一个10万单词量的小词典(记住,我们需要保留所有单词的偏差,正确被使用的单词和那些虽然不在官方的字典中,但正在使用中的单词)跟踪其所有的单词对,我们就需要8千兆字节的空间。

为此我们通常不使用条件概率,而是点互信息(PMI,其定义为:

6b163f106122d69df57e083e3ab86385eb8a248d

它的直接解释是,我们得到一个单词对的概率要比随机得到他们要高出多少。 对数使得更容易处理以不同数量级的频率出现的词。 我们可以将PMI近似为标量积:

2ceb41f58775845a0b960d6fc21353c3ef5786d0

其中d6c1311cd3cc5090ab9bd61c5fea4da7bd85276250-300维的向量。

一开始你可能会好奇,所有的单词竟然可以被压缩到一个更小维度的空间。 其实有一些单词是可以被互换(例如John->Peter)的,并且一般有很多类似的结构。

事实上,这种有损压缩可能也会有它自己的优势,因为我们通过这样方式可能会发现某种模式,而不只是记住每个单词对。 例如,在用于电影评级的推荐系统中,每个评级就是两个向量(电影的内容和用户的偏好)标量积的近似值。 这种方法可以用于预测尚未看到的电影的分数,请参阅使用TensorFlow的矩阵因子分解 - Katherine Bailey


单词相似性和矢量接近性

让我们从简单的开始 - 显示向量空间中的单词相似性。 条件 P(w|a) = P(w|b) 等效于

  PMI(w,a)=PMI(w,b)

通过等式两边除以 P(w) 并取对数。 那么用向量表示PMI后,我们就得到了

2ab0dc21363da31e07c05cd786eedf7ca9a2db7a

如果我们需要它作用于每个909c6688bba8e3e7e619e8af404bc7d50dfe094b,则就有了

7d3c31ffb8cac59592eeecd985e4882fdf5a7d04

当然,在实际情况下,我们都不会得到完全相等的结果,只是两个单词是彼此近似的。 在这个空间中接近的单词通常是同义词(例如快乐和高兴),反义词(例如好和恶)或其他容易互换的词(例如黄色和蓝色)。 如果你想亲自试试,就看看这个word2sense短语搜索

我发现更有趣的是,单词形成一个线性空间。 特别地,零向量表示完全非特征单词,与随机机会级别的每隔一个单字出现(因为其每个单词的标量积为零,所以它的PMI也是零)。

这就是为什么对于向量相似性,人们经常使用余弦距离的原因,即

7655ad6e48dbbde2049122ce2e3136b805730358

也就是说,它强调给定词与其他单词共存的方向,而不是这种效应的强度。


类比和线性空间

如果我们想要进行单词比较(由a得到b是因为由A得到B),可以认为对于每个词w,我们有条件概率比的等式

d084d898ddf5c75b4976d1c99af799b539bc500e

当然,该等式看起来像(其实就是)一个有问题的假设,但它仍然是我们可以用条件概率达到的最佳结果。 我不会试图为这个方法辩护,但我会使用一些与其等同的其他方式。

例如,如果dog(狗) 之于puppy (小狗),就像cat (猫)之于 kitten(小猫),我们就会期望如果dog(狗)和cat(猫)有着紧密的共生关系(可能出现频率不一),那么puppy(小狗)和kitten(小猫)也有着同样的共生因素。

通过提出词类比的比率,我们隐含地假设单词的出现概率可以相对于单词不同维度的因式分解。 对于上面的例子,那就是:

c074d292adc82c9357b70c0af14ae0a12c682d3f

特别的:

9321fb125158be0345092482389244a44b8f6ce3

条件概率比的等式如何转换为单词向量? 我们将它改写为互信息(同上取P(w)对数)

c4dca61ba46ccb44ee810663ebfcdfea91a6f03e

就等同于

26077271fdc607c0cbf4c90404d9e22e17d10c9f

同时,如果我们希望它作用于任意单词w,这个向量差需要为零。

我们可以使用类比来表示单词意思(如用向量改变性别),语法(如改变时态)或其他类比(如城市与其邮政编码)。 似乎类比不仅是单方面的技巧 - 我们可能可以一直使用它们来考虑问题,详见:

·George Lakoff, Mark Johnson, Metaphors We Live By (1980)

2717d823aecba7f64661c6da81e9e2287705ba68


向量差和向量投影

词向量的差,就比如
75024ea771b49df7e90f0b05ba6c23a988c607eb
并不是词向量本身。 然而,有趣的是在坐标轴上词向量的投影。 我们可以看到其投影
8beeb89e17ff56348af64979780930d0b851589c
就是一个单词在不同上下文中的相对出现。

记住,当我们想看一个单词的常见方面时,更平均两个向量而不是取其总和是更自然的。 虽然人们可以互换使用它,它只工作,因为余弦距离忽略绝对向量长度。 所以,对于一个性别中立的代词使用

5629bc55b710775a72631949b7484ff4db540b00

而不是他们的和。详见Word Spectrum 和 Word Associations 这两个项目

一起来试试!

如果你想亲手探索一下词向量,我推荐可以先看看JuliaBazińskaWord2viz 你可以在几个预定义图中进行选择,或从头开始(选择单词和其投影)。 同时我也注意到谷歌研究也发布了一个类似工具:可视化高维数据的工具 - 谷歌研究博客(和其演示版本:嵌入投影机)。

如果要使用预训练向量,请参阅Stanford GloVeGoogle word2vec的相关文档。 以及正在开发的样例github.com/lamyiowce/word2viz

如果你想在自己的数据集里进行训练,那就用Pythongensim库人类主题建模 通常需要一些预处理,特别是看看Matthew Honnibal的Sense2vecspaCyGensim

如果你想从头开始,最方便的方法是从Vector Representations of Words - TensorFlow Tutorial开始

如果你想了解更多词向量是如何工作的,我推荐以下资料:

e7794cace797f4d2abfac36685493a1fe9d2e713

Julia Bazińska在华沙大学图书馆楼顶

技术

这里我解释了把单词转换成向量的算法。 每个方法都需要更多的调整。 以下是一些技术方面的解释:

  • word2vec不是单一的算法
  • 虽然单词和上下文本质上是相同的(两者都是由单词组成),但需要区别对待它们(考虑不同的单词频率)
  • 有两类词向量(每个单词有两个向量,一个用于单词,另一个用于上下文)
  • 因为任何实际的数据集将包含一些单词组PMI,在大多数情况下,我们使用正点互信息(Positive PMI)
  • 通常需要预处理(例如,捕捉诸如机器学习的短语,或者区分具有两个单独含义的单词)
  • 意义线性空间是一个有争议的概念
  • 所有结果都是基于我们输入的数据而计算得到的,并不是客观事实; 所以很容易得到一些奇怪的结果,比如:doctor - man + woman = nurse.

如需进一步的阅读,我建议以下参考资料:

· How does word2vec work? 作者: Omer Levy

· Neural Word Embeddings as Implicit Matrix Factorization作者: Omer Levy

· Skipgram isn’t Matrix Factorisation 作者:Benjamin Wilson

· Language bias and black sheep

· Language necessarily contains human biases, and so will machines trained on language corpora 作者:Arvind Narayanan

· Word Embeddings: Explaining their properties作者:Sanjeev Arora

· Issues in evaluating semantic spaces using word analogies,作者:Tal Linzen, 


背景故事


我在word2vec和相关技术领域的研究:

•矩阵分解,

•点互信息,

•概念隐喻,

•模仿人类认知的简单技术。


我也热衷于了解更多关于这方面的问题,同时我也正在辅导Julia Bazińska在波兰儿童基金会资助的华沙大学DELab两个星期暑期实习期间。 参见我的博客文章:

Helping exceptionally gifted children in Poland

D3.js workshop at ICM for KFnrD


感谢


本文受益于Grzegorz UriaszSarah Martin的相关研究。 我想特别感谢Levy Omer关于指向词向量算法的弱点(和阴影假设)的研究成果。

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

以上为译文

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

文章原标题《king - man + woman is queen; but why?》,译者:friday_012

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
国王-男人+女人=皇后,背后的词向量工作原理
本文对著名的词向量公式 king-man+woman=queen背后的原理进行了解释。通过文章我们可以一窥词向量算法在机器学习领域中对拼音文字语言处理上的出色结果
9070 0
【Android 开发入门】我为什么要在Android找工作越来越难的时候开始学习它
首先,Android是不是真的找工作越来越难呢?这个可能是大家最关心的。这个受大的经济环境以及行业发展前景的影响,同时也和个人因素有关。 2016-08-26 近期一方面是所在的公司招聘Java开发人员很难招到合适的,投简历的人很少;而另一方面,经常听身边的人说Android、iOS方面找工作不好找,特别是没什么经验的,经验比较少的!说是不好找,但在我家所在的吉林省省会长春,会Unity3D+Maya都可以拿到手一万+,而且是之前做Maya方面的,今年刚转Unity3D;同样是长春,c#有几年工作经验的工资也可以达到8K+,而且不好招人,这让我不禁想回老家那边去发展了。
1596 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4398 0
springcloud Alibaba 微服务 flowable 工作流 自定义表单 vue.js前后分离
springcloud Alibaba 微服务 flowable 工作流 自定义表单 vue.js前后分离
23 0
系统学下POWERSHELL吧,工作当中可能用得到呢。不能像以前那样修修改改了。
把环境,编辑器,版本这些都弄清楚,说不好还能把FCL类库弄懂个大概???:)   [DateTime]::IsLeapYear(2008) $result = [DateTime]"06/21/2008" - [DateTime]::Now $result.
646 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
403 0
+关注
【方向】
欢迎各位对内容方向及质量提需求,我们尽量满足,将国外优质的内容呈现给大家!
696
文章
5
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载