文章目录
前言
在数字化时代,自然语言处理(NLP)已成为人机交互的桥梁。本文将引导读者从基础到应用,全面了解NLP技术。首先,我们将探索NLP的两大支柱:自然语言理解(NLU)和自然语言生成(NLG),理解它们如何分别让机器理解与生成人类语言。接着,文章将深入中文文本的分词技术,特别是jieba
分词的使用。进一步,我们将学习文本的数值表示方法,包括one-hot编码、Word2Vec和Embedding模型,这些技术赋予机器学习模型处理语言的能力。最后,通过TensorFlow Playground,我们将直观体验神经网络在NLP中的应用。
NLP_20">一、NLP
NLP_21">NLP(自然语言处理)
NLP(Natural Language Processing) 是自然语言处理的缩写,是人工智能和语言学领域的交叉学科,旨在让计算机能够理解和处理人类语言。NLP 的目标包括让计算机能够读取、解析、理解和生成人类语言文本,从而进行各种与语言相关的任务,如文本分类、情感分析、机器翻译、问答系统、聊天机器人等。
NLP 的研究内容主要以下几个方面:
- 词法分析:包括分词、词性标注、命名实体识别等。
- 句法分析:分析句子结构,如短语划分、依存关系分析等。
- 语义分析:理解句子或文本的含义,包括词义消歧、语义角色标注等。
- 信息抽取:从文本中提取结构化信息,如关系抽取、事件抽取等。
- 文本生成:根据特定要求生成自然语言文本,如文本摘要、文本续写等。
- 文本分类:将文本划分为预定义的类别,如情感分析、主题分类等。
- 机器翻译:将一种语言的文本转换为另一种语言的文本。
- 问答系统:根据用户提出的问题,从文本或知识库中检索答案。
为了实现这些任务,NLP 研究者通常会使用各种算法和模型,如基于规则的方法、基于统计的方法、基于深度学习的方法等。近年来,随着深度学习技术的快速发展,基于神经网络的 NLP 模型,如循环神经网络(RNN)、长短期记忆网络(LSTM)、Transformer 等,在 NLP 任务中取得了显著的性能提升。
自然语言处理(NLP Natural Language Processing) 是一种专业分析人类语言的人工智能。就是在机器语⾔和⼈类语言之间沟通的桥梁,以实现人机交流的目的。
- 2个核心任务:
- 自然语言理解 NLU (Natural Language Understanding)
- 自然语言生成 - NLG (Natural Language Generation)
NLU(自然语言理解)
自然语言理解(Natural Language Understanding, NLU) 旨在使计算机能够理解和处理人类语言。它通过人工智能技术,从语音或文本输入中获取信息,并对其进行解析以提取有意义的内容。
通俗来说,NLU就是机器需要理解人的意思。举个栗子🌰,试着理解下面两句话(再试试看从机器的角度理解呢):
- 冬天到了,衣服能穿多少穿多少
- 夏天到了,衣服能穿多少穿多少
应用场景:
NLU广泛应用于语音识别、情感分析和垃圾邮件过滤等领域。例如,在智能助手中,NLU负责识别用户的查询意图和相关实体,以便做出准确的回应。
典型应用:
- 机器翻译(有道、百度翻译等)
- 机器客服(各种app里面的机器客户)
- 智能音箱(小爱音箱、天猫精灵等)
技术手段:
NLU的技术手段包括分词、词性标注、句法分析和语义角色标注等。这些技术帮助计算机从自然语言中提取有用的信息,并将其转化为可操作的数据。
NLG(自然语言生成)
自然语言生成(Natural Language Generation, NLG) 是将结构化数据转换为人类可以理解的自然语言的过程。NLG系统分析数据集,创建有意义的叙述,从而生成自然语言输出。
应用场景:
NLG的应用范围包括聊天机器人、语音助手和自动内容生成等。例如,企业可以利用NLG来创建自动报告,或者在客户服务中生成响应用户问题的文本。
典型应用:
- 自动写作(自动写新闻,自动写论文等)
- 聊天机器人 (各种手机开发的内置聊天机器人,智能音响,商场导航机器人等)
- BI (Business Intelligence) 的解读和报告生成 (各行各业解读报告生成比如体检报告)
技术手段:
NLG的技术手段包括文本模板生成、基于规则的生成和统计语言模型等。这些方法使得系统能够根据不同的输入数据和上下文生成自然、流畅的语言。
NLP的发展历程:
- 神经语言模型(2001): 引入前馈神经网络作为第一个神经语言模型,为后续语言建模任务奠定基础。
- 多任务学习(2008): Collobert和Weston首次将多任务学习应用于神经网络,通过共享参数在不同任务之间实现信息传递。
- 词嵌入(2013): 引入词嵌入作为语言建模的关键组成部分,将单词映射到连续向量空间。
- NLP神经网络(2013): 开始出现基于神经网络的NLP模型,标志着从传统方法向深度学习方法的过渡。
- Sequence-to-Sequence模型(2014): 引入了序列到序列(seq2seq)模型,广泛应用于机器翻译等任务。
- 注意力机制(2015): 注意力机制的引入提高了模型对输入中不同部分的关注度,改善了序列处理任务的性能。
- 基于记忆的网络(2015): 利用记忆网络处理长距离依赖关系,提高了对长文本序列的建模能力。
- 预训练语言模型(2018): 引入预训练语言模型,通过大规模数据的预训练在特定任务上取得显著性能提升。
常见的NLP任务:
- 分词: 将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的 处理分析工作。
- 词性标注: 为每个单词分配一个词性标签(如名词、动词、形容词等),以帮助识别实体。
- 命名实体识别(NER): 从文本中识别和分类命名实体,如人名、地名、组织机构名、日期、时间、货币等。
二、分词
1.什么是分词
分词就是将句子、段落或文章这样的长文本分解为以字或词为单位的数据结构,以便进行后续处理和分析。
需要注意的是中文分词和英文分词会有所不同。英文文本中有空格作为自然分隔符,而中文则需要通过特定方法进行分词。并且,英文单词有丰富的变形,需要进行词形还原和词干提取。中文分词面临一些难点,例如没有统一标准、歧义词切分和新词识别等问题。
分词 在 NLP(自然语言处理) 中扮演着至关重要的角色,是许多NLP任务和应用的基石。以下是分词在NLP中的一些主要作用:
- 文本预处理:分词是文本预处理的重要步骤之一。在将文本数据输入到NLP模型之前,通常需要对文本进行清洗、去除停用词、分词等预处理操作。分词能够将连续的文本切分成独立的词汇单元,便于后续的分析和处理。
- 特征提取:分词有助于从文本中提取有意义的特征。在NLP任务中,如文本分类、情感分析、命名实体识别等,分词可以将文本转化为适合机器学习模型处理的特征向量。通过分词,可以提取出文本中的关键词、短语或句子,作为模型的输入特征。
- 语言理解:分词对于计算机理解人类语言具有重要意义。通过将连续的文本切分成词汇单元,计算机可以更容易地识别和理解文本中的语义信息。分词可以帮助计算机识别出文本中的主语、谓语、宾语等语法成分,进而理解文本的含义和上下文关系。
- 信息检索:在信息检索领域,分词是构建高效搜索引擎的关键技术之一。通过分词,搜索引擎可以将用户的查询语句和文档库中的文本进行匹配,从而找到相关的文档。分词可以确保查询语句和文档中的词汇单元在语义上保持一致,提高检索的准确性和效率。
- 机器翻译:在机器翻译中,分词是翻译过程中的重要环节。通过将源语言文本进行分词,机器翻译系统可以更容易地识别出文本中的词汇单元和语法结构,进而生成准确的翻译结果。分词还可以帮助机器翻译系统处理不同语言之间的词汇对齐和语法差异问题。
- 问答系统:在问答系统中,分词有助于将用户的问题和系统中的知识库进行匹配。通过分词,系统可以将用户的问题切分成独立的词汇单元,并与知识库中的信息进行比对和匹配,从而找到相关的答案。分词可以提高问答系统的准确性和响应速度。
分词的方法大致分为3类:
- 基于词典匹配
- 基于统计
- 基于深度学习
2.常见的分词工具
- jieba: jieba是Python编写的一个中文分词库,提供了多种分词模式和关键词抽取等功能。
- ansj分词器: ansj分词器是一个基于n-最短路径和CRF模型的中文分词开源工具,由Java编写,支持个性化分词。
- Hanlp: Hanlp是由Java编写的一款中文自然语言处理工具,支持分词、词性标注、命名实体识别等多种功能。
- Stanford: Stanford汉语分词器是基于条件随机场(CRF)模型的线性链预测模型,可以对中文文本进行分词和词性标注。
- 哈工大LTP: 哈工大LTP是哈尔滨工业大学开发的语言技术平台,提供包括分词在内的多项中文自然语言处理功能。
- KCWS分词器: KCWS分词器是一款轻量级的中文分词器,基于字典和双向最大匹配算法实现。
- IK: IK是一个轻量级中文分词工具,基于词典的分词,使用了正向最大匹配算法。
- 清华大学THULAC: 清华大学自然语言处理与社会人文计算实验室研发的中文分词工具包,具有高性能和高准确率。
- ICTCLAS: ICTCLAS是中国科学院计算技术研究所开发的一套中文分词系统,支持多种分词标准和自定义词典。
3.jieba分词
jieba
是Python编写的一个中文分词库,提供了多种分词模式和关键词抽取等功能。
- 安装:
pip install jieba
- 使用:
- 1.导入jieba库:
import jieba
- 2.使用jieba进行分词
- 1.导入jieba库:
jieba提供了多种分词模式和方法,以下是几种常用的用法:
- 精确模式:将句子最精确地切开,适合文本分析。
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))
# Default Mode: 我/ 来到/ 北京/ 清华大学
- 全模式:把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))
# Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
import jieba
seg_list = jieba.cut_for_search("我来到北京清华大学")
print("Search Mode: " + "/ ".join(seg_list))
# Search Mode: 我/ 来到/ 北京/ 清华/ 华大/ 大学/ 清华大学
- 添加自定义词典:jieba支持用户自定义词典,可以在分词时包含jieba词库中没有的词。
import jieba
jieba.load_userdict("userdict.txt") # 加载自定义词典
seg_list = jieba.cut("他来到了网易杭研大厦")
print("/ ".join(seg_list))
# 输出(不加 userdict.txt): 他/ 来到/ 了/ 网易/ 杭研/ 大厦
# 输出(加 userdict.txt):他/ 来到/ 了/ 网易/ 杭研大厦
其中,userdict.txt 内容为:
网易
杭研大厦
注意:userdict.txt
是自定义词典文件,每一行包含一个词,支持多行。词典的编码格式必须为utf-8
,否则会出现乱码。
其他更详细的信息可参考:https://github.com/fxsjy/jieba
三、词向量
1.什么是词向量
词向量(Word Embedding) 是自然语言处理(NLP) 中用来表示词汇的一种高维向量。这种向量通常是通过训练神经网络模型从大量文本数据中学习得到的,能够捕捉词汇之间的语义和语法关系。
传统的词表示方法是基于独热编码(One-Hot Encoding),即为每个词在词汇表中分配一个唯一的索引,然后创建一个与词汇表大小相同的向量,其中只有该词的索引位置为1,其余位置为0。然而,这种方法存在几个问题:
- 维度灾难:随着词汇表的增大,向量的维度也会急剧增加,导致计算效率低下。
- 语义缺失:独热编码无法表示词汇之间的语义关系,例如“猫”和“狗”在语义上是相近的,但它们的独热编码表示却是完全独立的。
为了克服这些问题,研究者们提出了词向量的概念。词向量是一种低维、稠密的向量表示,通常维度在几十到几百之间。每个词都被映射到一个这样的向量上,并且向量之间的相似性可以反映词汇之间的语义关系。
词向量的训练通常基于无监督学习的方法,例如Word2Vec(包括Skip-Gram和CBOW两种模型)、GloVe、FastText等。这些模型通过最大化文本序列中词汇的共现概率来学习词向量,使得在语义上相近的词汇在向量空间中的距离也更近。
词向量在NLP任务中有着广泛的应用,例如文本分类、情感分析、命名实体识别、机器翻译等。通过将文本中的词汇表示为词向量,可以将NLP任务转化为机器学习问题,并利用各种机器学习算法进行建模和预测。此外,词向量还可以作为特征输入到深度学习模型中,以进一步提高模型的性能。
2.文本张量表示方法
文本张量表示是一种将文本数据转换为数值形式的方法,以便计算机可以对其进行处理和分析。在自然语言处理(NLP)中,文本张量通常用于表示词向量、字符向量或句子向量等。
["⼈⽣", "该", "如何", "起头"]
==>
# 每个词对应矩阵中的⼀个向量
[[1.32, 4,32, 0,32, 5.2],[3.1, 5.43, 0.34, 3.2],[3.21, 5.32, 2, 4.32],[2.54, 7.32, 5.12, 9.54]]
3.常见的词向量模型
3.1 ont-hot 编码
无论是人类还是计算机都很难直接将语言字符进行计算。我们期望着把语言字符转换为一种便于计算的形式,也就是把对应的词汇用数值类型的数据进行唯一表示。最简单的一种将语言字符转换为便于计算的一种方式就是 one-hot编码
。
Color ==> Color_red Color_green Color_blue
----- --------- ----------- ----------
red ==> 1 0 0
green ==> 0 1 0
blue ==> 0 0 1
red ==> 1 0 0
在这个例子中,我们为每一个颜色创建了一个新的列,并且在原始数据中的颜色对应的列上标记为 1,其余列标记为 0。
One-Hot Encoding
的主要优点是它创建了一个稀疏矩阵,这个矩阵可以很容易地用于大多数机器学习算法。然而,它的缺点也很明显,那就是当类别的数量非常大时,会导致特征空间变得非常大,这可能会增加计算成本,并可能导致过拟合。此外,One-Hot Encoding
不能很好地处理有序类别变量(即类别之间存在自然顺序的情况)。
- 优点:
1)解决了分类器处理离散数据困难的问题
2)一定程度上起到了扩展特征的作用- 缺点:
1)没有考虑到词与词之间的顺序问题
2)全部都是词与词之间相互独立的表示
3)one-hot得到的特征是离散的,稀疏的
为了解决
one-hot编码
中词与词之间独立的缺点,引入embedding矩阵
。embedding矩阵
是一个行数为one-hot编码列数,列数自定义的一个随机权重矩阵。
3.2 Word2Vec
Word2vec
也叫 Word Embeddings,中文名“词向量”。作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)
。在word2vec
出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder
。
Word2Vec
是由谷歌于2013年正式提出的,但是对词向量的研究可以追溯到2003年论文《a neural probabilistic language model》。但正是谷歌对Word2Vec
的成功应用,让词向量的技术得以在业界迅速推广,使Embedding
这一研究话题成为热点。毫不夸张地说,Word2Vec
对人工智能时代Embedding
方向的研究具有奠基性的意义。
Word2Vec
是一种在自然语言处理中广泛使用的词嵌入技术,它通过训练神经网络模型将文本中的每个单词映射为一个高维向量,从而捕捉单词之间的语义关系。以下是一个Word2Vec
的案例,用于说明其工作原理和应用。
案例背景
假设我们有一个包含大量文本数据的语料库,我们的目标是学习这些文本中单词的语义表示,以便在后续的NLP任务中使用。
Word2Vec模型训练
- 数据预处理
- 对文本数据进行清洗,去除标点符号、停用词等无关信息。
- 将文本数据切分为单词或短语,构建词汇表。
- 模型选择
- 选择Word2Vec模型,并确定其参数,如向量维度(例如,100维)、窗口大小(例如,5)等。
- Word2Vec提供了两种主要的训练模型:Skip-Gram和CBOW(Continuous Bag of Words)。Skip-Gram模型通过给定一个中心词来预测其上下文单词,而CBOW模型则通过上下文单词来预测中心词。
- 训练过程
- 使用语料库中的文本数据训练Word2Vec模型。在训练过程中,模型会学习单词之间的共现关系,并将每个单词映射为一个高维向量。
- 训练完成后,模型会生成一个词汇表到向量的映射表,其中每个单词都对应一个唯一的向量表示。
Word2Vec应用
- 语义相似度计算
- 利用Word2Vec生成的词向量,我们可以计算两个单词之间的语义相似度。例如,通过计算“猫”和“狗”两个单词向量的余弦相似度,我们可以发现它们之间的语义关系较为接近。
- 文本分类
- 在文本分类任务中,我们可以将文本中的单词转换为对应的词向量,并将这些向量作为特征输入到分类模型中。由于词向量能够捕捉单词之间的语义关系,因此这种方法通常能够提高文本分类的准确率。
- 推荐系统
- 在推荐系统中,我们可以将用户的行为序列和文本内容映射为词向量表示,然后计算用户向量和文本向量之间的相似度,从而为用户推荐相关的文本内容。
3.3 Embedding
在机器学习和自然语言处理(NLP)中,embedding(嵌入)
是一种将一个高维空间中的对象(如单词、短语、句子、图像等)映射到一个低维、稠密、连续的向量空间中的表示方法。这种表示方法通常能够保留原始对象之间的某些关系或属性,使得在向量空间中相似的对象具有相近的表示。
在自然语言处理中,word embedding(词嵌入)
是最常见的嵌入类型,它将词汇表中的每个单词映射到一个固定大小的向量。这些向量通常是通过训练神经网络模型(如Word2Vec
、GloVe
、FastText
等) 在大量文本数据上学习得到的。
词嵌入的主要优点包括:
- 语义表示:词嵌入能够捕捉单词之间的语义关系。在向量空间中,相似的单词(如“猫”和“狗”)通常具有相近的表示,而不相关的单词则具有较远的距离。
- 降低维度:与独热编码相比,词嵌入使用低维向量表示单词,从而减少了计算复杂性和存储需求。
- 泛化能力:由于词嵌入是在大量文本数据上训练得到的,因此它们能够处理未见过的单词或短语(通过计算其附近单词的向量表示的平均值或类似方法)。
词嵌入在
NLP
任务中有着广泛的应用,如文本分类、情感分析、命名实体识别、机器翻译等。通过将文本中的单词表示为词嵌入向量,可以将NLP
任务转化为机器学习问题,并利用各种机器学习算法进行建模和预测。
如何基于向量检索服务与灵积实现语义搜索_向量检索服务(VRS)-阿里云帮助中心 (aliyun.com)
四、TensorFlow Playground
TensorFlow Playground 是一个在线实验环境,用于学习和试验机器学习模型的训练过程。它提供了一个直观的图形界面,允许用户通过拖放节点来构建神经网络,并实时观察模型训练过程中的各项指标变化。旨在帮助初学者理解深度学习模型的基本概念,如层结构、激活函数、损失函数以及梯度下降等。
传送门:https://playground.tensorflow.org/
以便于更好的理解学习率、步长、激活函数、数据、输入层、隐藏层、输出层、损失函数等概念