词的表达

  1. 给定包含 N 篇文档的语料库 D={D1,D2,,DN} ,所有的单词来自于包含 V 个词汇的词汇表 V={word1,word2,,wordV},其中 V 表示词汇表的大小 。

    每篇文档 Di 包含单词序列 (wordw1i,wordw2i,,wordwnii) ,其中 wji{1,2,,V} 表示第 i 篇文档的第 j 个单词在词汇表中的编号,ni 表示第 i 篇文档包含 ni 个单词。

    词的表达任务要解决的问题是:如何表示每个词汇 wordv

  2. 最简单的表示方式是one-hot 编码:对于词汇表中第 v 个单词 wordv,将其表示为 wordv(0,0,,0,1,0,,0)T ,即第 v 位取值为1,剩余位取值为0

    这种表示方式有两个主要缺点:

    • 无法表达单词之间的关系:对于任意一对单词 (wordi,wordj),其向量距离均为 2

    • 向量维度过高:对于中文词汇表,其大小可能达到数十万,因此one-hot 向量的维度也在数十万维。这对于存储、计算都消耗过大。

  3. BOW:Bag of Words:词在文档中不考虑先后顺序,这称作词袋模型。

一、向量空间模型 VSM

  1. 向量空间模型主要用于文档的表达。

  2. 向量空间模型假设单词和单词之间是相互独立的,每个单词代表一个独立的语义单元。实际上该假设很难满足:

    • 文档中的单词和单词之间存在一定关联性,单词和其前面几个单词、后面几个单词可能存在语义上的相关性,而向量空间模型忽略了这种上下文的作用。

    • 文档中存在很多的一词多义和多词同义的现象,每个单词并不代表一个独立的语义单元。

1.1 文档-单词 矩阵

  1. 给定语料库 D 和词汇表 V,定义文档-单词 矩阵为:

    (1)word1word2word3wordVD10010D21010DN0110

    令矩阵为 D ,则: D(i,j)=1 表示文档 Di 中含有单词 wordjD(i,j)=0 表示文档 Di 中不含单词 wordj

    于是文档 Di 表示为:Di(0,1,0,1,,0)T ,其中文档 Di 中包含的单词对应的位置取值为1,其它位置取值为 0 。

  2. 事实上,文档的上述表达并未考虑单词的顺序,也未考虑单词出现的次数。一种改进策略是考虑单词出现的次数,从而赋予文档-单词 矩阵以不同的权重:

    (2)D=[w1,1w1,2w1,3w1,Vw2,1w2,2w2,3w2,VwN,1wN,2wN,3wN,V]

    其中 wi,j 表示单词 wordj 在文档 Di 中的权重。

    • 如果单词 wordj 在文档 Di 中未出现,则权重 wi,j=0

    • 如果单词 wordj 在文档 Di 中出现,则权重wi,j0

  3. 权重wi,j 有两种常用的选取方法:

    • 单词权重等于单词出现的频率TFwi,j=TF(Di,wordj)

      • 函数 TF(Di,wordj) 返回单词 wordj 在文档 Di 中出现的频数。

      • 其缺点是:一些高频词(如:我们大家)以较大的权重出现在每个文档中,这意味着对每篇文档这些高频词是比较重要的。事实上对于绝大多数 NLP 任务,将这些词过滤掉不会有任何影响。

    • 单词权重等于单词的TF-IDFwi,j=TF(Di,wordj)×IDF(wordj)

      • 函数 IDF(wordj) 是单词的逆文档频率:IDF(wordj)=logNDF(wordj) 。其中:N 为语料库的文档数量,DF(wordj) 为出现单词 wordj 的文档的数量,DF(wordj)N 为单词 wordj 出现在一篇文档中的概率。

      • TF-IDF 对于高频词进行降权。如果单词 wordj 出现在大多数文档中,则 DF(wordj)N 较大,因此 IDF(wordj) 会较小。

  4. TF-IDF 不仅考虑了单词的局部特征,也考虑了单词的全局特征。

    • 词频 TF(Di,wordj) 描述了单词 wordj 在文档 Di 中的局部统计特征。

    • 逆文档频率 IDF(wordj) 描述了单词 wordj 在语料库 D 中的全局统计特征。

1.2 相似度

  1. 给定 文档-单词 矩阵,则很容易得到文档的向量表达:Di(wi,1,wi,2,,wi,V)T

    给定文档 Di,Dj ,则文档的相似度为:

    (3)similar(Di,Dj)=cos(wi,wj)=wiwj||wi||||wj||

    其中 wi=(wi,1,wi,2,,wi,V)T,wj=(wj,1,wj,2,,wj,V)T

    也可以使用其它方式的相似度,如 L2 距离相似度。

二、LSA

  1. 潜在语义分析latent semantic analysis:LSA 的基本假设是:如果两个词多次出现在同一篇文档中,则这两个词具有语义上的相似性。

2.1 原理

  1. 给定文档-单词 矩阵 D

    (4)D=[w1,1w1,2w1,3w1,Vw2,1w2,2w2,3w2,VwN,1wN,2wN,3wN,V]

    其中 wi,j 表示单词 wordj 在文档 Di 中的权重,可以为:单词 wordj 在文档 Di 中是否出现的0/1 值、单词 wordj 在文档 Di 中出现的频次、或者单词 wordj 在文档 Di 中的TF-IDF 值。

  2. 定义 vj=(w1,j,w2,j,,wN,j)T, 它为矩阵 D 的第 j 列,代表单词 wordj单词-文档向量,描述了该单词和所有文档的关系。

    • 向量内积 vpvq 描述了单词 wordp 和单词 wordq 在文档集合中的相似性。

    • 矩阵乘积 DTDRV×V 包含了所有词向量内积的结果。

  3. 定义 di=(di,1,di,2,,di,V)T ,它为矩阵 D 的第 i 行,代表文档 Di文档-单词向量,描述了该文档和所有单词的关系。

    • 向量内积 dsdt 描述了文档 Ds 和文档 Dt 在文档集合中的相似性。

    • 矩阵乘积 DDTRN×N 包含了所有文档向量内积的结果。

  4. 对矩阵 D 进行SVD 分解。假设矩阵 D 可以分解为:D=PΣQT 。其中:

    • PRN×N,QRV×V 为单位正交矩阵。

    • ΣRN×V 为广义对角矩阵。

      (5)Σ=[σ100000σ200000σr000000000000]

      其中 σ1σ2σr>0 称作奇异值。

  5. SVD 分解的物理意义为:将文档按照主题分解。所有的文档一共有 r 个主题,每个主题的强度 (主题强度就是主题在数据集中出现的次数)分别为:σ1,σ2,,σr

    • i 篇文档 Di 由这 r 个主题组成,文档的主题概率分布(称作文档-主题向量)为:

      (6)p(i)=(P(i,1),P(i,2),,P(i,r))T
    • t 个主题由 V 个单词组成,主题的单词概率分布(称作主题-单词向量 )为:

      (7)q(t)=(Q(t,1),Q(t,2),,Q(t,V))T
    • j 个单词由 r 个主题组成,单词的主题概率分布(称作 单词-主题 向量)为:

      (8)v(j)=(Q(1,j),Q(2,j),,Q(r,j))T
    • 根据 D=PΣQT 有:

      (9)D=P[100010001000000]N×r[σ1000σ2000σr][100000100000100]r×VQT

      则该分解的物理意义为:文档-单词 矩阵 = 文档-主题 矩阵 x 主题强度 x 主题-单词 矩阵。

2.2 应用

  1. 得到了文档的主题分布、单词的主题分布之后,可以获取文档的相似度和单词的相似度。

    • 文档 Di 和文档 Dj 的相似度:

      (10)sim(Di,Dj)=p(i)p(j)||p(i)||×||p(j)||
    • 单词 wordi 和单词 wordj 的相似度:

      (11)sim(wordi,wordj)=v(i)v(j)||v(i)||×||v(j)||
  2. 虽然获得了文档的单词分布,但是并不能获得主题的相似度。因为 Q 是正交矩阵,因此有:

    (12)(Q(i,1),Q(i,2),,Q(i,V))T(Q(j,1),Q(j,2),,Q(j,V))T=0,ij

    则有:

    (13)sim(topici,topicj)=q(i)q(j)||q(i)||×||q(j)||=(Q(i,1),Q(i,2),,Q(i,V))T(Q(j,1),Q(j,2),,Q(j,V))T||q(i)||×||q(j)||=0,ij

    因此,任意两个主题之间的相似度为 0 。

  3. 文档-主题向量P 决定。根据: D=PΣQTP=DQΣ1PT=Σ1QTDT ,而文档-主题向量P 的行向量,也就是 PT 的列向量。文档-单词向量D 的行向量,也就是 DT 的列向量。

    因此对于一篇新的文档 Ds,假设其文档-单词向量ws ,则其文档-主题向量为:

    (14)p(s)=Σ1QTws
  4. LSA 可以应用在以下几个方面:

    • 通过对文档的文档-主题向量 进行比较,从而进行基于主题的文档聚类或者分类。

    • 通过对单词的单词-主题向量进行比较,从而用于同义词、多义词进行检测。

    • 通过将query 映射到主题空间,进而进行信息检索。

2.3 性质

  1. LSA 的本质是将矩阵 D 通过 SVD 进行降维,降维主要是由于以下原因:

    • 原始的文档-单词 矩阵 D 太大计算机无法处理,通过降维得到原始矩阵的一个近似。

    • 原始的文档-单词 矩阵 D 含有噪音,通过降维去掉原始矩阵的噪音。

    • 原始的文档-单词 矩阵 D 过于稀疏,通过降维得到一个稠密的矩阵。

  2. LSA 的降维可以解决一部分同义词的问题,也可以解决一部分二义性的问题。

    • 经过降维,意义相同的同义词的维度会因降维被合并。

    • 经过降维,拥有多个意义的词,其不同的含义会叠加到对应的同义词所在的维度上。

  3. LSA 的缺点:

    • 产生的主题维度可能存在某些主题可解释性差。即:它们并不代表一个人类理解上的主题。

    • 由于Bag of words:BOW 模型的局限性,它无法捕捉单词的前后顺序关系。

      一个解决方案是:采用二元词组或者多元词组。

    • LSA 假设单词和文档形成联合高斯分布。实际观察发现,它们是一个联合泊松分布。这种情况下,用pLSA 模型效果会更好。

三、Word2Vec

3.1 CBOW 模型

  1. CBOW 模型(continuous bag-of-word):根据上下文来预测下一个单词。

3.1.1 一个单词上下文

  1. 在一个单词上下文的CBOW 模型中:输入是前一个单词,输出是后一个单词,输入为输出的上下文。

    由于只有一个单词作为输入,因此称作一个单词的上下文。

  2. 一个单词上下文的CBOW 模型如下:

    其中:

    • N 为隐层的大小,即隐向量 h=(h1,h2,,hN)TRN

    • 网络输入 x=(x1,x2,,xV)TRV ,它是输入单词(即上下文单词)的 one-hote 编码,其中只有一位为 1,其他位都为 0 。

    • 网络输出 y=(y1,y2,,yV)TRV,它是输出单词为词汇表各单词的概率。

    • 相邻层之间为全连接:

      • 输入层和隐层之间的权重矩阵为 WRV×N

      • 隐层和输出层之间的权重矩阵为 WRN×V

  3. 假设没有激活函数,没有偏置项。给定输入 xRV,则其对应的隐向量 hRN 为: h=WTx

    令:

    (15)W=[w1Tw2TwVT]

    由于 x 是个one-hot编码,假设它为词表 V 中第 j 个单词 wordj,即:

    (16)x1=0,x2=0,,xj1=0,xj=1,xj+1=0,,xV=0

    则有:h=wj

    即:W 的第 jwjT 就是词表 V 中第 j 个单词 wordj 的表达,称作单词 wordj 的输入向量。

  4. 给定隐向量 h,其对应的输出向量 uRV为: u=WTh 。令:

    (17)W=[w1,w2,,wV]

    则有:uj=wjh

    • uj 表示词表 V 中,第 j 个单词 wordj 的得分。

    • wj 为矩阵 W 的第 j 列,称作单词 wordj 的输出向量。

  5. u 之后接入一层 softmax 层,则有:

    (18)yj=p(wordjx)=exp(uj)j=1Vexp(uj),j=1,2,,V

    yj 表示词汇表 V 中第 j 个单词 wordj 为真实输出单词的概率。

    假设输入单词为 wordI (它称作上下文) ,观测到它的下一个单词为 wordO 。令输入单词的对应的网络输入为 x ,其隐向量为 wI,输入输出单词对应的输出单元为 j,则采用交叉熵的损失函数为:

    (19)E(wordI,wordO)=logexp(uj)j=1Vexp(uj)=wjh+logj=1Vexp(wjh)=wjwI+logj=1Vexp(wjwI)

    考虑语料库 D 中所有的样本,则整体经验损失函数为:

    (20)L=(wordI,wordO)DE(wordI,wordO)

    则网络的优化目标为: