《自然语言处理实战:利用Python理解、分析和生成文本》读书笔记:第4章 词频背后的语义

第4章 词频背后的语义

4.1 从词频到主题得分

4.1.1 TF-IDF向量及词性归并

TF-IDF向量会对文档中词项的准确拼写形式进行计数。因此,如果表达相同含义的文本使用词的不同拼写形式或使用不同的词,将会得到完全不同的TF-IDF向量表示。这会使依赖词条计数的搜索引擎和文档相似性的比较变得乱七八糟。

4.1.2 主题向量

我们需要一种方法来从词的统计数据中提取一些额外的信息,即意义信息。我们需要更好地估算文档中的词到底意味着什么,也需要知道这些词的组合在一篇具体的文档中意味着什么。我们想用一个像TF-IDF一样的向量来表示意义,但是需要这个向量表示更紧凑、更有意义。

我们称这些紧凑的意义向量为“词-主题向量”,称文档的意义向量为“文档-主题向量”。

处理完语料库之后,语料库中的每篇文档将会对应一个文档-主题向量。而且,更重要的是,对于一个新文档或短语,我们不必重新处理整个语料库就可以计算得到其对应的新主题向量。词汇表中的每个词都会有一个主题向量,我们可以使用这些词-主题向量来计算词汇表中部分词构成的任何文档的主题向量。

4.1.3 思想实验

4.1.4 一个主题评分算法

LSA是一种分析TF-IDF矩阵的算法,它将词分组到主题中。LSA也可以对词袋向量进行处理,但是TF-IDF向量给出的结果稍好一些。

LSA还对这些主题进行了优化,以保持主题维度的多样性。当使用这些新主题而不是原始词时,我们仍然可以捕获文档的大部分含义(语义)。该模型中用于捕获文档含义所需的主题数量远远少于TF-IDF向量词汇表中的词的数量。因此,LSA通常被认为是一种降维计数。LSA减少了捕获文档含义所需的维数。

4.1.5 一个LDA分类器

LDA分类器是一种有监督算法,因此需要对文档的类进行标注,但是LDA所需要的训练样本数要比更酷炫的算法少得多。

与朴素贝叶斯或对率回归模型不同,语义分析并不依赖独立的词。语义分析会聚合语义相似的词并将它们一起使用。

4.2 隐性语义分析

隐性语义分析基于最古老和最常用的降维技术——奇异值分解(SVD)。

SVD的一个应用是求逆矩阵。一个矩阵可以分解成3个更简单的方阵,然后对这些方阵求转置后再把它们相乘,就得到了原始矩阵的逆矩阵。

利用SVD,LSA可以将TF-IDF词项-文档矩阵分解为3个更简单的矩阵。这三个矩阵可以相乘得到原始矩阵,得到的原始矩阵不会有任何改变。

经过SVD后得到的这3个更简单的矩阵揭示了原始TF-IDF矩阵的一些性质,我们可以利用这些性质来简化原始矩阵。我们可以在将这些矩阵相乘之前对它们进行截断处理,这将减少在向量空间模型中需要处理的维数。

这些截断的矩阵相乘并不能得到和原始TF-IDF完全一样的矩阵,然而它们却给出了一个更好的矩阵。文档的新表示包含了这些文档的本质,即隐性语义。这就是SVD被用于其他领域如压缩的原因。它能捕捉数据集的本质,并且忽略噪声。JPEG图像大小是原始位图的十分之一,但仍然包含原始图像的所有信息。

当在自然语言处理中以这种方式使用SVD时,我们将其称为隐性语义分析(LSA)。LSA揭示了被隐藏并等待被发现的词的语义或意义。

自然语言文档上的LSA等价于TF-IDF向量上的PCA,LSA使用SVD查找导致数据中最大方差的词的组合。

LSA提供了另外一条有用的信息。类似于TF-IDF的TDF部分,LSA告诉我们向量中的哪些维度对文档的语义很重要。于是,我们可以丢弃文档之间方差最小的维度。

LSA将更多的意义压缩到更少的维度中,我们只需要保留高方差维度,即语料库以各种方式讨论的主要主题。留下来的每个维度都成为“主题”,包含所有捕捉到的词的某种加权组合。

机器,从零开始,没有一种可以基于的语言。因此,它们需要的不仅仅是一个简单的例子而是需要更多信息来理解词的意义。就像大家看到一个充满外来词的句子,而机器使用LSA后可以很好地处理这一问题,即使面对的只是随即提取的、包含至少几个大家感兴趣的词的文档。

LSA是一种通过给机器一些样例来训练机器识别词和短语的意义(语义)的方法。和人类一样,机器从词的示例用法中学习语义要比从字典定义中学习更快也更容易。从示例用法中提取词的含义所需的逻辑推理,要比阅读字典中词的所有可能定义和形式然后将其编码到某个逻辑中所需的的逻辑推理少。

4.3 奇异值分解

SVD将相关度高的词项组合在一起,同时这一组合在一组文档中出现的差异很大。我们认为这些词的线性组合就是主题。这些主题会将词袋向量转换为主题向量,这些主题向量会给出文档的主题。主题向量有点儿像文档内容的摘要或概括总结。

4.3.1 左奇异向量U

U矩阵包含词项-主题矩阵,它给出词所具有的上下文信息。这是NLP中最重要的用于语义分析的矩阵。

4.3.2 奇异值向量S

S矩阵是一个对角方阵,其对角线上的元素主题即“奇异值”。奇异值给出了在新的语义(主题)向量空间中每个维度所代表的信息量。

4.3.3 右奇异向量Vt

该矩阵将在文档之间提供共享语义,因为它度量了文档在新的文档语义模型中使用相同主题的频率。

我们仅仅使用Vt来检查主题向量的准确性,以重建用于“训练”该矩阵的原始词-文档向量。

4.3.4 SVD矩阵的方向

机器学习训练集对应的样本-特征矩阵中的每一行都是一篇文档,而每一列都代表该文档的一个词或特性。但是要直接进行SVD线性代数运算时,矩阵需要转换成词项-文档格式。

4.3.5 主题约简

LSA背后的SVD算法会“注意”到某些词总在一起使用,并将它们放在一个主题中。这就是它可以“无偿”获得几个维度的原因。即使不打算在流水线中使用主题模型,LSA(SVD)也可以是为流水线压缩词-文档矩阵以及识别潜在复合词或n-gram的一种好方法。

4.4 主成分分析

当SVD用于降维时,主成分分析(PCA)是SVD的另一个叫法。

4.4.1 三维向量上的PCA

SVD通过沿着高维空间的低维阴影的维度方向最大化方差来保持向量的结构和信息内容。这就是机器学习所需要的,这样每个低维向量就能捕捉到它所代表的东西的本质。SVD最大化每个轴上的方差。而方差是一个很好的信息指标,或者说就是要找的本质。

4.4.2 回归NLP

截断的SVD模型被设计成用于稀疏矩阵,稀疏矩阵是存在很多相同值元素的矩阵。NLP词袋和TF-IDF矩阵几乎总是稀疏的,因为大多数文档不会包含词汇表中的大部分词。大部分的词频都为0。

过拟合的意思是指我们只会在从词汇表中提取出几个关键的词。因此,垃圾短消息过滤器将依赖这些垃圾词,它们存在于那些过滤掉的垃圾短消息的某处。垃圾消息散布者只需使用这些垃圾词的同义词,就可以很容易地绕过过滤器。如果词汇表中没有包含这些垃圾信息散布者使用地新同义词,那么过滤器就会将那些巧妙构造地垃圾短消息误分类为正常短消息。

上述这种过拟合是自然语言处理地一个固有问题。很难找到一个标注好地自然语言数据集,它包含了人们可能会说地标注为语料库中地所有方式。我们无法找到这样一个大规模地短消息数据库,该数据库包含了垃圾和非垃圾地所有表达方式,而且只有少数公司有资源创建这样的数据集。所以对我们来说,剩下的就需要有针对过拟合的应对措施。我们必须使用在少量样本上就可以泛化得很好的算法。

降维是针对过拟合的主要应对措施。通过将多维度(词)合并到更少的维度(主题)中,我们的NLP流水线将变得更加通用。如果降维或缩小词汇表,我们的垃圾短消息过滤器将能够处理更大范围的短消息。

泛化NLP流水线有助于确保它适用于更广泛的现实世界的短消息集,而不仅仅是这一组特定的消息集。

4.4.3 基于PCA的短消息语义分析

LSA只允许词之间的线性关系,LSA主题倾向于以人们认为没有意义的方式将词组合起来。

4.4.4 基于截断的SVD的短消息语义分析

4.4.5 基于LSA的垃圾短消息分类的效果

我们可以使用查询向量和文档库中所有主题向量之间的余弦相似性来查找其中语义最相似的消息。离该查询向量最近的文档(最短距离)对应的是含义最接近的文档。垃圾性只是混入的短消息主题中的一种“意义”。

无论使用哪种算法或具体实现来进行语义分析,都应该首先对词袋向量或TF-IDF向量进行归一化。否则,可能会在主题之间产生巨大的尺度差异,主题之间的尺度差异会降低模型区分细微的、出现不频繁的主题的能力。

4.5 隐性狄利克雷分布(LDiA)

与LSA不同的是,LDiA假设词频满足狄利克雷分布。相对于LSA的线性数学,LDiA则更精确地给出了将词赋给主题的统计信息。

LDiA假设每篇文档都由某个任意数量的主题混合(线性组合)而成,该数量是在开始训练LDiA模型时选择的。LDiA还假设每个主题都可以用词的分布(词项频率)来表示。文档中每个主题的概率或权重,以及某个词被分配到一个主题的概率,都假定一开始满足狄利克雷概率分布。这就是该算法得名的来历。

4.5.1 LDiA思想

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

LDiA生成的主题对人类来说更容易理解和解释。这是因为经常一起出现的词被分配给相同的主题,而人类的期望也是如此。LSA(PCA)试图将原本分散的东西分散开来,而LDiA则试图将原本接近的东西接近在一起。

为了让接近的高维空间向量在低维空间中继续保持接近,LDiA必须以非线性的方式变换(扭转和扭曲)空间(和向量)。这种过程很难实现可视化,除非在某个三维空间上执行上述操作并将结果向量投影到二维空间。

4.5.3 LDiA+LDA=垃圾消息过滤器

4.5.4 更公平的对比:32个LDiA主题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值