词向量-glove和fasttext笔记

词向量-glove和fasttext笔记

入门推荐:
[1]: http://zh.d2l.ai/chapter_natural-language-processing/fasttext.html
[2]:https://blog.csdn.net/cuipanguo/article/details/82864983
[3]: https://blog.csdn.net/u014665013/article/details/79642083
[4]:https://blog.csdn.net/sun_brother/article/details/80327070

词嵌入模型

nlp中最常见的第一步是创建一个词表库并把每个词顺序编号,这里最常见的就是独热编码(one-hot)。但是one-hot有以下弊端:

  • 维度爆炸以及矩阵系数;这种情况会随着词典变大越来越糟糕;

  • 没有办法捕捉不同词之间的相似性,任何两个不同词的one-hot向量的余弦相似度都为0。

word2vec工具的提出正是为了解决上述两个问题。
经典的word2vec可以分为CBOW(continuous bag-of-words 连续的词袋模型)和skip-gram两种。想要了解这两个算法的可以去B站搜索相关视频。
Word2vec,根据context(上下文)预测中间的词汇,要么根据中间的词汇预测context,分别对应了word2vec的两种训练方式cbow和skip-gram。对于word2vec,采用三层神经网络就能训练,最后一层的输出要用一个Huffuman树进行词的预测,或者使用负采样。

GloVe-全局向量的词嵌入

Glove这种训练词向量的方法的核心思想是通过对’词-词’共现矩阵进行分解从而得到词表示的方法。GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

Glove和skip-gram、CBOW模型对比

Cbow/Skip-Gram 是一个local context window的方法,比如使用NS来训练,缺乏了整体的词和词的关系,负样本采用sample的方式会缺失词的关系信息。
另外,直接训练Skip-Gram类型的算法,很容易使得高曝光词汇得到过多的权重

Global Vector融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优势。融入全局的先验统计信息,可以加快模型的训练速度,又可以控制词的相对权重。

我的理解是skip-gram、CBOW每次都是用一个窗口中的信息更新出词向量,但是Glove则是用了全局的信息(共现矩阵),也就是多个窗口进行更新
(整体全文https://blog.csdn.net/u014665013/article/details/79642083)

词向量-glove和fasttext笔记_第1张图片
词向量-glove和fasttext笔记_第2张图片
在word2vec中,无论是跳字模型还是连续词袋模型,都将形态不同的单词训练为不同的词向量。比如‘dog’,'dogs’在word2vec分别用不同的词向量表示,此外,word2vec也没有直接表达这两个向量之间的关系。因此,fasttext在跳字模型的基础上,提出了子词嵌入。用单词“where”作为例子来了解子词是如何产生的。首先,我们在单词的首尾分别添加特殊字符“<”和“>”以区分作为前后缀的子词。然后,将单词当成一个由字符构成的序列来提取 n元语法。例如,n=3 时,我们得到所有长度为3的子词:“”以及特殊子词“”。
有了子词的概念后,fasttext其余都和跳字模型一样。只需要将跳字模型中的中心词向量Vc替换成所有子词向量的和,然后用近似训练法训练。
fasttext提出动机:英语单词一般都有前缀和后缀,比如‘in’,‘un’,一般表示否定;fasttext会将这两个前缀的向量学出来。此外,fasttext对一些特定语言比较重要。比如,德语中有很多复合词,乒乓球(table tennis)在德语中为Tischtennis。fasttext可以通过子词表达两个词的相关性,例如Tischtennis和tennis。而word2vec则不会体现这两个词的相关性。另外一个很重要的是,遇到词典中没有的新词,fasttext可以找出新词的子词向量,然后将子词向量求和算出新词向量。

fasttext

    参考:http://zh.d2l.ai/chapter_natural-language-processing/fasttext.html

总结:
Glove用词向量表达共现词频的对数
fasttext用子词向量之和表达整词

关于一些glove的使用可见:

多种方法使用GloVe

GloVe 教程之实战入门+python gensim 词向量

你可能感兴趣的:(自然语言处理,自然语言处理-词向量,深度学习)