[FastText in Word Representations]论文实现:Enriching Word Vectors with Subword Information*

简介: [FastText in Word Representations]论文实现:Enriching Word Vectors with Subword Information*

论文:Enriching Word Vectors with Subword Information

作者:Piotr Bojanowski∗, Edouard Grave∗, Armand Joulin,Tomas Mikolov

时间:2016

地址:https://github.com/facebookresearch/fastText

我感觉好多人讲错了,大家可以看看我这样解释是否有问题?

这篇文章介绍的内容大部分和我对2012年一篇名为Efficient Estimation of Word Representations in Vector Space的论文分析基本一致,唯一不同的是这里利用subword model考虑了词形态,在这篇博客中只简要介绍一下subword model,有关详细点击如下链接查看

[CBOW and Skip-gram]论文实现:Efficient Estimation of Word Representations in Vector Space

一、算法实现

1.1 完整代码

# 有时间再搞,能导包为什么要实现?

1.2 fastText包实现

安装:

$ pip install fasttext

使用:

import fasttext
# data.txt 是一个英文文本文件
model = fasttext.train_unsupervised('data.txt', model='skipgram')
# 输出where的词向量表示
model['where']
# 验证词表示
word = 'where'
ids = model.get_subwords(word)[1]
a = model.get_input_vector(ids[0])
for id in ids[1:]:
    a += model.get_input_vector(id)
a = a/min(a)
b = model['where']
b = b/min(b)
### a和b相等:即最终的词表示舍弃掉了word dictionary
# 获得subwords
model.get_subwords('whereareyou')
### 这里是不包含本身的

使用参数:

二、论文解读

2.1 一般的模型

    普通的模型首先构建一个词表,然后通过词表对词生成一个one-hot编码,最后这个one-hot编码通过投影层进行初始化,也就是我们要的词向量;这样做可以是可以,但是有两个缺点,分别是Out of Vocabulary(OOV) WordsMorphology

  • Out of Vocabulary(OOV) Words

假设 Word2Vec 的词汇表中只包含“tensor”和“flow”等词没有包含“tensorflow”。试图为复合词“tensorflow”嵌入,就会得到一个词汇错误;

  • Morphology

在普通模型中这几个词都有一个特定的向量并且各个向量之间毫无关系;

2.2 subword model

    subword model 可以有效的解决一般模型的缺点,其在构建词表示的时候,将词前后添加尖括号并利用n-grams拆解,例子如下:

以3-grams为例,一共有27*26*27=18,954种可能的形式,而论文中以所有n大于等于3,小于等于6的grams组成一个集合,如eating的subwords有:eating,<ea,<eat,<eati,<eatin,eat,eati,eatin,eating,ati,atin,ating,ating>,tin,ting,ting>,ing,ing>,ng>

按这样形式,其数量就会格外的大,这里可以通过hashmap的方式去减小数目进去优化,但这不是论文主要考虑的内容,论文中把这个数量固定为2000000

现在我们有2000000个subword集合,一个word可以分解为多个subword,那么我们可以用多个subword的向量和去代表word;这一点很容易处理,但是如何去训练呢?

从论文中可以知道,所有的模型其softmax层类似于如下:

image.png

image.png ,利用subwords表示 wc可以得到 image.png

其中 z i z_i zi表示subword的投影向量,而在训练时要注意的是在projection中训练时subwords集合中是包含其本身的,而在ouputs计算loss时,如果word能在word dictionary中找到word的表示是不含n-grams的,是单one-hot投影的向量,如果不能找到,就需要subwords通过n-gram生成;

模型流程如下:

其outputs利用softmax对应vocabulary中word的位置,相当于one-hot编码位置;

2.3 Dictionary of n-grams

对n-grams ,论文把n设置为  3n6,生成n-grams集合,n-grams集合的大小设置为2000000;


论文中P指的是word dictionary的维度,不包含n-grams的维度;较小的P值会使模型更加关注n-gram特征,所以P值用于控制模型对n-gram特征的重视程度,从而提高模型的性能。为什么会提高计算量呢?因为词如果不在P这个维度的word dictionary中,就只能从subwords中去生成(这里的subwords是不包含本身的),这样生成会涉及到大量的计算,而P值越小,表示不在word dictionary中的词越多,计算量也就非常大,应此在P的选择上有一个权衡,因为较小的值意味着更高的计算成本,但更好的性能。所以当P=W时,模型类似于2013年Mikolov等人提出来的模型;

三、整体总结

这里重要的难点是P的概念,其实P的概念搞懂,模型一下子就懂了;

论文中P指的是word dictionary的维度,不包含n-grams的维度;较小的P值会使模型更加关注n-gram特征,所以P值用于控制模型对n-gram特征的重视程度,从而提高模型的性能。为什么会提高计算量呢?因为词如果不在P这个维度的word dictionary中,就只能从subwords中去生成(这里的subwords是不包含本身的),这样生成会涉及到大量的计算,而P值越小,表示不在word dictionary中的词越多,计算量也就非常大,应此在P的选择上有一个权衡,因为较小的值意味着更高的计算成本,但更好的性能。所以当P=W时,模型类似于2013年Mikolov等人提出来的模型;

四、参考

A Visual Guide to FastText Word Embeddings


目录
相关文章
|
5天前
|
机器学习/深度学习 自然语言处理 ice
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
20 2
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
|
5天前
|
机器学习/深度学习 数据挖掘 API
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
14 2
|
5天前
|
机器学习/深度学习 自然语言处理 TensorFlow
[Character Embedding]论文实现:Text Understanding from Scratch
[Character Embedding]论文实现:Text Understanding from Scratch
11 2
|
5天前
|
机器学习/深度学习 自然语言处理 PyTorch
[ELMo]论文实现:Deep contextualized word representations
[ELMo]论文实现:Deep contextualized word representations
13 1
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
【论文精读】AAAI 2022 - Unified Named Entity Recognition as Word-Word Relation Classification
到目前为止,命名实体识别(NER)已经涉及三种主要类型,包括扁平、重叠(又名嵌套)和不连续NER,它们大多是单独研究的。
131 0
【论文精读】AAAI 2022 - Unified Named Entity Recognition as Word-Word Relation Classification
|
9月前
|
机器学习/深度学习 自然语言处理 数据可视化
SimCSE: Simple Contrastive Learning of Sentence Embeddings论文解读
本文介绍了SimCSE,一个简单的对比学习框架,极大地推进了最先进的句子嵌入。我们首先描述了一种无监督方法,该方法采用一个输入句子,并在一个对比目标中预测自己
143 0
|
9月前
|
机器学习/深度学习 自然语言处理
【论文精读】COLING 2022 - DESED: Dialogue-based Explanation for Sentence-level Event Detection
最近许多句子级事件检测的工作都集中在丰富句子语义上,例如通过多任务或基于提示的学习。尽管效果非常好,但这些方法通常依赖于标签广泛的人工标注
59 0
|
9月前
|
存储 自然语言处理 测试技术
LASS: Joint Language Semantic and Structure Embedding for Knowledge Graph Completion 论文解读
补全知识三元组的任务具有广泛的下游应用。结构信息和语义信息在知识图补全中都起着重要作用。与以往依赖知识图谱的结构或语义的方法不同
71 0
|
11月前
|
数据挖掘
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation-ppt版学习笔记
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation-ppt版学习笔记
96 0
|
机器学习/深度学习 存储 数据挖掘
【文本分类】Bag of Tricks for Efficient Text Classification
【文本分类】Bag of Tricks for Efficient Text Classification
【文本分类】Bag of Tricks for Efficient Text Classification