[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries

简介: [Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries

论文:Dict2vec : Learning Word Embeddings using Lexical Dictionaries

作者:Julien Tissier, Christophe Gravier, Amaury Habrard

时间:2017

一、完整代码

# 完整代码在这里

二、论文解读

Dict2vec从字典条目构建新的单词对,使语义相关的单词移动得更近,负采样过滤掉字典中不相关的单词对。

2.1 方法介绍

    无监督学习的词向量有一个经典缺陷:在一个单词和那些在相关上下文中出现的单词之间缺乏监督。例如,近义词无法在一句话中同时出现,这里使用dict2vec通过字典中词的定义来优化这一步骤;


    单词的定义是一组解释其意义的单词或句子。字典是针对几个单词的一组元组(单词、定义)。例如,你可以在字典中找到:

car: A road vehicle, typically with four wheels, powered by an internal combustion engine and able to carry a small number of people.


从定义中我们可以发现car中有vehicle,road,engine等等词语;通过这样的词的出现,可以说明使用词定义来获得弱监督的相关性,允许我们得到语义上相关的词对是可行的;这里我们定义两个东西,weak pairsstrong pairs

  • weak pairs:如果A和B的定义中,只有一方有对方,那就是weak pairs
  • strong pairs:如果A和B的定义中,双方都有对方词语,那就是strong pairs

The word “vehicle” is in the definition of “car” and “car” is in the definition of “vehicle”. Hence, (car–vehicle) is a strong pair. The word “road” is in the definition of “car”, but “car” is not in the definition of “road”. Therefore, (car–road) is a weak pair.

“车辆”一词在“汽车”的定义中,“汽车”一词在“车辆”的定义中。因此,(汽车-汽车)是强有力的一对。“路”一词是在“汽车”的定义中,而“车”则不在“道路”的定义中。因此,(汽车-道路)是一个弱对。

为了把weak pairs和strong pairs与损失函数联系起来,同时为了避免影响运算速度,我们可以通过正采样和负采样结合的方式,首先是正采样,如下所示:

  image.png

其中  S(w)表示与 w 相关的所有strong pairs组成的集合; W(w)表示与 w相关的所有weak pairs组成的集合; Vs(w)表示从S(w)中抽出的pairs组成的集合; Vw(w)表示从  W(w)中抽出的pairs组成的集合;βsβw是两个系数;抽取的个数可以自定义;

接下来是负采样,首先定义随机采样的集合如下:

image.png

接下来可以得到负采样如下:

  image.png

    负采样用负数是为了尽可能的让他们不在一起,正采样用正数是为了尽可能的让他们在一起;得到最后的损失函数如下: image.png

模型介绍完毕!

2.2 参数设置事项

对于正抽样,经验网格搜索显示,βs和βw之间的比率为1:2 是调整这些超参数的一个很好的经验法则。我们还注意到,当这些系数过低时(βs≤0.5和βw≤0.2),结果会变得更糟,因为该模型没有考虑到来自强对和弱对的信息。另一方面,当它们过高时(βs≥1.2和βw≥0.6),模型会从上下文中丢弃太多的信息,而支持来自对的信息。当强对和弱对的数量过低或过高(ns,nw≤2或ns,nw≥5)时,这种行为是相似的。对于负抽样,我们注意到,与不受控制的版本相比,由成对带来的控制的平均加权得分增加了0.7%。我们还观察到,增加负样本的数量并没有显著提高结果,除了RW数据集,其中使用25个负样本可以提高10%的性能。实际上,这个数据集主要由罕见的单词组成,所以嵌入必须学会区分不相关的单词,而不是更接近相关的单词。

2.3 模型效果

提升不大,使用于小语料,个人认为小语料特征不明显,需要强化,而dict2vec通过字典定义添加了信息进行强化!

三、过程实现

四、整体总结

本文提出了一种利用词汇字典学习单词嵌入的新方法Dict2vec。它基于一个Skip-gram模型,其中目标函数通过利用从定义中提取的词对的强度对进行扩展。在单词相似性任务中,我们的方法比最先进的单词嵌入方法显示了更好的结果,包括基于来自外部来源的修改的嵌入方法。我们还提供了完整的源代码来重现实验。


目录
相关文章
|
20天前
|
机器学习/深度学习 自然语言处理
Word Embeddings技术
【10月更文挑战第15天】
|
2月前
|
机器学习/深度学习 自然语言处理 Python
|
6月前
|
机器学习/深度学习 自然语言处理 ice
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
49 2
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
|
6月前
|
算法 TensorFlow 算法框架/工具
[FastText in Word Representations]论文实现:Enriching Word Vectors with Subword Information*
[FastText in Word Representations]论文实现:Enriching Word Vectors with Subword Information*
37 2
|
机器学习/深度学习 自然语言处理 数据可视化
深入理解 Word Embedding
深入理解 Word Embedding
564 0
|
机器学习/深度学习 自然语言处理 运维
Word2Vec:一种基于预测的方法
Word2Vec:一种基于预测的方法
292 0
|
机器学习/深度学习 自然语言处理 算法
Word2Vec教程-Skip-Gram模型
这篇教程主要讲述了Word2Vec中的skip gram模型,主要目的是避免普遍的浅层介绍和抽象观点,而是更加详细地探索Word2Vec。现在我们开始研究skip gram模型吧
492 0
Word2Vec教程-Skip-Gram模型
|
机器学习/深度学习 自然语言处理 算法
CS224n 笔记2-词向量表示:Word2vec(一)
CS224n 笔记2-词向量表示:Word2vec(一)
163 0
CS224n 笔记2-词向量表示:Word2vec(一)
|
机器学习/深度学习 自然语言处理
CS224n 笔记2-词向量表示:Word2vec(二)
CS224n 笔记2-词向量表示:Word2vec(二)
120 0
CS224n 笔记2-词向量表示:Word2vec(二)
|
机器学习/深度学习 自然语言处理 算法
【CS224n】(lecture2~3)Word Vectors, Word Senses, and Neural Classifiers
上次对word2vec开了个头,也说了为了优化训练速度,可以用SGD,即Stochastic gradient descent 随机梯度下降。迭代地在每个滑动窗口为SGD取梯度;由于每个窗口只有 2m+1 个单词,所以该向量会很稀疏:
127 0
【CS224n】(lecture2~3)Word Vectors, Word Senses, and Neural Classifiers