Ngram2vec

  • 更新时间: 2018-05-08
  • 来源: 原创或网络
  • 浏览数: 34次
  • 字数: 16199
  • 发表评论
EMNLP 2017《Ngram2vec: Learning ImprovedWord Representations from Ngram Co-occurrence Statistics》[5] 的一作 Zhao Zhe 同学。由他从第一视角和我们分享他们改进 Word2Vec 的工作。高能提醒:文章内含大量实战,不乏很多中文上的实践!

Word2Vec [1,2] 的出现让我们看到词向量可以有一些神奇的性质,比如:‘中国-北京=日本-东京’。当然,这样一个厉害的模型也给了我们大量的改进空间和发论文的机会。其中一种最主流的改进就是修改 Word2Vec 中对于上下文的定义。在 Word2Vec中,上下文就是局部窗口中的单词(如下图所示)。

Ngram2vec,by 5lulu.com

图1:窗口大小为2的局部上下文

我们可以在单词的基础上加上更多的信息。已有的论文在 Word2Vec 上面的改进包括加入依存树信息,文档信息,位置信息,句子信息,知识库信息,人工标注信息,字符信息等等等等。显然我们还可以加入这些信息的组合。这些信息也可以既加到上下文中又加到中心词中。根据这些论文的结果以及我个人的一点经验,选择不同的上下文对词向量的性质有着较大的影响。这里举个例子:

有时我们希望输入‘篮球’,返回的结果是‘足球’,‘排球’等类型相同的单词。这时加上依存树的信息能满足这个要求。

有时我们希望输入‘篮球’,返回的是主题相似的单词,比如‘姚明’,‘NBA’等等。这时我们可以加入文档的信息。这是因为两个主题相似的单词更可能经常出现在同一篇文档当中。

我们论文 [5] 的内容和上段中提到的在 Word2Vec 上面的改进的套路是一样的,就是在上下文中加入 N-gram的信息(如图2所示),此外我们对于共现矩阵的构建的算法进行了优化。

Ngram2vec,by 5lulu.com

图2:窗口中加入了 bi-gram 信息

接下来,想主要介绍一下我们的 Ngram2vec 工具包(地址在https://github.com/zhezhaoa/ngram2vec/)。这个工具包能比较高效的支持我们引入各种各样的上下文,从而得到让我们满意的词向量。我们做这个框架的思想来源于OmerLevy 的 hyperwords 工具包(地址在https://bitbucket.org/omerlevy/hyperword)。我们在上面继续做了一些工作,并从 Omer Levy 那里得到了一些有用的建议。

如 Ngram2vec 名字所示,N-gram 这个特征是默认就加的。我们可以选择几阶N-gram,1阶就是普通的词向量模型。我们之所以把 N-gram 当做默认特征是因为我们认为 N-gram 是 word 最自然的延伸。词向量模型可以追溯到语言模型(languagemodeling),他们本质上都是在刻画中心词和上下文之间的关系。而最经典的语言模型就是利用当前 N-grams 对后面的单词进行预测。可以说,N-gram是语言模型中最重要的特征。

图3:Ngram2vec 流程图

下面我们仔细看一下整个工具包的流程(如图3所示)。可以发现它并不像 Word2Vec 的代码那样,从语料经过一个文件就得到了词向量在我们的 Ngram2vec 里,我们先从语料(corpus)出发得到词典(vocab),即 corpus2vocab。然后把语料和词典作为输入,从语料中抽取到单词对(pairs),即 corpus2pairs。Word2Vec 模型可以直接在单词对(pairs)上面训练得到词向量。而 GloVe、PPMI 和 SVD 是和 Word2Vec 中的两种模型有些差异的另外三种模型,他们需要在共现矩阵上面得到词向量关于他们更加详细的信息可以参考论文 [3,4,5]。

在我们这里,可以先通过 pairs2counts 把单词对的信息汇总,把单词对(pairs)转化成共现矩阵counts。举个例子:

pairs2counts 把 变成 <, 100>,

100是eat和apple在整个语料中共现的次数。

有了 counts 我们就可以得到另外三种模型的词向量GloVe 需要打乱顺序的共现矩阵,以及需要修改文件格式。因此我们执行 counts2shuf 和 counts2bin 后把输出喂给 GloVe,从而得到词向量。PPMI 属于比较原始的 count-based 模型,不需要像Word2VecGloVe 那样训练,做一些很简单的计数加权就可以得到了。PPMI 的单词表示是稀疏高维的,通过 SVD 对 PPMI 分解,可以得到低维的单词向量表示。

经过这一套流程下来,我们就得到了四份词向量模型我们还可以看到这里有两份词典,vocab_word 和 vocab_context。由于现在中心词以及上下文可以包括各种各样的特征,所以中心词词典和上下文词典是有可能不一样的。所有模型共用这两个词典,这也是把几个模型串在一起的好处,可以共用很多代码以及数据。这里的word2vecglove 后面都加了f,f代表feature,表明 word2vecglove 支持中心词和上下文的词典不同(词典中可以有各种各样的特征)。原始的word2vecglove只有一个词典(词典中只有单词)。

由于从语料到词向量,每一步处理是分开的,所以我们可以很灵活地在上面加入新的特征或是模型。比如我们希望加入文档的信息,我们只需在 corpus2pairs 这步加上文档和单词的 pair 就好。这只要修改 corpus2pairs 中的几行就能做到。后面共现矩阵的构建,词向量模型的训练的代码完全不需要改变。当然这个工具包也有一个缺点,就是 pairs 需要显式的写出,会占用比较大的磁盘空间,这也是为了方便的加入各种上下文特征的代价。

引入丰富的上下文信息不仅可以帮助我们得到更好,或是性质不同的词向量,还能得到高质量的特征向量。这些特征向量也可以进一步的用于其他的任务。这里我们定性地看一看训练出来的 Ngram 向量的性质。我们输入目标 Ngram 向量,看看哪些单词和 Ngram 距离这些目标 Ngram 更近,同时给出它们之间的相似度(如下图所示)。

图4

我们还对 Ngram 进行了分类。比如第一大类是反义词类型,输入 not interesting 应该返回 interesting 的反义词 boring。可以看出 Ngram 向量还是比较符合人的直觉的。

目前某公司正在用这个框架去得到性质不同的词向量。由于他们需要的是中文词向量,而据我们了解,目前评估中文词向量的数据集并不多,我们知道的一个资源是在https://github.com/Leonard-Xu/CWE,但是其规模比较小(如果有其他的资源,请大家留言告诉我,也许我搜得还不够全面)。

因此我和我同学手工对照着 Google analogy,MSR analogy 等数据集,构造了评估中文词向量的数据集。这个数据集的规模大得多,包含了上万条 analogy 问题以及similarity 问题,后面还会继续增加。具体例子如下面两图所示:

我们构造的方式很简单,就是对英文数据集进行翻译,china 翻译成中国,rome 翻译成罗马。当然,构造的过程中出现了一系列问题。有的英文单词对应多个中文单词。比如 grandmother 的翻译可以是奶奶,也可以是外婆;grandfather 可以翻译成爷爷,也可以翻译成外公。所以在 analogy 问题中 grandmother grandfather 这一对单词对应两对中文单词,分别是奶奶,爷爷;外婆,外公。

此外有一些英文的 analogy 对应到中文需要进行一些修改。比如单复数的 analogy 问题:bird、birds 翻译成鸟,鸟群;man、men翻译成男人,男人们。还有一些英文的 analogy 是不能被推广到中文的,比如第三人称单数形式的 analogy 问题。当然,中文也有一些很自然的 analogy,比如处长,副处长;校长,副校长等等。这些在英文的 analogy 数据集中是没有的。

希望我们构建的数据集能够帮助大家更客观的评估生成的中文词向量。数据集和 Ngram2vec 工具包是在一起的(https://github.com/zhezhaoa/ngram2vec)。我的邮箱是 helloworld@ruc.edu.cn,非常希望大家有问题能随时跟我联系。

参考文献

[1] Mikolov T, Chen K, Corrado G, et al. Efficient estimationof word representations in vector space[J]. arXiv preprint arXiv:1301.3781,2013.

[2] Mikolov T, Sutskever I, Chen K, et al. Distributedrepresentations of words and phrases and their compositionality[C]//Advances inneural information processing systems. 2013: 3111-3119.

[3] Pennington J, Socher R, Manning C. Glove: Global vectorsfor word representation[C]//Proceedings of the 2014 conference on empiricalmethods in natural language processing (EMNLP). 2014: 1532-1543.

[4] Levy O, Goldberg Y, Dagan I. Improving distributionalsimilarity with lessons learned from word embeddings[J]. Transactions of theAssociation for Computational Linguistics, 2015, 3: 211-225.

[5] Zhao Z, Liu T, Li S, et al. Ngram2vec: Learning ImprovedWord Representations from Ngram Co-occurrence Statistics[C]//Proceedings of the2017 Conference on Empirical Methods in Natural Language Processing. 2017:244-253.


标签: 向量 词向量

我来评分 :6
0

转载注明:转自5lulu技术库

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议