自然语言处理领域(Natural Language Processing,NLP)
1950年,计算机之父——艾伦·图灵(Alan Turing)介绍了一项测试,以检查机器是否能像人类一样思考,这项测试称为图灵测试。
它具体的测试方法是构建一个计算机对话系统,一个人和被测试的模型互相进行对话,如果这个人无法辨别对方究竟是机器模型还是另一个人,就说明该模型通过了图灵测试,计算机是智能的。
这个图灵测试就属于自然语言处理(后面简称 NLP)领域的范畴,那什么是自然语言处理呢?
所谓自然语言,就是人们日常生活中接触和使用的中文、英语、日语等。自然语言处理是指,让计算机来理解并正确地操作自然语言,完成人类指定的任务。
长久以来,图灵测试都被学界认为是难以攀登的巅峰。正因如此,NLP 也被称为人工智能皇冠上的明珠。
ChatGPT
NLP 中常见的任务包括文本中的关键词抽取、文本分类、机器翻译等等。NLP 当中还有一个非常难的任务:对话系统,也可被笼统称为聊天机器人。
现在,ChatGPT 已经远远超出了聊天机器人这个范畴,它能够根据用户的指令写文章,回答技术问题,做数学题,做外文翻译,玩文字游戏等等。所以,某种程度上,ChatGPT 已经摘下了这颗皇冠上的明珠。
ChatGPT 的工作形式非常简单,用户向 ChatGPT 提问任何一个问题,模型都会做出解答。用户的输入和模型的输出都是文字形式。
一次用户输入和一次模型对应的输出,叫做一轮对话。可以把 ChatGPT 的模型抽象成如下流程:
ChatGPT 也可以回答用户的连续提问,也就是多轮对话,多轮对话之间是有信息关联的。其具体的形式也非常简单,第二次用户输入时,系统默认把第一次的输入、输出信息都拼接在一起,供 ChatGPT 参考上次对话的信息。
如果用户与 ChatGPT 对话的轮次过多,一般来讲模型仅会保留最近几轮对话的信息,此前的对话信息将被遗忘。
ChatGPT 在接收到用户的提问输入后,输出的文字并不是一口气直接生成的,而是一个字、一个字生成的,这种逐字生成,即生成式(Generative) 。如下图所示。
NLP 的发展历程
可以试想一下,如果让你来实现一个 ChatGPT 模型,有哪些思路和方法呢?
事实上,大致有两种策略,基于规则的 NLP 和基于统计的 NLP。
自从 ChatGPT 开始,NLP 领域又进入了基于深度神经网络模型学习的时代。
基于规则的 NLP
基于规则的 NLP,是指使用人工编写的规则来处理自然语言。
例如,我们可以基于以下规则设计一个对话系统:
规则 1:当模型接收到用户的问句后,把问句中的“吗”字去掉,“?”换成“。”
规则 2:把“你”换成“我”,“我”字换成“你”。
由此,我们可以根据这些规则,制作一个对话模型,开启对话模式了。
用户:Hello。
模型:Hello。
用户:你是 ChatGPT吗?
模型:我是 ChatGPT。
以上是一个基于规则的非常粗浅的对话系统示例。
如果用户问题太复杂了怎么办?问题中没有加问号怎么办?我们需要不断编写出各种规则来覆盖上面的特殊情况。这说明基于规则存在几个明显的缺点:
- 在自然语言中,任何规则都无法完全覆盖需求,因此在处理复杂的自然语言任务时效果不佳;
- 规则无穷无尽,靠人力来完成将是一项天量的工作;
- 本质上并没有把自然语言处理的任务交给计算机来完成,依然是人在主导。
基于统计的 NLP
这是机器学习的早期核心,解决了 规则写不完 的问题。
它的核心逻辑:
- 人定义模型结构:程序员不再写规则,而是定义一个统计模型(比如朴素贝叶斯、支持向量机)。
- 计算机从数据中统计规律:给模型喂大量带标签的数据(比如 “垃圾邮件” 和 “正常邮件” 的样本),模型会计算出数据中的概率分布或特征权重。
- 用统计规律做决策:输入新数据后,模型根据学到的统计规律,计算出最可能的结果。
利用这个垃圾邮件分类的例子来解释下什么是统计学习(朴素贝叶斯模型):
- 准备数据:收集 1000 封垃圾邮件和 1000 封正常邮件,给每封邮件打标签(垃圾 = 1,正常 = 0)。
- 提取特征:统计每封邮件中关键词的出现频率(比如垃圾邮件中 “中奖” “免费” 出现次数多,正常邮件中 “工作” “会议” 出现次数多)。
- 训练模型:模型计算出某个关键词出现时,邮件是垃圾的概率(比如 “中奖” 出现时,垃圾邮件的概率是 90%)。
- 预测新邮件:输入一封新邮件,模型统计其中的关键词,计算出这封邮件是垃圾的总概率,超过阈值就判定为垃圾邮件。
基于统计的学习能处理复杂任务、不需要写大量规则、能从数据中学习规律。但是,它也有如下缺点:
- 依赖人工特征:程序员需要手动提取数据的特征(比如关键词频率),特征的好坏直接决定模型效果。
- 模型专用性强:一个垃圾邮件分类模型,不能用来做图片识别。
- 可解释性差:你只能知道模型的决策结果,却不知道它为什么这么决策(比规则学习难理解)。
基于深度神经网络的统计学习(大模型的学习方式)
深度神经网络模型(Deep Neural Network,DNN)
首先介绍下什么是深度神经网络模型(Deep Neural Network,DNN)?
打个比方的话,深度神经网络模型是一种技术架构,就像程序员手里的框架(比如 Vue、React)。大模型是一种 基于深度神经网络架构、超大规模参数、海量数据训练的特殊模型,就像用 React 框架开发的超大型复杂应用(比如淘宝、抖音)。
所以,它是大模型的基础骨架。
作为程序员,最熟悉的就是函数:输入一个值,经过计算,输出一个值(y = f(x))。神经网络模型的本质,就是多层函数的叠加,每一层函数都叫一个神经层。
- 深度:就是神经层的数量很多(比如 10 层、100 层,甚至更多)。
- 神经:每一层的计算单元(叫神经元),模仿人脑神经元的 “接收信号 - 处理信号 - 输出信号” 逻辑。
假设你要写一个图片分类程序(判断图片是猫还是狗):
-
传统编程:你需要手动写规则(比如猫有尖耳朵,狗有圆耳朵”,“猫的尾巴细,狗的尾巴粗”),但规则永远写不完(比如折耳猫的耳朵是圆的)。
-
深度神经网络编程:你不需要写规则,只需要定义多层函数的结构 (比如输入层→隐藏层 1→隐藏层 2→输出层),然后喂给它海量的猫和狗的图片数据,让模型自己 “学习” 猫和狗的特征。
它是一种 端到端 的学习模型:输入原始数据(图片、文字、声音),输出最终结果(分类、翻译、生成),中间过程无需人工干预。
-
依赖 数据和计算力:数据越多,计算力越强,模型的效果越好。
-
不仅仅用于 AI:深度神经网络是一个通用架构,可以用于图像识别(CNN)、语音识别(RNN)、自然语言处理等多个领域。
大模型(Large Language Model)
大模型是深度神经网络模型的超级升级版 。大模型的核心定义有三个关键词,缺一不可:
-
基于深度神经网络架构:最常见的是 Transformer 架构(2017 年提出,是现在所有大模型的基础)。
-
超大规模参数:参数数量达到亿级、十亿级、千亿级甚至万亿级。
- 这里的 “参数” ,你可以理解为模型 “学习到的知识” 的存储载体,就像你程序里的“变量”。参数越多,模型能存储的 “知识” 就越多,能处理的任务就越复杂。
-
海量数据训练:训练数据是万亿级的文本、图片、视频等(比如整个互联网的文本内容)。
大模型的学习分为两个核心阶段:预训练(Pre-training) 和 微调(Fine-tuning) ,部分大模型还会加上对齐(Alignment) 阶段。
1. 预训练(最核心的 “学习” 过程)
-
无人工特征工程:程序员只需要定义深度神经网络的结构(比如 Transformer),不需要手动提取特征。模型会自动从原始数据中学习特征。
-
海量无标签数据:喂给模型的是万亿级的原始数据(比如整个互联网的文本、图片),这些数据大多没有标签(比如一篇文章没有标注 “这是新闻” 还是 “这是小说”)。
-
学习通用规律:模型的目标是 预测下一个词 / 像素 / Token(比如给定 “床前明月光,疑是地上”,模型要预测下一个词是 “霜”)。通过这个过程,模型会学习到语言的语法、语义、世界知识。(比如 “猫是一种动物”, “地球是圆的”)。
-
超大规模参数:模型的参数数量达到千亿级,这些参数就是模型 记住 的通用规律的载体。
2. 微调(可选,针对特定任务)
-
少量带标签数据:如果需要让模型适应某个特定任务(比如 “翻译”、“写代码”),可以用少量带标签的任务数据对模型进行微调。
-
调整参数:微调不会改变模型的整体结构,只会微调模型的部分参数,让模型在特定任务上的表现更好。
3. 对齐(让模型更听话)
-
解决模型会说但不太满足要求的问题:预训练后的模型可能会生成有害、无意义的内容,对齐的目标是让模型生成符合人类价值观、有用的内容。
-
常用方法:RLHF(基于人类反馈的强化学习),即让人类对模型的输出进行打分,模型根据打分调整自己的输出策略。