词向量源码解析:(1)词向量(词表示)简单介绍

来源:互联网 发布:阿迪达斯淘宝 编辑:程序博客网 时间:2024/05/16 18:57

  在未来的一段时间内,我会全面细致的解析包括word2vec, GloVe, hyperwords, context2vec, ngram2vec等一系列词向量(词表示)工具包。用合理的向量去表示单词是自然语言处理(NLP)领域中很经典很基本的一个任务。 一份高质量的词向量或是词表示是很多任务取得更好表现的关键。通过上面提到的工具包,我们可以得到高质量的词向量(词表示);也可以根据我们的需求,得到不同性质的词向量(词表示)。

  这篇文章中首先简单介绍一下词向量(词表示)。在后面我会统一用词向量来代替词向量(词表示)。这里简单给词向量一个定义,词向量就是要用某个固定维度的向量去表示单词。举一个简单的例子,在字典用我们会用几千个常用词去解释每个单词的意思,而词向量中,我们用(比如)100维的实数向量去表示字典中的单词。换一种说法,我们要把字典中每一个单词映射到某个维度(比如100维)的空间当中去,所以我们也可以把词向量叫做空间向量模型(vector space model)。我们之所以要把单词变成向量是因为我们需要把自然语言抽象成数学中的某个概念(这里是向量),这样才能对其进图1,通过word2vec训练的词向量经过降维在二维空间中的状况,图片来源 http://www.cnblogs.com/Newsteinwell/p/6034747.html行建模。换一种更具体直白的说法,之所以要把单词变成固定维度的向量,是因为绝大多数的机器学习(machine learning)模型需要固定维度的向量作为输入。

  那究竟用什么向量去表示单词才是合理的呢?一个符合直觉的想法是,相似的单词应该有相似的词向量,比如dog和cat这两个单词,他们的意思很相近,那么他们的词向量也应该很相似,或者说他们的词向量在空间中位置很接近,距离很短。再比如eat和train这两个单词,他们的词向量应该距离比较远。图1展示了通过word2vec训练的词向量经过降维在二维空间中的状况。可以看到相似的单词在空间中的距离也很接近


图1,通过word2vec训练的词向量经过降维在二维空间中的状况,图片来源 http://www.cnblogs.com/Newsteinwell/p/6034747.html


  我们应该怎样做才能使得相似的单词有相似的词向量呢?几乎有所的词向量模型都利用了语言学中这样的一个规律:相似的单词有着相似的上下文。这个规律叫distributional hypothesis。还是以dog和cat两个单词作为例子,他们是比较相似的单词,他们在语料中的上下文也很相近。他们的上下文中一般都会出现关于动物,宠物的单词或是短语。所以,目前主流的词向量模型都是通过单词在语料中的上下文来表示单词。我们后面介绍的工具包中包括了各种各样的词向量模型。他们表面上千差万别,但是本质都很相似,都是对单词与其上下文的关系进行建模,从而得到高质量的单词表示。

  在仔细分析各种词向量工具包的源码之前,我们再看一下得到的词向量能做什么。上面已经提到,词向量会把相似的单词映射到相似的空间中去。所以我们可以用词向量找到和某个单词相近的单词。比如输入beijing,会返回shanghai等单词。除此之外,用word2vec训练得到的词向量还有另一个比较优美的性质,词类比(word analogy)。我们点开questions-words.txt,第一个例子就是Athens Greece Baghdad Iraq。在词类比任务中,我们需要通过前三个单词,例如Athens Greece Baghdad,推导出第四个单词Iraq。推导的过程就是雅典和希腊是首都的关系,巴格达和谁是首都的关系?答案是伊拉克。要做好这个任务,就要求我们还需要从词向量中得到单词之间关系的信息,比如在上个例子中,这个关系就是‘首都’。当年word2vec出现以后受到大家广泛关注,一个可能的原因就是大家惊讶于词向量能在analogy数据集上取得这么好的效果,原来词向量还有这样神奇的性质。

  那词向量为何有能力做好analogy这个任务呢?很多人都问过我,在word2vec中用vec('wife') + vec('king') - vec('queen')去寻找husband这个单词,这种加加减减的操作看上去没有什么道理呀。我这里先给一个例子帮助大家直观的理解,后面的文章还会再更仔细的去解释。我们以king,queen这两个单词为例。假设语料中king周围出现的单词主要和‘皇室’这个主题以及‘男性’这个主题有关。queen周围出现的单词主要和‘皇室’这个主题和‘女性’这个主题有关。我们令vec('皇室')为所有有关皇室主题的单词的词向量的平均,vec('男性')和vec('女性')分别为所有有关男性,女性主题的词向量的平均。我们在上一个文章中提到过,单词的语义能通过它在语料中的上下文中的信息体现出来。我们这里就认为vec('king') =1/2( vec('皇室') + vec('男性') ); vec('queen') =1/2( vec('皇室') + vec('女性') )。所以vec('king') - vec('queen')就等于 1/2( vec('男性')-vec('女性') )。同理,对于husband,wife这两个单词,husband周围的单词是关于伴侣和男性的主题,wife周围的单词是关于伴侣和女性的主题。vec('husband') - vec('wife')同样等于1/2( vec('男性')-vec('女性') )。这样 vec('husband') - vec('wife')就等于vec('king') - vec('queen'),我们就能轻易的通过三个词,去推断出第四个词。而vec('king') - vec('queen')也很好的反映了男女性别这样一个关系。这样看来analogy这样看似神奇的性质是可以从distributional hypothesis中推导出来的。





阅读全文
1 0
原创粉丝点击