目录
在自然语言处理中,从文本中产生其数值向量实际是一个特别“有损”的特征提取过程。尽管如此,词袋向量从文本中保留了足够的信息内容来产生有用和有趣的机器学习模型。
所谓词干还原,指的是将某个词的不同屈折变化形式统统“打包”到同一个“桶”或者类别中。
在NLP中,分词是一种特殊的文档切分过程。而文档切分能够将文本拆分成更小的文本块或片段,其中含有更集中的信息内容。文档切分可以是将文档分成段落,将段落分成句子,将句子分成短语,或将短语分成词条(通常是词)和标点符号。
分词是NLP流水线的第一步,因此它对流水线的后续处理过程具有重要的影响。分词器将自然语言文本这种非结构化数据切分成多个信息块,每个块都可以看成可计数的离散元素。这些元素在文档中的出现频率可以直接用于该文档的向量表示。上述过程立即将非结构化字符串(文本文档)转换成适合机器学习的数值型数据结构。元素的出现频率可以直接被计算机用于触发有用的行动或回复。或者,它们也可以以特征方式用于某个机器学习流水线来触发更复杂的决策或行为。通过这种方式构建的词袋向量最常应用于文档检索或者搜索任务中。
对句子进行切分的最简单方法就是利用字符串中的空白符来作为词的“边界”。
通过“独热”表示我们可以利用计算机读入向量并进行一系列数学运算,就像对其他向量或者数值列表进行的运算一样。这样就可以将向量输入任何需要这类向量的自然语言处理流水线中。
基于独热向量的句子表示方法保留了原始句子的所有细节,包括语法和词序。
存储所有0并试图记住所有文档中的词序并没有太大意义,也不太现实。我们真正想要做的实际是将文档的语义压缩为其本质内容。我们想将文档压缩成单个向量而不是一张大表,而且我们将放弃完美的“召回”过程,我们想做的是提取文档中的大部分而非全部含义(信息)。
如果把所有的独热向量加在一起,而不是一次一个地“回放”它们,我们会得到一个词袋向量。这个向量也被称为词频向量,因为它只计算了词地频率,而不是词的顺序。这个具备合理长度的单一向量可以用来表示整篇文档或整个句子,其长度只相当于词汇表的大小。
略
如果能够度量两个向量词袋之间的重合度,就可以很好地估计它们所用词的相似程度,而这也是它们语义上重合度的一个很好的估计。
将文档表示成二值向量具有强大的作用,多年来,它一直是文档检索和搜索的支柱。所有现代CPU都有硬连线内存寻址指令,这些指令可以有效地哈希、索引和搜索大量这样的二值向量。虽然这些指令是为另一个目的(索引内存位置以从内存中检索数据)而构建的,但是它们在搜索和检索文本的二值向量运算中同样有效。
1.正则表达式的工作机理
略
2.改进的用于分词的正则表达式
略
3.缩略语
略
1.n-gram概念
当一个词条序列向量化成词袋向量时,它丢失了词序中所包含的很多含义。将单词条的概念扩展到多词条构成的n-gram,NLP流水线就可以保留语句词序中隐含的很多含义。
如果词条或者n-gram出现得特别少,它们就不会承载太多其他词的关联信息,而这些关联信息可以用于帮助识别文档的主题,这些主题可以将多篇文档或者多个文档类连接起来。因此,罕见的n-gram对分类问题作用不显著。
由于词的组合结果要比独立的词多得多,因此词汇表的大小会以指数方式接近语料库中所有文档中的n-gram数。如果特征向量的维度超过所有文档的总长度,特征提取过程就不会达到预期的目的。事实上机器学习模型和向量之间的过拟合几乎不可能避免,这是由于向量的维数多于语料库中的文档数而造成的。
2.停用词
在任何一种语言中,停用词指的是哪些出现频率非常高的常见词,但是对短语的含义而言,这些词承载的实质性信息内容却少得多。
从传统上说,NLP流水线都会剔除停用词,以便减少从文本中提取信息时的计算压力。虽然词本身可能承载很少的信息,但是停用词可以提供n-gram中的重要关系信息。
如果我们有足够的内存和带宽来运行大规模词汇表下NLP流水线中的所有步骤,那么可能不必为在这里或那里忽略几个不重要的词而忧虑不已。如果担心大规模词汇表于小规模训练集之间发生过拟合的话,那么有比忽略停用词更好的方法来选择词汇表或者降维。在词汇表中保留停用词能够允许文档频率过滤器更精确地识别或者忽略哪些在具体领域中包含最少信息内容的词或n-gram。
我们已经看到了词汇表大小对NLP流水线性能的重要影响,另一种减少词汇表大小的方法是将词汇表归一化以便意义相似的词条归并成单一归一化的形式。这样做一方面可以减少需要在词汇表中保留的词条数,另一方面也会提高语料库中意义相似但是拼写不同的词条或n-gram之间的语义关联。减小词汇表的规模可以降低过拟合的概率。
1.大小写转换
将不统一的大小写形式统一化称为大小写归一化,或者称为大小写转换。将单词或字符的大小写统一是一种减小词汇表规模的方法,可以推广到NLP的流水线。它有助于将意义相同(同样的拼写方式)的单词统一化为单个词条。
通过大小写归一化,我们试图在语法规则和词条在句中的位置影响其大小之前,将这些词条还原成其归一化形式。
为了让模型能够处理那些出现古怪大小写形式的文本,大小写归一化可以减少对机器学习流水线的过拟合情况。大小写归一化对搜索引擎来说尤其有用。对搜索而言,归一化能够增加对特定查询找到的匹配数,这也成为搜索引擎(或其他任何分类模型)的召回率。
2.词干还原
另一种常用的词汇表归一化技术是消除词的复数形式、所有格的词尾甚至不同的动词形式等带来的意义上的微小差别。这种识别词的不同形式背后的公共词干的归一化方法称为词干还原。词干还原会去掉词的后缀,从而试图将具有相似意义的词归并到其公共词干。不一定要求词干必须是一个拼写正确的词,而只需要是一个能够代表词的多种可能拼写形式的词条或者标签。
词干还原的主要好处之一是,机器中的软件或者语言模型所需记录其意义的词的个数得以压缩。它在限制信息或意义损失的同时,会尽可能减小词汇表的规模,这在机器学习中称为降维。它能够帮助泛化语言模型,使模型能够在属于同一词干的词上表现相同。
3.词性归并
如果知道词义之间可以互相关联,那么可能就能够将一些词关联起来,即使它们的拼写完全不一样。这种更粗放的将词归一化成语义词根即词元的方式称为词义归并。
由于考虑了词义,相对于词干还原和大小写归一化,词形归并是一种潜在的更具精确性的词的归一化方法。通过使用同义词表和词尾相关的知识库,词形归并工具可以确保只有那些具有相似意义的词才会被归并成同一词条。
4.使用场景
无论是词干还原还是词性归并,都会减小词汇表的规模,同时增加文本的歧义性。但是词性归并工具基于词在文本中的用法和目标词义,能够尽可能地保留文本的信息内容。因此,有些NLP包如spaCy不提供词干还原工具,而只提供词性归并工具。
如果应用中包含搜索过程,那么词干还原和词性归并能够通过将查询词关联到更多文档而提高搜索的召回率。但是,词干还原、词性归并甚至大小写转换将显著降低搜索结果的正确率和精确率。
无论NLP流水线中使用的是单个词、n-gram、词干还是词元作为词条,每个词条都包含了一些信息。这些信息中的一个重要部分是词的情感,即一个词所唤起的总体感觉或感情。这种度量短语或者文本块的情感的任务称为情感分析,是NLP中的一个常见应用。
机器既不会有人类的那种倾向性,又没有人类的情感触发器。而且,并不仅仅是人类才可以处理自然语言文本和从文本中提取信息甚至意义,NLP流水线也能够快速客观地处理大量用户反馈,而不会出现什么倾向性。同时,NLP流水线能够输出文本的正向性或者负向性以及任何其他的感情质量的数值等级。
有两种情感分析的方法,分别是:
1.基于规则的算法,规则由人来撰写;
2.基于机器学习的模型,模型是机器从数据中学习而得到。
第一种情感分析的方法使用用户设计的规则(有时称为启发式规则)来度量文本的情感。
第二种基于机器学习的方法利用一系列标注语句或者文档来训练机器学习模型以产生规则。机器学习的情感模型在经过训练以后能够处理输入文本并输出该文本的一个情感数值得分。
略
朴素贝叶斯模型试图从一系列文档集合中寻找对目标(输出)变量有预测作用的关键词。当目标变量是要预测的情感时,模型将寻找那些能预测该情感的词。朴素贝叶斯模型的一个好处是,其内部的系数会将词或词条映射为类似于VADER中的情感得分。只有这时,我们才不必受限于让人来决定这些分数应该是多少,机器将寻找任何其认为的”最佳“得分。
1.本章实现了分词功能,并且可以为应用定制分词器。
2.n-gram分词功能可以保留文档中的一些词序信息。
3.归一化及词干还原将词分组,可以提高搜索引擎的召回率,但是同时降低了正确率。
4.词形归并以及像casual_tokenize()一样的定制化分词器可以提高正确率,减少信息损失。
5.停用词可能包含有用的信息,去掉停用词不一定总有好处。