【入门 NLP 项目前,你必须掌握哪些理论知识?】

引言

从今年1月开始,我一直致力于从非结构化文本中提取信息的项目。在开始这个项目之前,我对自然语言处理(NLP)领域一无所知。当我第一次开始研究这个领域时,我很快找到了一本名为“Python Natural Language Processing”(Book Address :)的书。这本书对我来说太理论化,但知识基本上是正确的,所以它对我来说仍然是一个宝贵的资源。接下来,我找到了Dipanjan Sarkar(书籍地址:)的“Python文本分析”,并从头到尾阅读了这本书。这本书真的很棒。它教会了我开始使用NLP项目所需的所有技术技能。最近,本书的第二版也已发布,并且已对之前的版本进行了大量扩展。

在本文中,我想概述我在学习NLP技术时学习的一些问题。我知道已经有很多很棒的文章讨论过相同的问题(例如Sarkar撰写的一系列文章:),但对于作者来说,写下这些问题来理清你的知识是有帮助的。

1.使用NLP处理文本

2.从文本中提取特征

3.监督学习文本

4.无监督的文本学习

典型的文本预处理工作流程包括以下四个步骤:

句子分割

2.文本规范化和分词

3.词性标注(POS)

4.命名实体识别

在大多数应用中,不必执行所有上述预处理步骤。对命名实体识别的需求取决于应用程序的特定业务需求,而词性标注通常由现代工具自动完成,从而改进了规范化和分词步骤的某些部分。

句子分割

预处理工作流程的第一步是将文本拆分为多个句子。在许多语言环境(例如英语)中,标点符号(尤其是句点,感叹号和问号)可用于指示句子的结尾。但是,句点字符也可以用于缩写(例如Ms.或U.K.),在这种情况下句点字符不表示句子结束。在这种情况下,我们使用缩写来避免对句子边界进行错误分类。当文本包含特定域中的术语时,必须创建其他缩写词典以避免不自然的令牌。

分词和规范化

分词时的极端情况

“Particidistation”是指将文本分为单词和标点符号(“标记”)。与句子分割的情况一样,此时标点符号的处理仍然是一个具有挑战性的问题。例如,英国应该被视为一个词,“不要”不应该被分为两个词:“做”和“不”。

词干化和词形还原是文本规范化过程的重要组成部分。归一化包括词干和形态恢复。在词干提取过程中,通过删除后缀(例如-ed和-ing)来识别单词的词干。由此产生的词干不一定是一个词。同样,形态修复涉及删除前缀和后缀的过程,其与词干的重要区别在于其结果是一种自然语言。这里的结果称为引理。茎提取和形态恢复的例子如下表所示:

茎拔除与形态恢复的差异

这两种技术都可以通过将单词转换为基本形式来减少文本中的噪音。对于大多数应用程序(例如文本分类或文档聚类),保留单词的含义很重要,因此最好使用形态简化而不是词干提取。例如,“会议”(名词,会议)和“会议”(gerony,meeting)将通过词干来“满足”,因此它们不能准确地保留原始含义,它们各自的词语是“会面”和“见面”。

其他标准化技术包括:缩写扩展,删除数字和标点符号,更正典型语法错误等。大多数这些操作都可以使用正则表达式完成。

词性标注

此步骤基于单词的上下文和定义,将令牌分类为不同的词性(POS)类别,也称为单词分类或词汇分类。 POS类别包括名词,动词,介词,副词等。英语环境中的词法分类示例如下图所示。词性标注增强了形态恢复的效果,这对于命名实体识别是必需的。

常用POS类的例子

通常有三种类型的词性标注器:基于规则的,基于统计的,以及基于深度学习的词性标注器。基于规则的词性标注符依赖于显式规则。例如,文章的标题必须后跟名词以标记该标记。基于统计的词性标注器使用概率模型来标记单个单词或单词序列。基于规则的词性标注器非常精确,但与语言高度相关。

基于统计的注释器更容易创建和与语言无关,但代价是精确度。今天,尽管该行业开始转向深度学习解决方案(预标签句子集的训练模型),但基于规则和统计模型仍然是混合的。基于混合方法和深度学习的方法提高了上下文敏感的词性标注任务的性能。

命名实体识别

在识别命名实体之前,必须对块进行分块。块分析意味着分割和标记一组单词。最常用的块是一个名词短语块,由一个限定词,一个形容词和一个名词组成(例如,“一个快乐的独角兽”(一个快乐的独角兽)。句子“他找到了一个快乐的独角兽”(他找到了)一个快乐的独角兽)由两个“他”和“一个快乐的独角兽”组成。

命名实体是指示特定对象(例如,人,祖先,地点,日期,地缘政治实体)的名词短语。命名实体识别(NER)的目标是识别文本中提到的命名实体。

带有NER标签的句子

正如Brink等人所定义的,机器学习(ML)是利用历史数据中的模式来决定新数据[1],或者谷歌首席决策科学家Cassie Kozyrkov说:“机器学习是一对。事情,根据你对某事的描述,告诉你应该给它什么标签(参见相关阅读:)。当你面临的问题过于复杂而无法通过编程解决时(如区分),应用机器学习技术非常有用图像中不同类型的猫,或者如果解决方案需要适应时间的变化(例如识别手写文本)。的。

通常,机器学习分为监督学习和无监督学习。当我们的历史数据包含标签时(例如,下图中的“鸭子”和“非鸭子”),我们可以使用有监督的学习。另一方面,如果数据不包含标签,则应使用无监督学习。无监督机器学习方法旨在总结或压缩数据。

下面我们通过垃圾邮件检测和异常检测的示例来说明这两种学习方法之间的区别。在有人监督的学习中,我们提供带有“垃圾邮件/非垃圾邮件”标签的培训数据;在无监督学习中,我们需要根据(未标记的)电子邮件训练集检测异常电子邮件。

监督学习与无监督学习的区别

所有机器学习算法都需要数字数据作为输入。这意味着必须将文本数据转换为数字数据。这是NLP世界中特征提取步骤的本质。

基于计数的策略

将文本转换为数字向量的最简单方法是使用单词bag(BoW)方法。 bag方法的原理是提取文本中的所有唯一单词并创建称为词汇表的文本语料库。通过使用该词汇表,每个句子可以表示为由0和1组成的向量,这取决于词汇表中的单词是否出现在句子中。下图显示了使用BoW方法在五个标准化句子上创建的矩阵的示例。

例句

从上面的句子

创建的BoW特征矩阵

要向词汇表添加更多上下文信息,您可以将令牌组合在一起。这种方法称为N-gram方法。 N-gram是N个令牌的序列。例如,2-gram(bigram)是两个单词的序列,而trigram是三个单词的序列。

选择单词列表后,无论是1克,2克还是3克,都需要计算克出现的次数。我们可以使用BoW方法。这种方法的缺点是它使流行语(高频词)过于重要。因此,这里最流行的方法称为频率 - 逆文档频率方法(TFIDF)。

TF-IDF的抽象解释

TF-IDF由单词频率(TF)和逆文档频率(IDF)组成,前者表示单词相对于句子长度的重要性,后者表示单词相对于单词的行数。文档的总行数。直观地说,如果一个单词经常出现在目标文档中,但不经常出现在所有文档的集合中,则其TF-IDF值将更高。下图显示了根据我们之前看到的例子创建的TF-IDF浣熊的得分与更频繁的词“兔子”的得分有何不同。

根据例句

创建的TF-IDF特征矩阵

高级战略

虽然基于技术的方法可以用来描述单词序列(n-grams),但它们不能捕获单词的语义上下文,而这正是许多NLP应用程序的核心。我们通过嵌入技术来解决这个问题。我们可以使用嵌入来将单词表转换为向量,这样具有相似上下文的单词具有相似的距离。

“word2vec”(相关论文:)是谷歌开发的一个框架。它使用一个浅层的神经网络来训练单词嵌入模型。

有两种类型的“word2vec”算法:(1)skip-gram,用于预测给定单词的上下文。(2)连续词袋(cbow)模型用于预测给定上下文的下一个词。

全局向量方法(Glove,)使用共现统计来创建向量空间。此方法是Word2vec的扩展,希望嵌入更好的单词。下图显示了一个由示例句构成的手套词嵌入示例,以及这些词嵌入的图形表示。正如我们所想象的,相似的概念在距离上是相似的。

0×2523个

使用手套嵌入创建的特征矩阵

0×2524个

把一个词投射到二维空间中

此外,Facebook还开发了一个名为“FastText”的Word2vec版本。FastText是一个深度学习框架,在创建向量空间时考虑到单个字符。

根据标签的格式(也称为目标),监督学习可分为两类。如果目标是一个类别的离散值(cat/dog),那么它就是一个分类问题;如果目标是一个连续值(price),那么它就是一个回归问题。在处理文本时,我们经常遇到分类问题。

典型的监督学习工作流程

上图显示了文本分类系统的典型工作流程。我们首先将数据划分为训练集和测试集。我们需要预处理和标准化训练和测试数据,然后我们可以提取功能。大多数流行的特征提取技术已在本文前面的章节中介绍过。当文本数据转换为数字形式时,我们可以将机器学习算法应用于它。

我们将此过程称为训练模型 - 模型从特征中学习模式以预测标签。可以首先使用称为超参数调整过程的模型参数来优化模型参数,以实现更好的性能。然后使用在模型之前未遇到的测试数据来评估所得到的模型。模型的性能通过各种指标来衡量,例如准确度,准确度,召回率,F1值等。基本上,建立这些分数是为了比较真实和预测标签。

典型的文本分类算法包括:

多项式朴素贝叶斯 - 该算法属于朴素贝叶斯算法族,并建立在贝叶斯定理的应用上,假设每个特征彼此独立。多项式朴素贝叶斯是朴素贝叶斯算法的扩展,用于具有两个以上不同标签的分类任务(多分类问题)。

Logistic回归 - 该算法使用Sigmoid函数来预测分类得分。流行的“sklearn”软件包允许调整模型参数,以便该算法也可用于多标签分类问题。

线或超平面(如果有两个以上的特征,则需要在此处创建多维空间)以分隔不同的类。

随机森林 - 该算法是一种在不同数据子集中并行训练多个决策树的综合方法。

梯度电梯(GBM) - 这是一系列综合学习方法,可训练一系列弱学习者(如决策树)以获得准确的结果。 XGBoost是这一系列算法中最受欢迎的实现之一。

分类算法列表中的最后两项是使用许多预测算法来实现更好的泛化的集成方法。集成方法的效果通常比单个模型更平均,并且集成方法在更大的数据集上更好地工作。然而,正如Sarkar在[6]中所证明的那样,集成方法不一定能更好地处理文本数据。

评估指标

混淆矩阵和从中派生的各种指标

混淆矩阵是评估机器学习模型的最简单,最直观的工具之一。它给出了实际值和预测值之间的关系。虽然混淆矩阵本身是一个强大的工具,但与之相关的术语被用作其他测量方法的基础。关于混淆矩阵的重要术语如下:

真实情况 - 我们预测情况是积极的,现实是积极的。

真正的负面例子 - 我们预测负面和实际负面。

误报 - 我们预测正面和负面。

假阴性病例 - 我们预测阴性和实际阳性。

从混淆矩阵导出的度量如下:

准确度 - 模型所做的正确预测数与预测总数之比。

精确度 - 正确预测样本数与正样本数之比,即所选项目的相关数量。

召回 - 正确预测的样本数与所有阳性样本数的比率,即选择了多少相关项目。

F1值 - 使用调和平均混合精度和召回率获得的单个分数。调和平均值是x和y相等时的平均值。但是当x和y不同时,它将接近比较大值更小的值。

仅当标签包含大致相同数量的数据点时,准确度才是有用的度量。以上四个指标的范围均为0-1,其中最佳得分为1,最差得分为0。

当要分析的数据集没有标签时,可以使用无监督的机器学习技术(例如聚类)。聚类是无监督学习的一个分支,其目的是将类似的对象组合在一起。

常用的聚类算法分为以下几类:

基于连接的聚类 - 也称为层次聚类,根据其距离连接数据点。有两种类型的策略可以连接这些点:(1)压缩。这是一种“自下而上”的方法,其中每个数据点开始形成自己的集群,然后迭代地合并为成对的集群。 (2)分体式。这是一个“自上而下”的分割,整个数据空间以递归方式分割。对于精简层次聚类,有两个必要的度量:说明两个数据点相似性的距离度量(典型示例是:欧几里德距离,汉明距离,余弦距离),以及描述数据点相似度的A连接标准集群。

基于质心的聚类算法 - 根据数据点与聚类质心的接近程度将数据划分为不同的聚类。 “K-Means”是这种算法最流行的实现。算法的基本流程如下:(1)选择簇的数量k,(2)将数据点分配给簇,(3)计算簇的质心,(4)重新分配数据点到最近的质心表示的簇(5)重复前两步,直到质心不再变化。

基于密度的聚类算法 - 划分数据空间并形成不同密度的区域。其中,DBSCAN和OPTICS是两种最流行的算法,它们提取数据空间中有气味麦克风的区域,并将“早晨”数据留在稀疏区域。 OPTICS算法试图克服DBSCAN在边界和密度数据集上表现不佳的缺点。

文本摘要任务可分为两部分:主题建模和自动文本摘要。其中,自动文本摘要是使用机器学习算法创建文档摘要或一组文档的过程。这些算法在处理大量文档和长文档时效果最佳。

另一方面,主题建模侧重于从文档集合中提取主题。主题模型通常被称为概率统计模型,因为它们使用统计技术(例如奇异值分解(SVD))来从文本中发现潜在的语义结构。 SVD依赖于线性代数中的矩阵分解技术将特征矩阵分解为更小的部分。潜在语义索引(LSI),潜在Dirichlet分布(LDA)和非负矩阵分解(NNMF)等方法使用线性代数中的技术将文档内容划分为不同的主题,这些主题基本上是单词聚类。如下所示。当文本高度多样化时,主题建模算法往往会获得更好的结果。

主题建模原理示意图

在本文中,我概述了读者在开始处理与自然语言处理和机器学习相关的项目时可能遇到的重要问题。这篇文章只涉及这个领域的皮毛。我甚至没有涉及使用迁移学习的语言学习的令人兴奋的新发展,读者可以从Sebastian Ruder的博客文章中读到这些。

在我看来,现在是练习NLP技术在工业中应用的好时机。正如Yoav Goldberg在最近的一次会议上所说,大多数行业同事仍处于使用正则表达式来解决问题的阶段(相关阅读:通过理解我在本文中提出的理论并将其应用于现实生活中)在问题中,你可以真的让公众受益。雷锋王雷锋网雷锋网

Yoav Foldberg在spaCy IRL会议上报告了NLP应用的最新进展

[1] H. Brink,J。W. Richards和M. Fetherolf,Real-world Machine Learning(2017),Manning Publications

[2] S. Shalev-Shwartz,S。Ben-David,理解机器学习:从理论到算法(2014),剑桥大学出版社

[3] T. Mikolov,I。Sutskever,K。Chen,G。S Corrado和J. Dean。单词和短语的分布式表示及其组合性(2013),神经信息处理系统的进展26

[4] J. Pennington,R。Socher和C. D. Manning,GloVe:全局向量词表示(2014),在EMNLP。

[5] P. Bojanowski,E。Grave,A。Joulin和T. Mikolov。使用子字信息(2016),arXiv预印本

丰富单词向量

[6] D.萨卡尔。使用Python的文本分析:自然语言处理的实践者指南(2019),Apress

通过

一些信息可以帮助您跳转到原始文本

http://www.whgcjx.com/bdsLltttt/M9zhmU.html