2.2.词频背后

    NLP研究中揭示了词组合的意义的算法,该算法通过计算向量来表示此组合的意义,它称为潜在语义分析(LSA, Latent Semantic Analysis),如此,词的意义不仅可以表示成向量,还可以用向量来表示整篇文档的意义。

    本章将学习这些语义或主题向量,使用TF-IDF向量的加权评率得分来计算所谓的主题得分,这些得分构成了主题向量的各个维度;之后使用归一化词项频率之间的关联来将词归并到同一主题中,每个归并结果定义了新主题向量的一个维度。这种基于文档的意义来搜索文档,称为语义搜索

topic, semantic, meaning具有相似的意义,在讨论NLP时往往可以互换使用。

1. 从词频到主题得分

1.1. TF-IDF向量/词形归并

    TF-IDF向量会对文档中词项的准确拼写形式计数,所以使用词的不同拼写将会得到不同的TF-IDF向量表示。如果使用归一化方法(词干还原、词形归并)创建拼写相似、含义相似的词集合,也会导致这些词的意义不一定相似的副作用。最终在得到的TF-IDF向量空间模型下:

  • 两段文本讨论的内容相同,但使用了不同的词,所以在空间中不“接近”。

  • TF-IDF向量相互接近,但两段文本在意义上不相似。

    过去一般用“潜在语义搜索”而不是“潜在语义分析”。

1.2. 主题向量

    数学运算的和和差只是告诉了我们参与运算的向量表示的文档中词的使用频率,但并没有揭示这些词背后的含义。因此需要一种方法从词的统计数据中提取一些额外信息——词义

  • 这些紧凑的词意义向量:词-主题向量(Word-Topic Vector)

  • 文档的意义向量:文档-主题向量(Document-Topic Vector)

部分创建主题向量的算法,如潜在狄利克雷分配(Latent Dirichlet Allocation, LDiA),在每次添加新文档时会重新处理整个语料库。

    词汇(语料库)中的每个词都包含一个词-主题向量。一词多义(polysemy):词和短语包含不止一种含义。

    LSA会处理好这种情况:

  • 常见处理

    • 同音异义(homonym)——词的拼写和发音相同,含义不同。

    • 轭式搭配(zeugma)——在同一句子中同时使用同一此的两种含义。

  • 聊天机器人中

    • 同形异义(homograph)——词的拼写相同,但发音不同,含义不同。

    • 同音异形(homophone)——词的发音相同,但拼写不同,含义不同(NLP面对的挑战)。

1.3. 思想实验

  • 人类如何从数学上确定哪些主题和词相互关联以及这些关联的权重?

  • TF-IDF矩阵中是否有什么东西代表了词的交集?

  • 我们又能使用什么值来客观衡量这些定义的权重?

注:整个实验中选择了带符号的词权重来生成主题向量,这允许我们可以对与主题相反的词使用负权重。

    这样做的问题是,主题本身是由人的直觉和常识来定义的,而常识是无法编码到算法中的,所以这种做法是不可重用的,不适合机器学习的流水线。如果不依赖常识,如何定义:

  • 将一个向量从一个向量空间(TF-IDF)转换到另一个低维向量空间(主题向量)。

  • 创建一个nn个词项乘以mm个主题的矩阵,可以将其乘以文档的词频向量,从而得到该文档的新主题向量。

注:数学中,词汇表的大小通常写成V|V|,变量VV单独用于标识词汇表中可能词集合。

1.4. 主题评分算法

    继续分析,机器本身无法分辨哪些词属于同一组,或者它们当中的任何一个表示什么含义,所以,如何表示词的上下文

    最直接的方法是计算词和上下文在同一文档中的共现次数,词袋(BOW)和TF-IDF可满足。

    LSA:

  • 一种分析TF-IDF矩阵的算法,它将词分组到主题中。

  • 也可以对词袋向量进行处理,但TF-IDF向量结果会稍稍好一些。

  • LSA可以对主题进行优化,以保持主题维度的多样性。

    所以LSA也是一种降维技术,它和PCA的数学计算方法是一样的,LSA实际可以理解成使用PCA对词进行语义分析。另一个同义词,在信息索引领域,LSA曾经又称为潜在语义索引(Latent Semantic Indexing, LSI)。

1.4.1. LDA分类器

    线性判别分析(LDA,Linear Discriminant Analysis),它将文档分解到单个主题中,由于它是一维的,所以不需要做SVD,可只计算二类问题中每一类所有TF-IDF向量的质心(平均值)。LDA是最直接也最快速的降维和分类模型之一,它是一种有监督算法,需对文档的类进行标注,实现步骤;

  1. 计算某个类(垃圾短消息)中所有TF-IDF向量的平均位置(质心)。

  2. 计算不在该类(非垃圾短消息)中的所有TF-IDF向量的平均位置(质心)。

  3. 计算上述两个质心之间的向量差(连接两个向量的直线)。

    语义分析不依赖独立的词,会聚合语义相似的词并将它们一起使用。

1.4.2. LDiA

    潜在狄利克雷分析(LDiA,Latent Dirichlet Allocation),它可以将文档分解到任意多个主题中;它和LSA数学上并不一样,它使用了非线性统计方法将词分组,训练时间会长很多。实战中用得少,但它的结果更接近人类对词和主题的直觉,所以解释性更强。

    LDiA比较适合单文档分析,如文档摘要。

2. 潜在语意分析

    潜在语意分析基于最古老的降维技术——奇异值分解(SVD),SVD将一个矩阵分解成三个方阵,其中一个是对角阵。SVD应用之一:分解成三个方阵,然后对方阵转置后再相乘,就得到了原始矩阵的逆矩阵。潜在语意分析是一种数学上的技术,用于寻找对任意一组NLP向量进行最佳线性变换(旋转和拉伸)的方法,这些NLP向量包括TF-IDF向量和词袋向量。最佳变换:坐标轴(维度)对齐到新向量,使得词频具有最大的散度(Spread)或方差(Variance)。

    在简化原始矩阵之前,我们对它们进行截断处理(忽略某些行列),这种SVD方法称为截断的奇异矩阵分解(Truncated Singular Value Decomposition,TSVD),自然语言文档上的LSA等价于TF-IDF向量上的PCA。

    LSA是一种通过给机器一些样例来训练机器识别词和短语的意义的语法,从LSA中提取出词的含义的数学方法称为奇异值分解(SVD)。

3. 奇异值分解

    奇异值分解是LSA背后的算法,先在词项-文档矩阵上使用SVD,但SVD也适用于TF-IDF矩阵或其他向量空间模型,SVD是一种可以将任何矩阵分解成三个因子矩阵的算法,这三个因子矩阵可以相乘重建原始矩阵。

  • SVD通过计算词项-文档矩阵的列之间的相关度来寻找那些同时出现的词。

  • SVD能同时发现文档间词项使用的相关性和文档之间的相关性。

    基于上述两条,SVD可以计算出语料库中方差最大的词项线性组合;SVD将相关度高的词项组合在一起,同时这一组合在文档中出现差异很大,这种线性组合就是主题,这种主题可以将词袋向量转换为主题向量——类似文档的概括总结。

    SVD(LSA的核心)数学符号如下:

Wm×n=Um×pSp×pVp×nTW_{m \times n} = U_{m \times p}S_{p \times p}V_{p \times n}^T

  • mm为词汇表中词项数量

  • nn为语料库中文档数量

  • pp为语料库中主题数量

理解上述公式。

3.1. 左奇异向量U

    矩阵U包含了词项-主题矩阵,它给出所具有的上下文信息,称为左奇异向量,U给出了词与主题之间的相互关联,截断之前,它是一个方阵。U中包含了所有主题向量,每一列主题向量对应语料库中一个词,所以可以用作一个转换因子,将词-文档向量(TF-IDF向量或词袋向量)转换为主题-文档向量。

3.2. 奇异值向量S

    Sigma或S矩阵是对角方阵,对角线上的元素主题即奇异值,奇异值给出了在新的语义向量空间中每个维度代表的信息量。对角矩阵只有在从左上角到右下角的对角线上才包含非零值,而S矩阵的其余元素都是0。

3.3. 右奇异向量VTV^T

    VTV^T是一个文档-文档矩阵,每一列都是“右奇异向量”,该矩阵在文档之间提供共享语义,它度量了文档在新的文档语义模型中使用相同主题的频率,行数和文档数相同。

3.4. SVD矩阵方向

    矩阵的命名和大小描述先由行开始,然后才是列。因此,词项-文档矩阵的行代表词,列代表文档。如果使用SK,必须将特征-文档矩阵转置,创建一个文档-特征矩阵,然后才能调用.fit(), .predict()方法。

3.5. 主题约简

    经过上述步骤,我们已经有了一个主题模型,它可以将词频向量转换为主题权重向量,但由于主题和词数量一样多,所以向量空间模型维度和词袋模型一样没有变化,也就是目前为止未执行降维。

    多少个主题才足以捕捉文档的本质?度量LSA精确率:从主题-文档矩阵重构词项-文档矩阵。某些情况下,去掉了词项-文档矩阵中几个维度之后,精确率会更完美:

4. 主成分分析

    当SVD用于降维,主成分分析(PCA)是SVD的另一个叫法,SK中的PCA模型在SVD上做了调整,提高了NLP流水线的精确率。

  1. 一方面,SK中PCA自动通过减去平均词频来“中心化”数据。

  2. 另一方面,SK中使用了一个名为flip_sign的函数来确切计算奇异向量的符号。

  3. 最后,SK中的PCA实现了一个可选的“白化”(Whitening)步骤。

4.1. 三维向量上的PCA

    手动旋转特定方向,最小化图中窗口轴上的方差,SVD通过沿着高维空间的低维阴影的维度方向最大化方差来保持向量的结构和信息内容,SVD最大化每个轴上的方差——方差是一个非常好的信息指标。

4.2. 回归NLP

  • scikit-learn PCA模型

  • 截断的SVD模型

    截断的SVD模型被设计成用于稀疏矩阵,这种矩阵是存在很多相同值元素的矩阵;NLP词袋和TF-IDF矩阵几乎总是稀疏的,大部分词频都是0。降维是针对过拟合的主要应对措施,这正是LSA所作的事,它减少了维度,因此有助于防止过拟合(Overfitting);通过假设词频之间的线性关系,LSA可以基于小数据集进行泛化,它可以帮助找到这些词之间的关联并计算关联程度。

4.3. 基于PCA的短消息语义分析

SK中检查.components_属性可以获得任何你和好的SK的权重。

4.4. 基于TSVD的短消息语义分析

4.5. 基于LSA的垃圾消息分类效果

    SK中的TSVD采用了部分技巧,使其忽略了特征值的尺度信息:

  • 将TF-IDF向量按长度(2范数)对TF-IDF词频归一化。

  • 通过减去每个词项的平均频率进行中心化处理。

无论使用哪种算法执行语义分析(LSA、PCA、SVD、TSVD、LDiA),都应该对词袋向量或TF-IDF向量归一化;否则,可能会在主题之间产生巨大的尺度差异,主题之间的尺度差异会降低模型区分细微的、出现不频繁的主题的能力。

LSA和SVD的增强

    语义分析流水线中可以找到下列方法:

  • 二次判别分析(QDA,Quadratic Discriminant Analysis)

  • 随机投影(Random Projection)

  • 非负矩阵分解(NMF,Nonnegative Matrix Factroization)

    QDA创建的是二次多项式变换,非线性变换,这些变换定义了区分类的向量空间,它的类之间的边界是二次曲面。

    随机投影是一种和SVD类似的矩阵分解/变换方法,但由于算法随机,每次得到结果都不一样,某些情况下可以得到比SVD更好的变换,但它很少用于NLP问题。

5. 潜在狄利克雷分布:LDiA

    LDiA和前边LSA一样做了很多主题模型的工作,但它假设词频满足了狄利克雷分布,该分布精确地给出了词频赋值给主题的信息,它创建了一个语义向量空间模型(主题向量)。LDiA假设每篇文档都由某个任意数量的主题混合(线性组合)而成,该数量是在开始训练LDiA模型时选择的,它还假设每个主题都可以用词的分布(词项频率)来表示(实际就是统计学中先验)。

5.1. LDiA思想

    我们期望词的数量和主题的数量有特定概率分布,这样就可以匹配待分析的真实文档中的词和主题的分布:

  1. 生成文档的词的数量(泊松分布)

  2. 文档中混合的主题的数量(狄利克雷分布)

    LDiA算法也依赖一个词袋向量空间模型。

5.2. 基于LDiA主题模型的短消息语义分析

    LDiA生成的主题对人类来说更容易理解和解释,对比下来LSA(PCA)视图将原本分散的东西分散开来,而LDiA则视图将原本接近的东西更接近在一起;LDiA使用原始词袋向量,而不是归一化的TF-IDF向量。

5.3. LDiA + LDA = 垃圾消息过滤器

    共线警告可能发生一种:文本包含一些2-gram3-gram,组成它们的词只同时出现在这些2-gram3-gram中,因此,最终LDiA模型必须在这些相等的词项频率之间任意分配权重。LDiA擅长挖掘可解释的主题,如摘要,而在产生对线性分类有用的主题方面也不差。

6. 距离和相似度

    LSA能够保持较大的距离,但它并不总能保持小的距离(文档之间关系的精细结构),LSA底层的SVD算法重点是使新主题向量空间中所有文档之间的方差最大化。

    高维空间中度量距离的选择:

  • 欧几里得距离或笛卡尔距离、或均方根误差(RMSE):2范数或L2L_2

  • 平方欧几里得距离、距离平方和(SSD):L22L_2^2

  • 余弦、夹角或投影距离:归一化点积。

  • 闵可夫斯基距离:p范数或LpL_p

  • 分级距离、分级范数:p范数或LpLp0<p<10 < p < 1

  • 城市街区距离了、曼哈顿距离或出租车距离,绝对距离之和(SAD):1范数或L1L_1

  • 杰卡德距离,逆集合相似性。

  • 马哈拉诺比斯距离。

  • 莱文斯坦距离或编辑距离。

    度量指标,一个真正的度量指标必须具有四个数学性质,而距离或得分不具有这些性质:

  1. 非负性:度量指标永远不可能是负数,metric(A,B)>=0metric(A,B) >= 0

  2. 不可分辨性:如果两个对象之间度量指标为零,那么它是相同的。如果metric(A,B)==0:assert(A==B)metric(A,B) == 0: assert(A == B)

  3. 对称性:度量指标不关心方向,metric(A,B)=metric(B,A)metric(A,B) = metric(B,A)

  4. 三角不等式:无法通过A和C中间的B更快地从A到C,即metric(A,C)<=metric(A,B)+metric(B,C)metric(A,C) <= metric(A,B) + metric(B,C)

7. 反馈及改进

    前面所有LSA方法都没考虑文档之间的相似度信息,并且忽略了文档的所有元信息。

线性判别分析

    线性判别分析(LDA)模型,工作原理和LSA类似,但它需要分类标签或其他分数找到高维空间中维度的最佳线性组合。它没有最大化新空间中所有向量之间的分离程度(方差),而是最大化了每个类质心向量之间的距离。

8. 主题向量威力

最后更新于