文章目录
主要讲述了人工智能和自然语言处理任务的分类及其应用。首先,人工智能主要分为三大类:语音、图像和自然语言处理,它们之间相互关联。其次,NLP的任务主要分为两大类:自然语言理解和自然语言生成。还介绍了NLP中的一些重要概念和技术,如词向量、循环神经网络、长短期记忆网络和注意力机制等,它们可以提高机器对人类语言的处理能力。最后,提到了多模态在NLP领域的应用,即利用多种媒介来提高机器对人类语言的处理能力。本文详细介绍了人工智能和NLP领域的任务分类和技术应用,帮助读者更好地了解这些领域的基本概念和技术发展趋势。
3.1 NLP 的任务分类
上篇文章在介绍三个主要人物之后,我们开始探讨下面的内容。实际上,我们要讲解一下 NLP 的任务分类。NLP,即自然语言处理,指的是计算机能够理解并处理人类语言,甚至与人类进行交互等一系列的能力。那么,NLP 的任务是如何分类的呢?我们先从宏观层面来看,先了解一下 AI 的分类。一般而言,人工智能可分为三类:语音、图像和 NLP,就如同这三张图片所展示的。
不过,需要说明的是,将人工智能简单划分为这三类,其实是一种不太严谨的解释。为什么这么说呢?因为在许多领域都存在各自的人工智能应用。例如,在石油领域、煤炭领域,以及前段时间非常热门的利用深度神经网络预测蛋白质结构,这显然属于生物领域。我在此提及的这三大分类,主要是基于我们日常生活常见的范畴。可以认为语音、图像和 NLP 这三大领域紧密相连。首先,语音与 NLP,语音和语言自然是息息相关的;语音与图像也相互关联,以视频为例,它同时包含声音和图像;图像与 NLP 在技术上也存在联系,比如处理连续图像的方式可能与处理连续语言序列(NLP)有相似之处。
这里顺便说一个题外话,尽管我在此将任务分类划分为这三大类,但如今越来越多的人认为,在识别事物或执行任务时,采用多模态方式更为合适。那么,多模态是什么意思呢?举个例子,假设给你一段小视频,视频中有人在炒西红柿炒鸡蛋。从单一任务的角度看,因为视频可以按帧切分为一连串图片,所以可能会将其归为图像处理范畴,通过图像处理来判断视频中有个人在炒什么。然而,这段视频中不仅有图像,还包含语音。炒菜时会发出声音,比如油的滋滋声,这与正常说话声音不同,并且视频中可能还存在其他语音信息,这些都有助于判断视频内容是炒菜。因此,在对这样的视频进行判别时,如果仅依靠单一媒介,结果可能不太稳定、可靠;而若综合运用所有相关媒介,才更有可能得出稳定且理想的效果,这就是多模态。多模态技术正日益受到关注,可能会引领未来的发展热潮。当然,我们在此只是介绍人工智能任务的分类。在介绍完人工智能任务的宏观分类后,接下来我们必然要介绍 NLP(自然语言处理)自身的任务分类。
在网络上,有众多关于 NLP 任务分类的观点。就我个人而言,通常将其分为两大类:自然语言理解(National Language Understand)和自然语言生成(Generator)。自然语言理解又可细分为三类任务。第一类是分类任务,简单来说,就是对文本进行分类。比如给定一篇文章,判断其所属类别;或者给定一个影评,判断其好坏等级,大致如此。这是基于整篇文章或整个文本的分类,其中也包括情感分析。第二类任务是序列标注,它是对词或字进行分类,涵盖分词(POST AG)、词性分割、命名实体识别(NER)以及语义标注。需要注意的是,分类任务是针对整个文档的分类,而序列标注是针对词的分类。例如,对于 “文本分类” 这四个字,进行分词后,“文” 和 “本” 分别有各自的标签,组合成 “文本” 后又有新标签,“分类” 同理,将 “文本分类” 拆分成 “文本” 和 “分类” 两个词,这就是一个序列标注任务,是对每个字或词进行分类。第三类是句子关系判断,其中最常见的就是文本匹配,即判断两个句子是否表达相同的意思,此外还包括推理任务或问答(QA)任务。句子关系判断在智能客服领域应用较为广泛。比如,当你询问 “我的外卖为什么还没有到”,智能客服的数据库中可能有许多相似问句及对应答案,它会从数据库中找出与你问句最相近的问题,并给出答案,让你感觉智能客服非常智能,能直接给出你想要的答案,这就是句子关系判断的应用。
而自然语言生成类的自然语言处理任务,主要包括机器翻译、文档生成、对话回复等。这就是我对 NLP 任务的分类方式。当然,我们刚才提到的这些任务都属于基础任务,当这些基础任务组合在一起时,就可以构成综合任务。例如,分类、序列标注、文本匹配、文本生成等基础任务组合起来,可以形成智能对话、智能问答检索系统、推荐系统等综合任务。每个综合任务可能都会用到这些基础任务,但综合任务并非仅仅依赖这些单纯的 NLP 基础任务。以对话为例,可能还需要考虑对话的前后状态、对话场景、用户数据以及一些规则等因素来构建综合任务,不过这些基础任务无疑是综合任务的基本要素。
我们还可以从单纯的技术角度,或者从公司开展相关业务的角度,来审视 NLP 的任务类别。首先是数据层,进行 NLP 任务时,数据来源多种多样,可以从网页获取,也可以来自公司自身积累的查询数据,还可以从新闻等众多媒介中获取。有了这些基础数据后,还需要构建知识层。知识层包括网络热点词、词资源、领域词等,这些是通过自行收集和整理制作而成的。针对知识层的内容,需要进行词的质量评估、词的分类、词的特征提取、纠错等一系列符合公司业务需求的技术处理,这些可视为公司的技术储备。在完成知识层的构建和数据处理后,就进入计算层。计算层主要执行一些基础的计算任务,例如文本分类、文本匹配、命名实体识别(NER)、文本相似度计算等。这些基础计算任务会支撑上层的应用,如搜索应用、推荐应用、问答应用、对话应用等。即便公司目前的某些基础应用可能暂时用不到某些技术,比如文本相似度计算、文本匹配等,但公司仍可能会对这些技术进行探索和储备,因为无法预知未来的顶层应用是否会用到这些技术。这就是 NLP 的任务分类情况。从这个角度来看,NLP 的分类并非十分困难,只是从技术站的角度出发,会觉得内容繁多且复杂,但实际上其架构是比较清晰的。
3.2 NLP 任务分类相关案例
文本分类
情感分析
通过对文本情感倾向的判断,分析出其中蕴含的积极、消极或中性情感。以社交媒体评论分析为例,在实际应用中,某知名电商平台积累了海量用户商品评价。借助 NLP 情感分析技术,平台发现某品牌手机在用户评价里,关于电池续航的负面情感占比高达 30%。基于此洞察,手机品牌迅速调整电池研发策略,推出高续航新款手机,新品上市后好评率提升了 20%。在影视领域,某电影上映初期,通过社交媒体影评的情感分析,片方捕捉到观众对剧情拖沓的集中负面反馈,随即调整宣传策略,重点突出影片视觉特效等亮点,成功吸引了更多观众,有效提升了影片票房表现。
主题分类
主要用于判定文本所属的主题领域,如新闻文章常见的经济、娱乐等主题。在新闻资讯行业,知名新闻 APP 每日要处理数万条新闻,通过主题分类技术,能够快速筛选分类。在某重大会议期间,该 APP 借助主题分类精准推送类新闻,相关新闻阅读量较平日增长了 50%。学术数据库同样依赖主题分类,每年面对新增的海量论文,研究人工智能领域的学者通过主题分类,能迅速定位到最新相关研究论文,检索效率提升了 70%,极大便利了学术研究工作。
序列标注
词性标注
为文本中的每个单词标注其词性,像名词、动词、形容词等。以智能写作辅助软件为例,当用户输入 “我喜欢跑步,它能让我快乐”,软件通过词性标注,精准识别出 “喜欢” 为动词,“跑步” 为名词。基于此,软件可为用户提供更精准的语法检查与词汇替换建议,比如将 “喜欢” 替换为 “喜爱”,提升写作质量。在机器翻译场景下,对于句子 “She runs fast”,词性标注帮助翻译系统确定 “runs” 是动词第三人称单数形式,从而准确翻译为 “她跑得快”,有效提升翻译准确率 15%。
命名实体识别
主要用于识别文本中的人名、地名、组织机构名等实体信息。在大型企业知识图谱构建过程中,利用命名实体识别技术,从企业内部海量文档里抽取关键实体。比如从一份项目报告中,能够识别出项目负责人姓名、合作公司名以及项目涉及的地名,进而构建完整的项目知识网络,有力推动企业项目资源的高效管理。金融机构在审查贷款合同文本时,通过命名实体识别,可精准提取人名、公司名、金额等关键信息。例如在一份贷款合同中,准确识别借款公司名称、借款金额及还款期限等,用于风险评估,有效降低了 30% 的信贷风险。
语义角色标注
主要确定句子中每个谓词的语义角色,如施事者、受事者等,深入理解句子语义。在智能语音助手应用中,当用户发出指令 “帮我订一张明天从北京到上海的机票”,语义角色标注能够明确 “我” 是施事者,“机票” 是受事者,“北京” 和 “上海” 分别为出发地和目的地。基于此,语音助手可准确执行订票操作,用户满意度提升了 25%。在法律文本分析领域,对于条款 “甲方应向乙方支付违约金”,语义角色标注清晰界定 “甲方” 为施事者,“乙方” 为受事者,“违约金” 为交易对象,助力法律从业者准确理解条款含义,提升合同审查效率 35%。
3.3 NLP 任务分类流程
NLP 任务分类流程通常包括数据收集、数据预处理、特征工程、模型选择与训练、模型评估和模型应用等主要步骤,以下是具体介绍:
3.3.1 数据收集
- 明确数据来源:根据任务需求确定数据的获取渠道,如网页爬取、数据库查询、文件读取等。例如,在进行新闻文本分类时,可以从各大新闻网站收集文章;对于社交媒体文本分类,可通过社交媒体平台的 API 获取用户发布的内容。
- 收集数据:使用相应的工具或技术从选定的来源收集数据。确保收集到的数据具有足够的多样性和代表性,以涵盖任务中可能出现的各种情况。
3.3.2 数据预处理
- 清洗数据:去除数据中的噪声,如无关的符号、空格、特殊字符等,同时处理缺失值和异常值。例如,在一些文本数据中,可能存在乱码或不完整的句子,需要进行修复或删除。
- 分词:将文本分割成单个的词语或标记。对于中文文本,常用的分词工具结巴分词等;对于英文文本,可以使用空格和标点符号作为分隔符,或者使用更复杂的分词算法来处理复合词和缩写等情况。
- 词性标注:为每个词语标注其词性,如名词、动词、形容词等。这有助于进一步理解文本的语法结构和语义信息。
- 归一化:将文本中的单词转换为统一的格式,如将所有单词转换为小写字母,或者将数字统一表示为特定的格式。
3.3.3 特征工程
- 提取特征:从预处理后的数据中提取能够代表文本特征的信息。常见的特征包括词袋模型(统计每个单词在文本中出现的频率)、TF - IDF(词频 - 逆文档频率,用于衡量单词在文档中的重要性)、n - gram 特征(考虑连续的 n 个单词组成的序列)等。此外,还可以使用更高级的特征提取方法,如基于深度学习模型自动学习的特征。
- 特征选择:选择对分类任务最有帮助的特征子集,去除冗余或无关的特征。这可以减少数据维度,提高模型训练效率和准确性。常用的特征选择方法有信息增益、卡方检验、互信息等。
3.3.4 模型选择与训练
- 选择模型:根据任务的特点和数据的性质选择合适的分类模型。常见的模型包括朴素贝叶斯、支持向量机、决策树、随机森林、神经网络等。例如,对于文本分类任务,如果数据量较小,朴素贝叶斯模型可能是一个不错的选择;如果数据量较大且具有复杂的语义关系,深度学习模型如卷积神经网络(CNN)或循环神经网络(RNN)及其变体(如 LSTM、GRU)可能更合适。
- 划分数据集:将预处理后的数据划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调整模型的超参数,测试集用于评估模型的最终性能。通常按照一定的比例(如 7:2:1)进行划分。
- 训练模型:使用训练集对选定的模型进行训练,通过调整模型的参数使得模型能够最小化损失函数或最大化评估指标。在训练过程中,可能需要使用一些优化算法,如随机梯度下降(SGD)、Adagrad、Adadelta 等来更新模型的参数。
3.3.5 模型评估
- 选择评估指标:根据任务的类型和需求选择合适的评估指标。常见的指标有准确率(预测正确的样本数与总样本数的比例)、精确率(预测为正例的样本中真正为正例的比例)、召回率(真正为正例的样本中被预测为正例的比例)、F1 值(精确率和召回率的调和平均值)等。对于多分类任务,还可以使用宏平均 F1 值、微平均 F1 值等指标。
- 评估模型:使用测试集对训练好的模型进行评估,计算选定的评估指标。通过分析评估结果,可以了解模型在未知数据上的性能表现,判断模型是否过拟合或欠拟合。如果模型性能不理想,可以返回前面的步骤,调整模型、优化特征或增加数据量等,以改进模型的性能。
3.3.6 模型应用
- 部署模型:将训练好的模型部署到实际应用中,以便对新的未知文本进行分类。可以将模型集成到软件系统、网站或移动应用等中,实现自动化的文本分类功能。
- 监控与更新:在模型应用过程中,持续监控模型的性能表现。随着时间的推移和数据的变化,模型的性能可能会下降,此时需要及时更新模型,例如使用新的数据重新训练模型,或者对模型进行微调,以适应新的情况。
3.3.7 使用Python进行NLP任务分类
以下以常见的文本分类任务(垃圾邮件分类)为例,展示如何使用 Python 和一些常用的库(如scikit-learn
)进行 NLP 任务分类,具体步骤如下:
1.数据准备:这里我们使用sklearn
自带的 20 Newsgroups 数据集的一个子集(模拟垃圾邮件和正常邮件数据)来演示。实际应用中,你可以从文件、数据库或网络获取真实的邮件数据。
from sklearn.datasets import fetch_20newsgroups
# 加载部分数据,这里选择两类数据来模拟垃圾邮件和正常邮件分类
categories = ['alt.atheism', 'comp.windows.x']
news_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42)
news_test = fetch_20newsgroups(subset='test', categories=categories, shuffle=True, random_state=42)
X_train = news_train.data
y_train = news_train.target
X_test = news_test.data
y_test = news_test.target
2.数据预处理:包括文本清洗、分词、去除停用词等操作,这里使用nltk
库进行简单的预处理(需要先安装nltk
并下载相关语料库)。
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import string
nltk.download('punkt')
nltk.download('stopwords')
def preprocess_text(text):
text = text.lower() # 转换为小写
text = ''.join([c for c in text if c not in string.punctuation]) # 去除标点符号
tokens = word_tokenize(text) # 分词
stop_words = set(stopwords.words('english'))
tokens = [token for token in tokens if token not in stop_words] # 去除停用词
return " ".join(tokens)
X_train_preprocessed = [preprocess_text(text) for text in X_train]
X_test_preprocessed = [preprocess_text(text) for text in X_test]
3.特征提取:使用 TF-IDF(词频 - 逆文档频率)方法将文本转换为特征向量。
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X_train_features = vectorizer.fit_transform(X_train_preprocessed)
X_test_features = vectorizer.transform(X_test_preprocessed)
4.模型选择与训练:这里选择朴素贝叶斯分类器进行训练。
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X_train_features, y_train)
5.模型评估:使用测试集评估模型的性能,这里计算准确率。
from sklearn.metrics import accuracy_score
y_pred = clf.predict(X_test_features)
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy}")
6.模型应用:对新的文本进行分类预测。
new_text = ["This is a sample text about computer software."]
new_text_preprocessed = [preprocess_text(text) for text in new_text]
new_text_features = vectorizer.transform(new_text_preprocessed)
predicted_category = clf.predict(new_text_features)
print(f"预测类别: {news_train.target_names[predicted_category[0]]}")
上述代码通过一系列步骤完成了一个简单的 NLP 文本分类任务(垃圾邮件分类模拟),从数据准备、预处理、特征提取到模型训练、评估和应用,展示了使用 Python 进行 NLP 任务分类的基本流程。
3.4 NLP中的一些重要概念和技术
3.4.1 重要概念
- 词向量:将自然语言中的单词映射到低维向量空间的一种表示方法。它通过训练模型,让每个单词都有一个对应的向量,使得语义相似的单词在向量空间中的距离较近。例如,“国王” 和 “王后”、“男人” 和 “女人” 等具有相似语义关系的词,它们的词向量在空间中的位置也比较接近。常见的词向量模型有 Word2Vec、GloVe 等。
- 语言模型:用于计算一个句子或文本序列出现概率的模型。它可以根据给定的上下文预测下一个单词或字符,或者评估一个句子的合理性。例如,一个训练良好的语言模型能够判断 “The dog runs in the park” 是一个合理的句子,而 “The dog runs in the sky” 在一般情况下出现的概率较低。经典的语言模型有 N - gram 模型,现代基于深度学习的语言模型有 Transformer、BERT 等。
- 命名实体识别(NER):识别文本中具有特定意义的实体,如人名、地名、组织机构名、日期、时间等,并将其分类到相应的类别中。例如,在句子 “苹果公司于 2023 年 9 月发布了新款手机” 中,能够识别出 “苹果公司” 是组织机构名,“2023 年 9 月” 是日期。
3.4.2 重要技术
- 深度学习模型在 NLP 中的应用
- 循环神经网络(RNN):具有记忆功能,能够处理序列数据,如文本。它可以将当前的输入和上一时刻的隐藏状态结合起来,生成当前时刻的输出和新的隐藏状态,从而对文本中的长期依赖关系进行建模。例如,在处理 “The book that I bought yesterday is very interesting” 这样的句子时,RNN 可以通过记忆之前的单词来理解 “that I bought yesterday” 对 “book” 的修饰关系。
- 长短时记忆网络(LSTM):是 RNN 的一种改进,能够更好地处理长序列中的长期依赖问题。它通过引入门控机制,包括输入门、遗忘门和输出门,来控制信息的流动,选择性地记住和遗忘信息。在情感分析任务中,LSTM 可以捕捉文本中长距离的情感线索,准确判断文本的情感倾向。
- Transformer:基于自注意力机制,能够并行计算,大大提高了训练速度,并且在处理长序列数据时表现出色。它可以自动学习文本中每个位置与其他位置之间的关联程度,从而更好地理解文本的语义结构。例如,在机器翻译任务中,Transformer 能够同时考虑源语言和目标语言句子中各个单词之间的关系,实现更准确的翻译。
- 注意力机制:让模型在处理文本时能够自动关注到重要的部分,而不是平等地对待每个单词或字符。例如,在图像描述生成任务中,注意力机制可以让模型在生成描述时重点关注图像中的关键物体,从而生成更准确、更详细的描述。在 NLP 中,注意力机制通常与深度学习模型结合使用,如在 Transformer 中,自注意力机制可以计算每个单词与其他单词之间的注意力权重,以确定当前单词的重要性。
- 预训练语言模型:首先在大规模的文本数据上进行无监督学习,学习到语言的通用特征和语义知识,然后在具体的下游任务上进行微调。例如,BERT(Bidirectional Encoder Representations from Transformers)模型在大规模的语料库上进行预训练,能够学习到丰富的语言知识,如单词的语义、句子的语法结构等。在进行文本分类、命名实体识别等具体任务时,只需在 BERT 模型的基础上进行微调,就可以取得很好的效果,大大提高了模型的训练效率和性能。
3.5 NLP 任务分类的最新研究进展
以下是一些 NLP 任务分类的最新研究进展:
文本分类
- 基于字节的机器翻译系统中的文本分类探索:在基于字节的机器翻译系统中,通过 Unicode 编码将每个字符映射为特定字节,能避免未知词汇问题,实现广泛语言扩展性。但字节编码序列理解难度大,研究提出自适应多尺度头部注意力机制(Ada MSHA),自适应选择并混合注意力头,增强语境化灵活性,在 Ted - 59 数据集上超越参数量更大的基于子词的模型。
情感分析
- 数字人文与经典文学结合中的情感分析应用:有研究以人教版七年级课文《秋天的怀念》为切入点,借助 NLP 技术与数字人文方法,通过中文分词工具 jieba、Spacy 框架和情感词典等,将文本转化为可量化的数据模型,揭示了文中 “怀念” 与 “愧疚” 交织的复杂情感曲线,为文学研究与语文教学提供了全新视角和方法。
文本匹配
- 织女模型在文本匹配相关任务中的突破:在全球自然语言处理领域顶级测试 GLUE 中,武汉大学 - 京东可信人工智能联合研究中心提出的织女模型 Vega v1 表现出色。该模型在语义相似度任务 MRPC、问句语义等价任务 QQP 等文本匹配相关任务中位列第一,采用 “预训练 - 微调” 范式,依托多个重要预训练的技术创新实现突破,如高效节能的并行化训练框架、创新模型架构等。
此外,提示工程在 NLP 任务分类中也有重要进展。提示工程通过编写自然语言指令从大型语言模型(LLM)中提取知识,能显著提升 LLM 在各种 NLP 任务上的表现,如链式思维提示、自我一致性、自动链式思维等技术在数学问题解决、常识推理、多跳推理等任务中都取得了不错的效果。
下一章节内容 框架了解