塞进裤子ヾ(≧O≦)〃嗷~

0%

word embdding总结

mark

统计方法

共现矩阵co-occurence matrix

mark

则共现矩阵表示如下:(使用对称的窗函数(左右window length都为1) )

例如:“I love”出现在第1,2句话中,一共出现2次,所以=2。
对称的窗口指的是,“love I”也是2次。

将共现矩阵行(列)作为词向量表示后,可以知道love,enjoy都是在I附近且统计数目大约相等,他们意思相近

love 的embdding为200110

优点:在一定程度上缓解了one-hot向量相似度为0的问题,但依旧没有解决数据系数和维度灾难的问题。

限制

  • 随着文章字数增加矩阵的大小也会迅速增加;
  • 计算量会迅速增加。之前one-hot形式,由于只有一列存在非0数字,所以维度即使再大,计算量也不会增加太多。而现在则不同,每列都有可能有数个非0数字;
  • 大部分的有效信息,集中在少数区域。没有有效地“散开”,所以robustness会比较差
  • 当增加一个word的时候整个矩阵都要更新
  • 词向量维度会随着语料库中词汇的增多而大幅增加,这会导致所需存储空间增大,且矩阵会变 得相当稀疏,基于此构建的模型鲁棒性较差;
  • 功能词出现频次极高,但没有提供相应的信息;
  • 没有反映出词距与词相关性之间的联系。

SVD

mark

既然基于共现矩阵得到的离散词向量存在着高维和稀疏性的问题,一个自然而然的解决思路是对原始词向量进行降维,从而得到一个稠密的连续词向量。

首先,统计一个词语的共生矩阵X。X是一个|V|×|V| 大小的矩阵,Xij表示在所有语料中,词汇表V中第i个词和第j个词同时出现的词数,|V|为词汇表的大小。对X做矩阵分解(如奇异值分解)得到矩阵正交矩阵U,对U进行归一化得到矩阵,即视为所有词的词向量:

mark

SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚至可以一定程度反映word间的线性关系。

但这样的传统做法有很多问题:

由于很多词没有出现,导致矩阵极其稀疏,因此需要对词频做额外处理来达到好的矩阵分解效果;
矩阵非常大,维度太高
需要手动去掉停用词(如although, a,…),不然这些频繁出现的词也会影响矩阵分解的效果。

Re:https://blog.csdn.net/m0_37565948/article/details/84989565

语言模型

n-gram

语言模型旨在为语句的联合概率函数P(w1,…,wT) 建模

mark

NNLM

neural network language model

mark

当给定一段序列时,由其前面的几个词预测第n个词的概率 。

word2vec

CBOW

cbow计算过程

https://www.zhihu.com/question/44832436/answer/266068967

mark

mark

Re:https://www.ijcai.org/proceedings/2018/0607.pdf

$v$ 也叫上下文向量,$v’$ 中心词向量

mark

skip-gram

mark

负采样

negative sampling

取消输出层的softmax,采用sigmoid,具体见笔记本。

考虑到计算量大的部分都是在隐层到输出层上,尤其是W′的更新。因此word2vec使用了两种优化策略: Hierarchical Softmax 和 Negative Sampling。二者的出发点一致,就是在每个训练样本中,不再完全计算或者更新W′这个矩阵。二者都不再显示使用W′这个矩阵。因此这也就解释了前面说的为什么不用W′作为最终词向量。

Re:https://shomy.top/2017/07/28/word2vec-all/

https://zhuanlan.zhihu.com/p/53425736

https://www.jianshu.com/p/36beb5ff76db

word2vec 缺陷

  • fixed vector,没有考虑上下文 (改进:elmo)
  • 窗口长度有限 (改进:RNN LSTM)
  • 无法考虑全局 (改进:矩阵分解)
  • 无法有效学习低频词向量,未登录词(OOV:out of vocabulary) (改进:subword embedding)

Glove

基于词共现矩阵,具体看为知笔记

fasttext

使用字符级别的n-gram

mark

模型结构与CBOW类似

fasttext可以看做是CBOW模型的一个变形,CBOW是中心词的上下文的onehot编码,fasttext是embedding后的多个单词及其n-gram,是随机初始化的embedding。

相似处: 图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。 都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

不同处: 模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,其对应的vector都不会被保留和使用;

​ 模型的输入层:word2vec的输入层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

doc2vec

增加了paragraph vector

mark

ELMO

Bert

Transformer

if help:小手一抖点个广告 or 大手一挥资助一下