基本概念
自然语言处理(Natural Language Processing,简称NLP)是人工智能和语言学领域的一个分支,它涉及到计算机和人类(自然)语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人 类语言的数据。NLP结合了计算机科学、人工智能和语言学的技术和理论,旨在填补人与机器之间的交 流隔阂。
总结:人类语言与计算机语言之间的互通
相关的概念
1.语言(Language):是人类用于沟通的一种结构化系统,可以包括声音、书写符号或手势。
2.自然语言(Natural Language):是指自然进化中通过使用和重复,无需有意计划或预谋而形成的 语言。
3.计算机语言学(Computational Linguistics):是语言学和计算机科学之间的跨学科领域,主要包括
- 计算机辅助语言学(Computer-aided Linguistics):利用计算机研究语言的学科,主要为语言学家所实践。
- 自然语言处理(NLP):使计算机能够解决以自然语言表达的数据问题的技术,主要由工程师和计算机科学家实践
研究范畴
研究范围广泛,包括但不限于语言理解(让计算机理解输入的语言)、语言生成(让计算机生成人类可以理解的语言)、机器翻译(将一种语言翻译成另一种语言)、情感分析(分析文本中的情绪 倾向)、语音识别和语音合成等。
中文处理差异
在中文环境下,自然语言处理的定义和应用也与英文环境相似,但需要考虑中文的特殊性,如中文分 词、中文语法和语义分析等,因为中文与英文在语言结构上有很大的不同,这对NLP技术的实现提出了特殊的挑战。自然语言处理使计算机不仅能够理解和解析人类的语言,还能在一定程度上模仿人类的语言使用方式,进行有效的沟通和信息交换。
NLP可选性
- 自然语言处理(NLP)就是在机器语言和人类语言之间沟通的桥梁,以实现人机交流的目的。
- NLP 就是让机器学会处理我们的语言!
NLP的应用方向
自然语言理解
典型的自然语言理解(NLU)任务包括
- 情感分析:对给定的文本输入,在给定的选项范围内分析文本的情绪是正面还是负面;
- 文本分类:对给定的文本输入,在给定的选项范围内对文本进行二分类或多分类;
- 信息检索:搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处 理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务;
- 抽取式阅读理解:对给定的文本输入,用文本中的内容回答问题;
- 语义匹配:对给定的两个文本输入,判断是否相似;
- 自然语言推理:对给定的两个文本输入,判断是蕴涵、矛盾还是无关;
- 命名实体识别:对给定的文本输入,返回含有命名实体及其对应标签的映射,例如{'糖尿病':'疾 病'};
- 文本摘要:对给定的文本输入,用文本中的内容对文本进行摘要
自然语言转换
自然语言转换(NLT)任务包括但不限于
- 机器翻译:将一种自然语言转换为另一种自然语言,包括从源语言到目标语言的文本或语音的转 换; 机器学习模型目前常用seq2seq模型来实现,由Encoder和Decoder组成。
- 非抽取式阅读理解:接受给定文本的输入,能够理解自然语言问题,并回答问题;
- 文本风格转换:将文本从一种风格转换为另一种风格,如将正式文本转换为非正式文本;
- 语音识别:将人类的语音转换为文本,用于语音指令、口述文本、会议记录等。
- 意图改写:对给定的文本输入,将原始文本中的意图或核心信息重新表述,以不同的词汇和句式表 达相同的意思,同时保持原意的准确性和完整性;
自然语言生成
自然语言生成(NLG)任务则更为灵活了。
- 文本生成:根据给定的上下文或提示,自动生成文本,如自动写作、诗歌创作、故事生成等。https://github.com/yanqiangmiffy/char-rnn-writer
- 语音合成:将文本转换为听起来自然的语音,用于有声书、导航系统、虚拟助手等。
- 聊天机器人:能够与人类实现多轮对话的聊天助手;
- 文本到知识:从文本中提取知识,构建知识图谱或语义网络;
- 语义解析:将自然语言表达转换为形式化的逻辑表示,用于命令解析、查询理解等。
应用方向
- 序列到序列(Sequence-to-Sequence, Seq2Seq)问题是指模型将一个输入序列转换为一个输出序列 的任务。这类问题可以同步或异步进行,具体取决于输入序列和输出序列的处理方式。
同步序列到序列(Synchronous Seq2Seq)
- 特点:输入序列和输出序列是严格对齐的,即在处理一个输入序列的元素时,模型会即时产生相应 的输出序列的元素。
- 典型应用:通常应用在那些输入和输出之间存在一对一对齐关系的任务中。例如,逐词对齐、词性 标注(POS tagging)、命名实体识别(NER)。
- 优点:处理速度快,因为输入和输出同步生成,不需要等待整个输入处理完毕。
- 缺点:要求输入和输出严格对齐,不适合处理输入输出之间存在较复杂映射关系的任务。
异步序列到序列(Asynchronous Seq2Seq)
- 特点:输入序列和输出序列之间不需要严格对齐,模型可以在处理完整个输入序列后,再开始生成 输出序列。大多数的Seq2Seq模型都是异步的。
- 典型应用:用于需要对整个输入序列进行全局上下文理解后,才能生成输出的任务。例如,机器翻 译(句子级别)、文本摘要生成、问答系统等。经典的Seq2Seq模型,如基于RNN或Transformer 的模型,通常都属于异步类型。
- 优点:模型可以利用输入序列的全局上下文信息进行更准确的输出生成。
- 缺点:生成速度较慢,因为需要等待整个输入序列处理完毕后才开始生成输出。
NLP基础概念
1.些NLP中常用的概念名词
- 词表/词库(Vocabulary):文本数据集中出现的所有单词的集合。
- 语料库(Corpus):用于NLP任务的文本数据集合,可以是大规模的书籍、文章、网页等。
- 词嵌入(Word Embedding):将单词映射到低维连续向量空间的技术,用于捕捉单词的语义 和语法信息。
- 停用词(Stop Words):在文本处理中被忽略的常见单词,如"a"、"the"、"is"等,它们通常对 文本的意义贡献较 小。
- 分词(Tokenization):将文本分割成一个个单词或标记的过程,为后续处理提供基本的单位。
- 词频(Term Frequency):在给定文档中,某个单词出现的次数。
- 逆文档频率(Inverse Document Frequency):用于衡量一个单词在整个语料库中的重要性, 是将词频取倒数并取 对数的值。
- TF-IDF(Term Frequency-Inverse Document Frequency):一种常用的文本特征表示方法, 综合考虑了词频和逆文档频率。
- 词袋模型(Bag of Words):将文本表示为一个单词的集合,忽略了单词的顺序和语法结构。
- N-gram:连续的N个单词构成的序列,用于捕捉文本中的局部特征和上下文信息。
- 序列:指的是一个按顺序排列的元素集合。这些元素可以是字符、单词、句子,甚至更抽象的 结构。序列的每个元素都有特定的顺序和位置,这意味着它们不能随意重排,否则会影响其意义或功能。
2.序列的常见类型
字符序列
- 一个字符串就是一个字符序列,每个字符按顺序排列。
- 例子: "hello" 是一个由 h、e、l、l、o 组成的字符序列。
单词序列
- 一句话可以看作是一个单词序列,每个单词按照一定顺序排列。
- 例子: "I love NLP" 是一个由 I、love 、 NLP 组成的单词序列。
3. 时序数据
- 在时间序列中,元素是按时间顺序排列的,常用于预测问题。
- 例子:股票价格数据可以看作是随时间变化的数值序列。
4. 语音序列
- 在语音处理任务中,语音信号可以被分解为按时间顺序排列的帧序列(特征向量序列)。
5. 其他序列
- 序列还可以表示一些更抽象的结构,比如DNA序列(由碱基组成的序列)、事件序列等
NLP的基本流程(概念梳理)
中文NLP的基本流程和英文相比有一些特殊性,主要表现在文本预处理环节。首先,中文文本没有像 英文单词那样用空格隔开,因此不能像英文一样直接用最简单的空格和标点符号完成分词,一般需要用分词 算法完成分词。其次,中文的编码不是utf-8,而是Unicode,因此在预处理的时候,有编码处理的问题。中文NLP的基本流程由语料获取、语料预处理、文本向量化、模型构建、模型训练和模型评价等六 部分组成。
语料获取
在进行NLP之前,人们需要得到文本语料。文本语料的获取一般有以下几种方法。
- 利用已经建好的数据集或第三方语料库,这样可以省去很多处理成本。
- 获取网络数据。很多时候要解决的是某种特定领域的应用,仅靠开放语料库无法满足需求,这时就需 要通过爬虫技术获取需要的信息。
- 与第三方合作获取数据。通过购买的方式获取部分需求文本数据。
语料预处理
获取语料后还需要对语料进行预处理,常见的语料预处理如下。
- 去除数据中非文本内容。大多数情况下,获取的文本数据中存在很多无用的内容,如爬取的一些 HTML代码、CSS标签和不需要的标点符号等,这些都需要分步骤去除。少量非文本内容可以直接用 Python的正则表达式删除,复杂的非文本内容可以通过 Python的 Beautiful Soup库去除。
- 中文分词。常用的中文分词软件有很多,如jieba、FoolNLTK、HanLP、THULAC、NLPIR、LTP 等。其中jieba是使用 Python语言编写的,其安装方法很简单,使用“pip install jieba”命令即可完成安 装。
- 词性标注。词性标注指给词语打上词类标签,如名词、动词、形容词等,常用的词性标注方法有基于规则的算法、基于统计的算法等。
- 去停用词。停用词就是句子中没必要存在的词,去掉停用词后对理解整个句子的语义没有影响。中 文文本中存在大量的虚词、代词或者没有特定含义的动词、名词,在文本分析的时候需要去掉。
文本向量化(特征工程)
文本数据经过预处理去除数据中非文本内容、中文分词、词性标注和去停用词后,基本上是干净的文 本了。但此时还是无法直接将文本用于任务计算,需要通过某些处理手段,预先将文本转化为特征向 量。一般可以调用一些模型来对文本进行处理,常用的模型有词袋模型(Bag of Words Model)、独热 表示、TF-IDF 表示、n元语法(n-gram)模型和 Word2Vec模型等。
模型构建
文本向量化后,根据文本分析的需求选择合适的模型进行模型构建,同类模型也需要多准备几个备选 用于效果对比。过于复杂的模型往往不是最优的选择,模型的复杂度与模型训练时间呈正相关,模型复杂度越高,模型训练时间往往也越长,但结果的精度可能与简单的模型相差无几。
- NLP中使用的模型包括机器学习模型和深度学习模型两种。
- 常用的机器学习模型有SVM、Naive Bayes、决策树、K-means 等。
- 常用的深度学习模型有TextCNN、RNN、LSTM、GRM、Seq2Seq、transformer等。
模型训练
模型构建完成后,需要进行模型训练,其中包括模型微调等。训练时可先使用小批量数据进行试验, 这样可以避免直接使用大批量数据训练导致训练时间过长等问题。
在模型训练的过程中要注意两个问 题:
- 一个为在训练集上表现很好,但在测试集上表现很差的过拟合问题;
- 另一个为模型不能很好地拟合 数据的欠拟合问题。
同时;还要避免出现梯度消失和梯度爆炸问题。
仅训练一次的模型往往无法达到理想的精度与效果,还需要进行模型调优迭代,提升模型的性能。模型调优往往是一个复杂、冗长且枯燥的过程,需要多次对模型的参数做出修正;调优的同时需要权衡模型的精度与泛用性,在提高模型精度的同时还需要避免过拟合。
在现实生产与生活中,数据的分布会随着时间的推移而改变,有时甚至会变化得很急剧,这种现象称为分布漂移(Distribution Drift)。
当一个模型随着时间的推移,在新的数据集中的评价不断下降时,就意味着这个模型无法适应新的数据的变化,此时模型需要进行重新训练。
模型评价
模型训练完成后,还需要对模型的效果进行评价。
模型的评价指标指主要有准确率(Accuracy)、精确率(Precision)、召回率、F1值、ROC曲线、AUC线等。
针对不同类型的模型,所用的评价指标往往也不同,例如分类模型常用的评价方法有准确率、精确率AUC曲线等。
同一种评价方法也往往适用于多种类型的模型。