《TensorFlow自然语言处理》—1.3 传统的自然语言处理方法
1.3 传统的自然语言处理方法
NLP问题的传统或经典的解决方法是几个关键步骤组成的顺序工作流,它是一种统计方法。当仔细研究传统的NLP学习模型时,我们将能够看到一系列明显不同的任务,例如,通过删除不需要的数据来预处理数据,使用特征工程来获得文本数据的良好数值表示,借助于训练数据来使用机器学习算法,以及预测新的不熟悉数据的输出。其中,如果要在给定NLP任务上获得良好性能,特征工程是最耗时且最关键的步骤。
1.3.1 理解传统方法
解决NLP任务的传统方法涉及一组不同的子任务。首先,需要对文本语料库进行预处理,重点是减少词汇量和干扰。所谓干扰,指的是会干扰算法,使其无法捕获完成任务所需的重要语言信息的那些东西(例如,标点符号和停止词被删除)。
接下来,介绍几个特征工程步骤。特征工程的主要目标是使算法的学习更容易,这些特征通常是手工设计的,并且偏向于人类对语言的理解。特征工程对于经典NLP算法非常重要,因此,性能最佳的系统通常具有最佳的工程特征。例如,对于情感分类任务,你可以用解析树表示一个句子,并为树中的每个节点/子树标上正、负或中性标签,以此将该句子分类为正面或负面。此外,特征工程阶段可以使用外部资源(如词汇数据库WordNet)来发现更好的特征。我们很快就会看到一种简单的特征工程技术,称为词袋。
接下来,该学习算法将使用所获得的特征和可选的外部资源,来学习如何在给定任务中表现良好。例如,对于文本摘要任务,包含单词同义词的同义词库是很好的外部资源。最后,执行预测。预测非常简单,只需将新的数据输入学习模型,然后获得对应的预测标签。传统方法的整个过程如图1.2所示。
图1.2 经典NLP的一般方法
传统方法示例:生成足球比赛摘要
为了深入理解传统的NLP方法,让我们从足球比赛的统计数据中考虑自动生成文本的任务。我们有几组游戏统计数据(例如,得分、罚球和黄牌)和记者的比赛报道,将它们作为训练数据。假设对于给定的比赛,有一个从每个统计参数到该参数的摘要中最相关短语的映射。我们的任务是,对于一场新的比赛,我们需要生成一个关于这场比赛的看上去自然的摘要。当然,可以简单地从训练数据中找到与新比赛最匹配的统计数据,并找到相应的摘要,但是,这里采用更智能和更优雅的文本生成方式。
如果要结合机器学习技术来生成自然语言,那么可能会执行一系列诸如预处理文本,分词、特征工程、学习和预测等操作。
预处理文本涉及一系列操作,比如词干化(例如,listened转化为listen)和删除标点符号(例如,删除“!”和“;”),以减少词汇量(即特征),从而减少所需的内存。明白词干化不是一项微不足道的操作很重要。词干化看似依赖于一组简单规则的操作,比如从动词中删除ed(例如,listened的词干是listen),然而,开发一个好的词干算法需要的不仅仅是一个简单的规则库,因为某些词的词干可能很棘手(例如,argued的词干是argue)。此外,由于不同语言的复杂程度不一样,正确词干化所需的工作量可能各不相同。
分词是可能需要执行的另一个预处理步骤。分词是将语料库划分为小实体(例如,单词)的过程。对于像英语这样的语言来说,这可能很容易,因为单词是孤立的。但是,对于某些语言(如泰语、日语和中文)而言,情况并非如此,因为这些语言的词语界定方式不一样。
特征工程用于将原始文本数据转换为数值形式,以便基于数据训练模型,例如,稍后将讨论把文本转换为词袋表示,或使用n-gram表示。但请记住,有良好效果的经典模型依赖于更智能的特征工程技术。
下面是一些特征工程技术:
(1)词袋:这是一种根据单词出现频率来创建特征表示的特征工程技术。例如,考虑以下句子:
Bob went to the market to buy some f?lowers?
Bob bought the f?lowers to give to Mary?
这两句话的词汇表是:
接下来,将为每个句子创建一个大小为V(词汇表大小)的特征向量,以表示该词汇表中每个单词出现在句子中的次数。在这个例子中,句子的特征向量分别如下:
词袋方法的一个关键缺陷是,由于不再保留单词的顺序,它会丢失上下文信息。
(2)n-gram:这是另一种特征工程技术,它将文本分解为由n个字母(或单词)组成的较小元素。例如,2-gram会将文本分成两个字母(或两个单词)的实体。例如,考虑这句话:
这句话的字母级别n-gram分解如下:
这句话的单词级别n-gram分解如下:
这种字母级别表示法的优点是,在大型语料上词汇表大小比我们使用单词作为特征的词汇表要小得多。
接下来,需要让我们的数据形成某种结构,以便能够将其输入学习模型。例如,将使用以下形式的数据元组(统计量,是用于解释统计信息的短语):
学习过程可以包括三个子模块:隐马尔可夫模型(HMM)、句子规划器和话语规划器。在我们的例子中,HMM可以通过分析相关短语的语料库来学习语言的形态结构和语法属性。更具体地说,我们把数据集中的每个短语连起来形成一个序列,其中,第一个元素是统计量,后跟解释它的短语。然后,我们将根据当前序列,通过要求HMM预测下一个单词来训练它。具体地说,首先将统计量输入HMM,然后得到HMM的预测,之后,将最后一个预测与当前序列连接起来,并要求HMM给出另一个预测,以此类推。这将使HMM能够在给定统计量的情况下输出有意义的短语。
接下来,我们可以用一个句子规划器来纠正可能出现在短语中的任何语言错误(形态或语法错误)。例如,一个句子规划器可以将“I go house”这个短语纠正为“I go home”。它可以使用规则数据库,这个数据库包含使含义得以正确表达的方法(例如,在动词和“house”之间需要有介词)。
现在,可以使用HMM为给定的统计数据集生成一组短语,然后,需要把这些短语聚合在一起,使得使用这些短语创作的文章是可阅读的,并且是流畅的。例如,考虑三个短语:“Player 10 of the Barcelona team scored a goal in the second half”、“Barcelona played against Manchester United”和“Player 3 from Manchester United got a yellow card in the f?irrst
half”。按此顺序排列这些句子没有多大意义。我们希望按如下顺序排列:“Barcelona played against Manchester United, Player 3 from Manchester United got a yellow card in the rst half, and Player 10 of the Barcelona team scored a goal in the second half”。为此,我们使用话语规划器,话语规划器可以对需要传达的信息进行排列和结构组织。
现在可以获得一组任意的测试统计数据,并按照前面的处理流程得到一篇解释该统计数据的文章,如图1.3所示。
图1.3 解决语言建模任务的经典方法示例的一个步骤
在这里要注意,这是一个在很高层次上的说明,仅涵盖传统NLP方式中最有可能包含的主要的一般性组成部分。取决于我们有兴趣解决的具体应用,细节可能会有很大差异。例如,某些任务可能需要其他特定应用的关键组成部分(机器翻译中的规则库和对齐模型)。然而,在本书中,我们并没有强调这些细节,因为这里的主要目标是讨论更先进的自然语言处理方法。
- 点赞
- 收藏
- 关注作者
评论(0)