当前,大规模预训练语言模型的强大对话问答、文本生成能力,将自然语言处理(NLP)的研究和应用推向了新一轮的热潮。NLP是计算机科学、人工智能和语言学等学科交叉的前沿领域。NLP的应用和研究范围非常的广泛,个人是没有找到那种特别好的、详细且成体系的文档的。 本文根据自然语言处理主要的几个子领域及其包含的主要任务简单总结了一份NLP的学习路线,也可以说是知识体系。后续个人的技术文章也将主要围绕NLP去展开,大致也会按照这个路线去记录相关的基础知识、方法、技术、工具及实践案例等等。所以本文不仅仅是整理了一份学习路线,更是个人未来很长一段时间的学习规划。 如果你也对NLP感兴趣,欢迎关注“九陌斋”了解后续更多精彩内容:微信公众号【九陌斋】、腾讯云开发者社区、CSDN、个人博客网站(www.jiumoz.com)
下面的鱼骨图就是个人整理的NLP相关的一个学习路线,某种意义上可以理解为一个知识体系,本文将尽量结合示例简单的去描述一下这些基本概念。
其实关于’NLP知识体系’或者’NLP学习路线’的相关文章是很多的,网上一搜就有不少。但是很多内容就是围绕学术角度展开的,不太契合个人的一个理解和规划,所以简单总结出了以下的一个简单的结构,当然这也并不是完全完善的一个体系。很多子任务的归属也不是特别的严谨。
NLP也就是自然语言处理,是一门研究人与计算机之间用自然语言进行有效通信的学科。自然语言处理融合了语言学、计算机科学和数学等多个学科的理论和方法。NLP的工作原理是先接收由人类使用自然语言发送的信息,再通过基于概率的算法进行翻译和转换,最后输出可以被计算机理解和执行的结果。NLP的两个核心任务是自然语言理解(NLU)和自然语言生成(NLG)。自然语言理解指让计算机能够理解和解释人类的语言,而自然语言生成则是将非语言格式的数据转换成人类的语言格式,以达到人机交流的目的。
自然语言处理(NLP)的发展可以追溯到上个世纪50年代,经历了多个阶段和技术革新,以下是NLP发展的详细历程:
这一块简单的记录一下各个子任务的概念,更多内容还是要关注后续每个任务的详细博客;
文本清洗(Text Cleaning)
文本清洗指对原始文本进行处理以去除噪声和不相关的信息。常见的清洗操作包括去除HTML标签、特殊字符、标点符号、多余的空格等。文本清洗的目的是为后续处理提供更干净、更规范化的数据。
示例:假设我们有以下原始文本:
<div class="intro">Natural language processing (NLP) is a field of artificial intelligence which</div> focuses on enabling computers to understand and interpret human language.
我们可以进行如下文本清洗操作:
Natural language processing (NLP) is a field of artificial intelligence which focuses on enabling computers to understand and interpret human language.
Natural language processing is a field of artificial intelligence which focuses on enabling computers to understand and interpret human language.
natural language processing is a field of artificial intelligence which focuses on enabling computers to understand and interpret human language.
natural language processing is a field of artificial intelligence which focuses on enabling computers to understand and interpret human language
分词(Tokenization)
分词指将文本分割成离散的单词或标记的过程。分词是NLP中的重要步骤之一,为后续处理提供了基本的单位。
示例:假设我们有以下原始文本:
I love natural language processing.
我们可以进行如下分词操作:
["I", "love", "natural", "language", "processing"]
去停用词(Stopword Removal)
去停用词指移除在文本处理中无实际意义或频率很高的常见词汇,如介词、冠词、连词等。这些词对于某些任务来说可能没有太多信息量,需要被移除。
示例:假设我们有以下原始文本:
I love natural language processing.
我们可以进行如下去停用词操作:
["love", "natural", "language", "processing"]
常见的停用词列表可以通过开源的NLP工具库(如NLTK)获得。
移除低频词(Removing Low-Frequency Words)
移除低频词指移除在整个文本语料库中出现频率较低的单词,可以减少数据中的噪音和数据维度。一般通过设定一个阈值,移除在语料库中出现次数低于该阈值的单词。
示例:假设我们有以下原始文本:
I love natural language processing.
如果我们将阈值设为2,则只有love和natural两个单词可以保留,而language和processing则会被移除。
构建词典(Building Vocabulary)
构建词典是为文本中的所有单词分配唯一的索引,以便后续进行处理和表示。一般通过遍历整个语料库,将每个单词与一个唯一的标识符(整数)相关联来构建词典。
示例:假设我们有以下原始文本:
I love natural language processing.
我们可以进行如下构建词典操作:
{"I": 0, "love": 1, "natural": 2, "language": 3, "processing": 4}
词向量表示(Word Vector)
词向量表示是将文本中的单词转换为数值向量的过程。常见的词向量表示方法包括独热编码、词袋模型(Bag of Words)、词频-逆文档频率(TF-IDF)和词嵌入(Word Embedding)等。
示例:假设我们有以下原始文本:
I love natural language processing.
我们可以进行如下词向量化操作:
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
具体来说,独热编码表示每个单词位置上都是1,而其他位置上都是0;词袋模型表示每个单词出现的次数;TF-IDF表示单词出现的频率和它在整个语料库中出现的频率之间的关系;词嵌入通过计算单词之间的相似性来表示它们在向量空间中的位置。
命名实体识别(Named Entity Recognition)
命名实体识别是一种文本处理任务,用于识别出文本中具有特殊意义的命名实体,比如人名、地名、组织机构名等。这有助于我们从文本中提取关键信息,并理解实体之间的关系。
示例:假设我们有以下文本:
苹果公司成立于1976年,创始人是史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗南·韦恩。
在命名实体识别中,我们可以将文本中的命名实体识别为以下类别:
苹果公司
史蒂夫·乔布斯、史蒂夫·沃兹尼亚克、罗南·韦恩
通过命名实体识别,我们可以识别文本中重要的实体信息。
词干化和词形还原(Stemming and Lemmatization)
词干化和词形还原是将单词转化为其词干或基本形式的过程,以消除不同词形对文本分析的影响。词干化是一种较为简单的处理方式,只取词的基本部分,而词形还原则考虑了上下文和词性等因素。
示例:假设我们有以下文本:
Cats are running in the park, and they love to play with mice.
在词干化和词形还原中,我们可以将文本中的单词进行如下处理:
cat, are, run, in, the, park, and, they, love, to, play, with, mice
cat, be, run, in, the, park, and, they, love, to, play, with, mouse
通过词干化和词形还原,我们可以将不同词形的单词统一为其基本形式,减少文本中的噪音和冗余。
词性标注(Part-of-Speech Tagging)
词性标注是为文本中的每个单词赋予一个词性标签,用于表示单词在句子中的语法角色。标注的词性包括名词、动词、形容词等,对语法分析和其他NLP任务具有重要作用。
示例:假设我们有以下文本:
Cats are running in the park.
词性标注可以为句子中的每个单词分配以下标签:
Cats, park
are, running
in
the
通过词性标注,可以更好地理解句子的语法结构和单词在句子中所扮演的角色。
句法树解析
*句法树(syntactic tree)*解析是将句子分析为树状结构的过程,其中每个节点代表一个短语或单词,边表示它们之间的语法关系。我们可以通过逐步拆分句子来构建句法树,直到达到最小的短语和单词。
例如,考虑句子:“The cat is sitting on the mat.”(这只猫正坐在垫子上。)通过句法树解析,我们可以生成以下句法树:
sitting
/ \
is on
/ \
cat mat
/
The
在句法树中,最顶层的节点是整个句子的根节点,而每个单词则成为树的叶子节点。边表示短语之间的语法关系,例如动词"sitting"与其主语"is"之间的关系,以及动词"sitting"与介词短语"on the mat"之间的关系。通过句法树解析,我们能够清晰地看到每个单词之间的层次关系和结构。
依存关系分析
依存关系分析是描述句子中单词之间依存关系的过程。每个单词都被看作一个节点,而边则表示这些单词之间的依存关系,即一个单词是另一个单词的修饰或从属关系。
以句子:“The cat is sitting on the mat.”(这只猫正坐在垫子上。)为例,通过依存关系分析,我们可以得到以下依存关系图
sitting
/ \
is mat
/ |
cat on
|
The
在这个依存关系图中,每个单词都表示为一个节点,而边表示单词之间的依存关系。例如,动词"sitting"依赖于"is",表示它是"is"的补足语;名词"mat"依赖于介词"on",表示它是"on"的修饰词;名词"cat"依赖于冠词"The",表示它是"The"修饰的名词。
通过依存关系分析,我们可以更好地理解句子中单词之间的修饰和从属关系,帮助我们解释和理解句子的语法结构
层次聚类、k-means聚类和谱聚类
等。
假设我们有一组新闻文章,涵盖体育、科技、政治等不同主题。我们可以使用文本聚类算法,如k-means聚类,对这些文章进行聚类。通过计算文章之间的相似度,将相似主题的文章归为一类。例如,将所有体育类的文章聚为一簇,将科技类的文章聚为另一簇,以此类推。
朴素贝叶斯、支持向量机(SVM)、深度学习模型如卷积神经网络(CNN)和循环神经网络(RNN)
等。
假设我们要将一组电影评论分为正面评价、负面评价和中立评价。我们可以使用文本分类算法,如基于机器学习的朴素贝叶斯分类器。通过对标注好的训练数据进行学习,该分类器能够根据评论的特征将其归类到合适的类别中。然后,对于未标记的评论,我们可以使用这个分类器进行分类,确定其评价种类。
Latent Dirichlet Allocation (LDA)和Probabilistic Latent Semantic Analysis (PLSA)
等。
假设我们有一组新闻文章,我们希望了解这些文章中的主题。通过应用主题模型(如LDA),我们可以发现每个主题的单词分布以及每篇文章属于每个主题的概率。这样一来,我们可以根据每个主题的特征来判断它是否与某个领域或话题相关。
基于规则的方法、基于机器学习的方法(如朴素贝叶斯、支持向量机)和深度学习模型(如循环神经网络、Transformer)
等。
假设我们有一组社交媒体上的用户评论,我们希望了解用户对于某款产品的情感倾向。通过情感分析,我们可以分析评论中的情感词汇出现频率,并根据情感词汇的极性判断评论的情感倾向。例如,如果评论中出现了积极的情感词汇频率较高,我们可以判断该评论是正面情感。
基于词典的方法、基于语境的方法和基于语义相似度的方法
等。
假设我们有一段文本:“钢琴家在舞台上奏出美妙的乐曲。”这里的“钢琴家”可能指音乐家,也可能指一种昆虫。通过词义消歧,我们可以考虑上下文信息,例如“奏出美妙的乐曲”,从而确定“钢琴家”的确切含义是指音乐家。
信息抽取在知识图谱构建和维护中扮演着重要的角色。 知识图谱是一种以图形结构存储和表示知识的方式,通过节点和边来表示实体和实体之间的关系。 信息抽取可以帮助从文本中自动抽取出结构化的知识,并将其填充到知识图谱中。
谷歌(组织机构)和美国加利福尼亚州的硅谷(地点)
。
谷歌和硅谷之间的总部所在地关系(located_in)
。
“去”这个触发词,并抽取出相关的参与者(约翰、一家餐厅)、时间(昨天)和动作(去)
。
算法和查询语句
来实现问题与答案的匹配。
假设有一个问题:“中国的首都是哪里?”对于这个问题,我们可以在事先构建好的地理知识库中进行检索,通过搜索“中国首都”相应的实体,返回正确的答案“北京”。
对自然语言理解、语言生成、实体识别等多个模块进行深度学习和优化
。
假设有一个问题:“你见过克里斯蒂亚诺·罗纳尔多吗?”对于这个问题,我们需要识别问题中的实体“克里斯蒂亚诺·罗纳尔多”,并从多个数据源中获得相关信息,最终生成答案“是的,他是一位职业足球运动员,曾经效力于皇家马德里和曼联等多家豪门俱乐部。”
自然语言理解、对话管理、自然语言生成
等多个方面的技术。
假设有一个用户需要查询旅游信息,对话系统可以通过与用户交互来确定用户需求,例如通过意图识别确定用户想要查询的目的地、时间和住宿信息,然后返回相应的旅游方案和预订服务。
“秋夜月悬空,寒风吹落杨梢。静夜思悠悠,一弯明月伴我闲游。”
“数字化技术正深刻地改变着人们的生活,对各个行业都有巨大的影响。”
“科学家近日发现一种新型的治疗癌症的方法,该方法基于基因编辑技术,有望在临床应用中取得重要突破。”
“今天的天气非常晴朗。”
这篇文章的结构,如开头介绍旅行的背景,中间叙述具体的旅行经历,最后总结旅行的感受和体验
。
“小明今天去超市的目的可能是买苹果。”
“牛奶应该需要冷藏保存,所以它被放在冰箱里。”
需要掌握的基本技能
这一块也是针对后续的一些文章内容的,不是针对小白或者有一定了解的同学的;
主要是两方面:
首先就是编程基础,要对python有基本的概念,对其语法有一些了解;不能代码结构都看不懂,或者安装包都不会吧。
然后就是数据结构和算法,熟悉常见的数据结构,如列表、字典等,了解常见的算法,如查找、排序等。
以上就是个人整理的NLP的知识体系的全部内容,请期待后续的文章吧!!!