[转]NLP模型与深度学习
1、自然语言处理简介 根据工业界的估计,仅有21% 的数据是以结构化的形式展现的[1]。在日常生活中,大量的数据是以文本、语音的方式产生(例如短信、微博、录音、聊天记录等等),这种方式是高度无结构化的。如何去对这些文本数据进行系统化分析、理解、以及做信息提取,就是自然语言处理(Natural Language Processing,NLP)需要做的事情。 在NLP中,常见的任务包括:自动摘要、机器翻译、命名体识别(NER)、关系提取、情感分析、语音识别、主题分割等。 在NLP与深度学习系列文章中,不会逐一解释各个NLP任务,而是主要介绍深度学习模型在NLP中的应用。整体分为以下几点: 首先介绍NLP基本流程以及在数据预处理方面的技术;而后会介绍最初期使用的神经网络:SimpleRNN、LSTM;继而引入使得文本处理性能得到很大提升的Attention机制以及Transformer模型;最后介绍近几年非常热门的预训练模型BERT,以及如何使用BERT预训练模型的例子 下面首先介绍的NLP任务的一个基本工作流程。 2、NLP 任务流程 典型的NLP任务分为以下几步: 数据收集 数据标注 文本标准化(Normalization) 文本向量化/特征化(Vectorization/Featuring) 建模 前期主要是数据收集,并根据任务类型对数据做标注(例如情感分析中,对好、坏评价做标注)。接下来的2个步骤均是对文本进行预处理的步骤,为了提取文本中隐含的信息,最后通过机器学习建模,达到任务目标。其中 3 – 5 这几步是迭代的流程,为了模型的精度更准确,需要迭代这个过程,进行不断尝试。 数据收集以及标注并非在本文讨论范围内,接下来介绍文本标准化的目标与方法。 3、文本标准化 由于文本数据在可用的数据中是非常无结构的,它内部会包含很多不同类型的噪点。所以在对文本进行预处理之前,它暂时是不适合被用于做直接分析的。 文本预处理过程主要是对 文本数据进行清洗与标准化。这个过程会让我们的数据没有噪声,并可以对它直接做分析。 而文本标准化是NLP任务里的一个数据预处理过程。它的主要目标与常规数据预处理的目标一致:提升文本质量,使得文本数据更便于模型训练。 文本标准化主要包含4个步骤: 大小写标准化(Case Normalization) 分词(Tokenization)与 停止词移除(stop word removal) 词性(Parts-of-Speech,POS)标注(Tagging) 词干提取(Stemming) 3.1 大小写标准化 大小写标准化是将大写字符转为小写字符,一般在西语中会用到。但是对于中文,不需要做此操作。而且Case Normalization 也并非是在所有任务场景中都有用,例如在英文垃圾邮件分类中,一般一个明显的特征就是充斥着大写单词,所以在这种情况下,并不需要将单词转为小写。 3.2 分词 文本数据一般序列的形式存在,分词是为了将文本转为单词列表,这个过程称为分词(tokenization),转为的单词称为token。根据任务的类别,单词并非是分词的最小单位,最小单位为字符。在一个英语单词序列中,例如 ride a bike,单词分词的结果为 [ride, a, bkie]。字符分词的结果为[r, i, d, e, a, b, k, e]。 在中文中,分词的最小单元可以不是单个字,而是词语。 3.3 停止词移除 停止词移除是将文本中的标点、停顿词(例如 is,in,of等等)、特殊符号(如@、#等)移除。大部分情况下,此步骤能提升模型效果,但也并非在任何时候都有用。例如在骚扰邮件、垃圾邮件识别中,特殊字符相对较多,对于分辨是否是垃圾邮件有一定帮助。 3.4 词性标注 语言是有语法结构的,在大部分语言中,单词可以被大体分为动词、名词、形容词、副词等等。词性标注的目的就是就是为了一条语句中的单词标注它的词性。 3.5 词干提取 在部分语言中,例如英语,一个单词会有多种表示形式。例如play,它的不同形式有played,plays,playing等,都是play的变种。虽然他们的意思稍微有些区别,但是大部分情况下它们的意思是相近的。词干提取就是提取出词根(例如play 就是它各种不同形式的单词的词根),这样可以减少词库的大小,并且增加单词匹配的精度。 这些文本标准化的步骤,可以用于对文本进行预处理。在进一步基于这些文本数据进行分析时,我们需要将它转化为特征。根据使用用途不同,文本特征可以根据各种技术建立而成。如:句法分析(Syntactical Parsing),N元语法(N-grams),基于单词计数的特征,统计学特征,以及词向量(word embeddings)等。 ...