词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD

时间:2021-05-29 16:45:27

1.基于知识的表征

如WordNet(图1-1),包含同义词集(synonym sets)和上位词(hypernyms,is a关系)。
词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD
存在的问题:

  • 作为资源来说是好的,但是它失去了词间的细微差别,比如说"good"和"full"同义是需要在一定的上下文中才能成立的;
  • 易错过词的新义,基本不可能时时保持up-to-date;
  • 是人为分的,所以是主观的结果;
  • 需要花费很多的人力去创建和调整;
  • 很难计算出准确的词间相似度。

2.基于数据库的表征

2.1 词本身

2.1.1 词集模型(SoW,Set of Words)

0-1表征,参见图2.1.1-1,向量维度为数据库中总词汇数,每个词向量在其对应词处取值为1,其余处为0。
词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD
存在的问题:
因为不同词间相互正交,所以很难计算词间相似度。

2.1.2 词袋模型(BoW,Bag of Words)

除了考虑词是否出现外,词袋模型还考虑其出现次数,即每个词向量在其对应词处取值为该词在文本中出现次数,其余处为0。
但是,用词频来衡量该词的重要性是存在问题的,比如"the",其词频很高,但其实没有那么重要,所以可以使用TF-IDF特征来统计修正词频。
修正后的向量依旧存在数据稀疏的问题,大部分值为0,常使用Hash Trick进行降维。

TF-IDF

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TF(term frequency):词在当前文本中的词频;
IDF(inverse document frequency):包含该词的文本在语料库中出现频率的倒数的对数。
\(IDF(x)=log{N \over N(x)}\),其中,N是语料库中文本的总数,N(x)是语料库中包含词x的文本的总数。
常见的IDF平滑公式之一:\(IDF(x)=log{N+1 \over N(x)+1}+1\)
最终,词x的TF-IDF值:\(TF\)-\(IDF(x)=TF(x)*IDF(x)\)

Hash Trick

哈希函数h将第i个特征哈希到位置j,即h(i)=j,则第i个原始特征的词频数值c(i)将会累积到哈希后的第j个特征的词频数值c'(j)上,即:\(c'(j)=\sum_{i\in J;h(i)=j}c(i)\),其中J是原始特征的维度。
但这样做存在一个问题,有可能两个原始特征哈希后位置相同,导致词频累加后特征值突然变大。
为了解决这个问题,出现了hash trick的变种signed hash trick,多了一个哈希函数\({\xi}:N{\rightarrow}{\pm}1\),此时,我们有\(c'(j)=\sum_{i\in J;h(i)=j}{\xi}(i)c(i)\)
这样做的好处是,哈希后的特征值仍然是一个无偏的估计,不会导致某些哈希位置的值过大。从实际应用中来说,由于文本特征的高稀疏性,这么做是可行的。
注意hash trick降维后的特征已经不知道其代表的特征和意义,所以其解释性不强。

2.2 结合上下文

基本思想:近义词之间常有相似的上下文邻居。

2.2.1 共现矩阵

  • 基于整个文档:常给出文档的主题信息;
  • 基于上下文窗口:常捕获语法、语义信息。

图2.2.1-1为基于窗口大小为1、不区分左右形成的高维稀疏词向量。
词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD
存在的问题:

  • 共现矩阵的大小随着词汇量的增多而变大;
  • 维度高;
  • 数据稀疏带来的鲁棒性差。

2.2.2 低维稠密词向量

降维

通过对共现矩阵进行SVD,如图2.2.2-1所示。
词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD
选择U的前k列得到k维词向量。
优势:

  • 有效地利用了统计信息。

存在的问题:

  • 难以加入新词,每次来个新词,都得更新共现矩阵,然后重新SVD;
  • 由于大多数词不共现,导致矩阵十分稀疏;
  • 矩阵维度通常很高(\(\approx 10^6*10^6\));
  • 计算代价高,对于\(n*m\)的矩阵为\(O(nm^2)\)
  • 需要对共现矩阵进行处理来面对词频上的极端不平衡现象。

常用的解决办法:

  • 忽视"the"、"he"、"has"等功能词或者限制其次数不超过某个值(常100);
  • 基于文档中词间距离对共现矩阵中的count进行加权处理,常窗口中离中心词越近的词分配给其的权重越大;
  • 使用Pearson相关系数(\(C(X,Y)=\frac{cov(X,Y)}{\sigma(X)*\sigma(Y)}\))来代替原本的count,负数置0。

直接学

基于迭代:相较于基于SVD的方法直接捕获所有共现值的做法,基于迭代的方法一次只捕获一个窗口内的词间共现值。

  • word2vec
  • GloVe