自然语言处理:大模型理论与实践
(预 览 版)
赵宇 任福继 陈星延 陈中普 陈珍珠 著
2024 年 9 月
西南财经大学 电子科技大学
赵宇,西南财经大学教授,博导,四川省学术和技术带头人后备人选,金融智
能与金融工程四川省重点实验室副主任,通用人工智能与数字经济创新团队
负责人,西南财经大学学术百人,美国罗切斯特大学联合培养博士,法国巴黎
六大高级访问学者,中国人工智能学会自然语言理解专委会委员,四川省计
算机学会自然语言处理专委会副主任。长期致力于人工智能与数字经济的交
叉科学研究,主要方向包括自然语言处理、大模型、具身智能、数字经济等,
迄今发表高水平论文 40 余篇(其中中国计算机学会(CCF)A 类/B 类推荐
论文 14 篇),包括 IEEE Trans. 系列(TKDE、TNNLS、TMM、TMC、
TETC)以及人工智能顶会 ACL、KDD,ICME 等。主持 2 项国家自然科
学基金(1 项面上,1 项青年),主持 2 项四川省自然科学基金(1 项重点,1
项面上),主持 3 项省部级教改项目。撰写专著 1 部,获得专利 1 项。
任福继,日本工程院院士,欧盟科学院院士,AAIA Fellow,CAAI Fellow,
电子科技大学讲席教授,中国人工智能学会荣誉副理事长。主要研究情感计
算、先进智能机器等领域,提出的心状态转移网络开辟了一个感知情感的新方
法,构建的情感语料库 Ren-CECps 填补了中文情感语料库空白,并使中国
情感机器人达到世界前缘。在世界上率先提出的先进智能概念,使其成为国际
人工智能研究纲领之一。在信息通讯科学、人工智能领域中曾提出过“家庭模
式”和“超级关数”理论,为自然语言的理解及多语种机械翻译及交叉语言信
息检索开辟了新的方向。曾先后任美国新墨西哥州立大学访问教授、日本国立
德岛大学教授、佛罗里达国际大学客座教授、哈佛大学访问教授。教育部“长
江学者奖励计划”讲座教授、海外杰出青年学者基金获得者、中国科协海智专
家,中国国务院侨办科技专家咨询委员。获吴文俊人工智能科学技术奖创新一
等奖、科学中国人年度人物“杰出贡献奖”等。
序 言
自然语言处理一直是人工智能最热门的应用研究领域,对科学技术、文化
教育、经济社会的发展各个方面都具有极其重大的意义。自然语言处理的研究
一直存在两类颇不相同而又相互补足的研究方法,即:规则方法与统计方法。
规则方法追求的是对自然语言的理解,但严重受到领域的限制;统计方法恰
好相反,它所追求的是领域无限,但语言理解能力却成为短板。近年以来,以
ChatGPT 为代表的生成式预训练对话人工智能技术(即大语言模型,简称大
模型)取得了令人瞩目的进展,给基于统计方法的自然语言处理技术带来了前
所未有的进步。
本书以其独特的视角和结构,全面系统地介绍了大模型技术在自然语言处
理中的理论与实践。全书内容丰富,涵盖了语言模型的基础知识、大模型的关
键技术以及大模型的应用实践,不仅为初学者提供了详尽的入门指南,也为研
究人员和专业人士提供了深入的技术解析和实用的开发案例。本书从自然语言
处理的背景知识出发,逐步引入词向量、统计语言模型、神经语言模型和预训
练语言模型,然后详细介绍了大模型的架构、训练方法、应用及评估策略,并
通过丰富的实例和习题,帮助读者加深理解和掌握大模型技术的核心内容。特
别难得的是,本书对大模型的本地开发和应用开发提供了实战演练和实用的代
码示例,对实际开发工作具有重要的指导意义。
大语言模型的迅猛发展引起了世界各国学术界高度重视,出现了不少介绍
大语言模型的人工智能通俗著作。但是,至今还没有看到可以作为高等学校教
材的著作问世。本书的出版正好弥补了这一缺陷,对于高等学校本科生、研究
生、教学科研人员,以及从事自然语言处理研究和开发的专业人士来说,都是
一本不可多得的参考书籍。通过阅读本书,读者不仅可以系统地掌握自然语言
处理的基础知识和前沿技术,还能在实际操作中提升自身的开发和研究能力,
探索自然语言处理的深层理论和广泛应用。在此,我愿对本书作者表示衷心的
感谢和热烈的祝贺,并大力推荐本书早日出版,以飨广大读者。
当然,人工智能及其在自然语言处理研究中的应用是一个复杂的学术领
i
ii 序 言
域。当前大语言模型的研究一方面取得了前所未有的巨大进步,同时也还存在
进一步发展的巨大空间,特别是在自然语言理解能力方面以及由此导致的幻
觉、隐私和安全保障等方面,仍然需要大力改进。我深信,随着人工智能理论
与技术本身的不断成熟与发展,未来将会有更多新的突破和创新,推动人类与
机器之间实现更加自然和更加智能的交流方式,开创我国和世界自然语言处理
与理解更加辉煌的未来。
中国人工智能学会原理事长
发展中世界工程技术科学院院士
2024 年 9 月 17 日 于北京
前 言
自然语言处理(Natural Language Processing, NLP)是计算机科学与人
工智能交叉领域中的一门关键技术,其目标是使计算机能够理解、解释、生成
人类语言。在当今人工智能时代,NLP 技术已经深刻地渗透到我们日常生活
的方方面面,从智能助手、语音识别到机器翻译和文本生成,NLP 正以惊人
的速度改变着我们的生活方式。特别的是,2022 年底以 ChatGPT 为代表的
大模型技术横空出世,进一步推动了新一代人工智能技术的发展。大模型技术
颠覆了自然语言处理领域传统的知识体系。然而,目前以大模型技术为主线介
绍自然语言处理知识的教材较为缺乏。基于此考虑,催生了我编著本教材的想
法。
本教材以自然语言处理中语言模型为主线,主要内容分为三部分,包括语
言模型基础、大模型理论和大模型实践。在此之前,首先介绍了自然语言处理
的背景知识。然后,在语言模型基础部分介绍了词向量、统计语言模型、神经
语言模型和预训练语言模型。接着,在大模型理论部分介绍大模型的架构、训
练、使用与评估等。最后,在大模型实践部分介绍了大模型的本地开发和应用
开发等。
本教材主要针对高校本科生、研究生以及教学科研人员,作为教学用书。
当然,也适用于计算语言学家、语言学家、数据科学家和 NLP 开发人员等专
业人士。考虑到不同读者的学科差异,本书在附录部分介绍了概率论、信息
论、机器学习与强化学习等 NLP 交叉学科的基础知识。阅读本教材最好具备
Python 的编程知识。
在写作本教材的过程中,我深切地感受到自然语言处理的迅猛发展。从传
统的基于规则的方法到现今基于深度学习的革命性变革,NLP 的前景无疑令
人激动。我希望通过本教材,能够为读者提供以语言模型为主线的 NLP 知识
体系,并让读者能深入理解大语言模型前沿理论,掌握大语言模型实践技能。
希望这本教材成为您学习与实践 NLP 的得力工具,激发您对自然语言处理无
尽的好奇心和创造力。
iii
iv 前 言
在本书即将付梓之际,我深感荣幸与感激,借此机会向所有在本书编写过
程中给予帮助和支持的个人与机构致以最诚挚的谢意!
谨向自然语言处理领域的诸多前辈和专家致以崇高的敬意。我要特别感谢
大模型技术相关领域的研究学者,正是你们在 Transformer、GPT、GLM 等
模型的发展过程中所做出的杰出贡献,为本书的内容奠定了坚实的基础。你们
的无私分享和合作精神,推动了这一领域的飞速发展,并为本书提供了丰富的
理论依据和实践经验。
感谢中国人工智能学会自然语言理解专委会主任王小捷教授对本书编写
给予的大力支持,并提出了若干宝贵的建议。感谢我们通用人工智能团队以及
金融智能与金融工程四川省重点实验室的同仁们,为本书的完成提供了不可
或缺的支持。本书初稿完成以后,我们团队自然语言处理课程组老师做了大量
的工作。王小捷博士、陈珍珠博士和施龙博士校对了第一章的全部内容。刘康
博士、陈中普博士、陈星延博士和施龙博士分别校对并修改了第二章的部分内
容。李蕾博士、潘宁宁博士和陈中普博士校对了第三章的全部内容。孙晓博士、
潘宁宁博士校对了第四章的全部内容。庄福振博士、陈珍珠博士校对了第五章
的全部内容。谷雨博士、袁彩霞博士和余关元博士校对了第六章的全部内容。
李珂博士和陈珍珠博士校对了第七章的全部内容。孙健博士和陈中普博士校对
了第八章的全部内容。徐睿峰博士、陈星延博士和陈中普博士校对并编写了第
九章的部分内容。王昊奋博士、陈中普博士和张阳博士分别校对了第十章的部
分内容。张岳博士、陈珍珠博士、陈中普博士和张阳博士校对了第十一章的全
部内容。金澎博士、陈星延博士和陈珍珠校对了第十二章的全部内容。陈运文
博士、陈珍珠博士和黄士罗博士校对了第十三章的全部内容。杜亚军博士、陈
中普博士和黄士罗博士校对了第十四章的全部内容。李睿凡博士、陈中普博士
和张蕊博士校对了第十五章的部分内容。陈星延博士、施龙博士和张蕊博士分
别校对了附录 A 预备知识的部分内容。此外,李庆博士和谢志龙博士也参与
了本书的部分校对工作。冯飞高级架构师对该书的实践部分也提出了宝贵的意
见。另外,特别感谢韦鳗珍、白芊芊、罗灵、王瑞、刘银峰、许雯婷、钟一、顾
添承、刘雅玲、黄浩南、唐川清、郭宇、杨闻博和邓黄怡等同学在文稿编辑、
图表绘制和审稿校对等方面所付出的努力,这是本书完成的基础。
本书引用了一些优秀参考文献中的图表、公式和案例等,征求了相关作者
的意见并得到了积极支持,在此表示由衷的感谢!
此外,由衷感谢机械工业出版社的辛勤付出,感谢你们在本书编写和出版
过程中所展现的专业精神和不懈努力,让本书最终得以面世。
本书的编写得到了国家自然科学基金项目的资助。
v
最后,对所有期待本书的读者表示感谢,你们的期望和支持激励我不断深
入研究。希望本书能为你们带来启发和帮助,并在你们的学术和实践道路上提
供有益的参考。
再次感谢所有为本书付出心血和智慧的朋友们!愿本书能为自然语言处理
领域的发展贡献绵薄之力,并激励更多的研究者投身于这一充满前景的研究领
域!
由于编者水平有限,书中难免有疏漏和不足之处,恳请读者批评指正!如
果您发现书中存在有任何错误或遇到任何问题,可以提交至本书网站1,真诚
期待您的反馈。
赵 宇
2024 年 9 月
1本书更多资源及讨论见官网:
vi 前 言
主要符号表
(·)T 矩阵转置
|| · || 范数
σ(·) Sigmoid 激活函数
⊙ 哈达玛积或元素级乘积
ReLU 激活函数∑
求和
log(·) 对数函数∏
求积
P (·) 概率函数
| · | 求元素个数
max 最大值
O(·) 复杂度
sin(·) 正弦函数
cos(·) 余弦函数
R 实数集
E(·) 期望
sim(·) 相似度函数
∝ 正比
vii
viii 主要符号表
exp(·) 自然指数
lim 求极限∫
求积分
∇ 求梯度
目 录
序 言 i
前 言 iii
主要符号表 vii
第一章 绪论 1
自然语言处理概述 . . . . . . . . . . . . . . . . . . . . . . . . . 1
自然语言处理简史 . . . . . . . . . . . . . . . . . . . . . . . . . 2
自然语言处理传统研究内容 . . . . . . . . . . . . . . . . . . . . 4
传统基础技术 . . . . . . . . . . . . . . . . . . . . . . . . 4
实际应用 . . . . . . . . . . . . . . . . . . . . . . . . . . 30
自然语言处理与大模型发展现状 . . . . . . . . . . . . . . . . . . 40
本书内容安排 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
第一部分 语言模型基础 45
第二章 词向量 47
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
文本表示方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
独热表示 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
分布式表示 . . . . . . . . . . . . . . . . . . . . . . . . . 49
Word2Vec 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
CBOW 模型 . . . . . . . . . . . . . . . . . . . . . . . . 50
ix
x 目 录
Skip-gram 模型 . . . . . . . . . . . . . . . . . . . . . . . 53
GloVe 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
ELMo 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
第三章 统计语言模型 61
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
N-gram 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
平滑技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
加一平滑 . . . . . . . . . . . . . . . . . . . . . . . . . . 64
其他平滑 . . . . . . . . . . . . . . . . . . . . . . . . . . 65
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
第四章 神经语言模型 71
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
神经概率语言模型 . . . . . . . . . . . . . . . . . . . . . . . . . 71
概率约束条件 . . . . . . . . . . . . . . . . . . . . . . . . 72
模型架构 . . . . . . . . . . . . . . . . . . . . . . . . . . 72
具体过程 . . . . . . . . . . . . . . . . . . . . . . . . . . 74
基于循环神经网络的语言模型 . . . . . . . . . . . . . . . . . . . 75
循环神经网络结构 . . . . . . . . . . . . . . . . . . . . . 76
RNNLM 模型的原理 . . . . . . . . . . . . . . . . . . . . 80
RNNLM 模型的训练 . . . . . . . . . . . . . . . . . . . . 81
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
第五章 预训练语言模型 85
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Seq2Seq 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
模型结构 . . . . . . . . . . . . . . . . . . . . . . . . . . 86
模型训练与使用技巧 . . . . . . . . . . . . . . . . . . . . 88
注意力机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
定义与原理 . . . . . . . . . . . . . . . . . . . . . . . . . 91
目 录 xi
引入注意力机制的编码器-解码器模型 . . . . . . . . . . . 91
查询、键和值 . . . . . . . . . . . . . . . . . . . . . . . . 92
Transformer 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 93
模型整体结构 . . . . . . . . . . . . . . . . . . . . . . . . 93
模型推理过程 . . . . . . . . . . . . . . . . . . . . . . . . 97
预训练语言模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
BERT 模型 . . . . . . . . . . . . . . . . . . . . . . . . . 107
GPT-1 模型 . . . . . . . . . . . . . . . . . . . . . . . . . 111
语言模型使用范式 . . . . . . . . . . . . . . . . . . . . . . . . . 113
预训练-传统微调范式 . . . . . . . . . . . . . . . . . . . . 113
大模型-提示工程范式 . . . . . . . . . . . . . . . . . . . . 114
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
第二部分 大模型理论 117
第六章 大语言模型架构 119
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
基于 Transformer 的模型架构 . . . . . . . . . . . . . . . . . . . 119
编码大语言模型 . . . . . . . . . . . . . . . . . . . . . . . 120
解码大语言模型 . . . . . . . . . . . . . . . . . . . . . . . 121
编解码大语言模型 . . . . . . . . . . . . . . . . . . . . . 123
非 Transformer 的模型架构 . . . . . . . . . . . . . . . . . . . . 125
FAT 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 125
AFT 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 127
RWKV 模型 . . . . . . . . . . . . . . . . . . . . . . . . 127
大模型架构配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
归一化技术 . . . . . . . . . . . . . . . . . . . . . . . . . 130
激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 131
位置编码 . . . . . . . . . . . . . . . . . . . . . . . . . . 132
注意力与偏置 . . . . . . . . . . . . . . . . . . . . . . . . 133
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
xii 目 录
第七章 多模态大模型架构 137
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
ViT 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
ViT 模型架构 . . . . . . . . . . . . . . . . . . . . . . . . 138
ViT 模型计算过程 . . . . . . . . . . . . . . . . . . . . . 139
预训练与微调 . . . . . . . . . . . . . . . . . . . . . . . . 141
CLIP 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
模型架构 . . . . . . . . . . . . . . . . . . . . . . . . . . 142
训练过程 . . . . . . . . . . . . . . . . . . . . . . . . . . 142
CLIP 模型实现零样本分类 . . . . . . . . . . . . . . . . 144
CLIP 模型其他应用 . . . . . . . . . . . . . . . . . . . . 145
BLIP 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
模型架构 . . . . . . . . . . . . . . . . . . . . . . . . . . 147
预训练目标 . . . . . . . . . . . . . . . . . . . . . . . . . 148
CapFilt 算法 . . . . . . . . . . . . . . . . . . . . . . . . 151
BLIP-2 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
BLIP-2 架构 . . . . . . . . . . . . . . . . . . . . . . . . 152
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
第八章 大模型预训练 157
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
预训练数据工程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
预训练数据源 . . . . . . . . . . . . . . . . . . . . . . . . 157
多模态数据集 . . . . . . . . . . . . . . . . . . . . . . . . 161
数据处理 . . . . . . . . . . . . . . . . . . . . . . . . . . 163
模型性能关系 . . . . . . . . . . . . . . . . . . . . . . . . 165
预训练方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
预训练任务 . . . . . . . . . . . . . . . . . . . . . . . . . 167
优化参数设置 . . . . . . . . . . . . . . . . . . . . . . . . 168
可扩展训练技术 . . . . . . . . . . . . . . . . . . . . . . . 170
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
目 录 xiii
第九章 大模型微调 175
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
指令微调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
指令微调概念 . . . . . . . . . . . . . . . . . . . . . . . . 175
构造指令实例 . . . . . . . . . . . . . . . . . . . . . . . . 176
指令微调任务 . . . . . . . . . . . . . . . . . . . . . . . . 180
多模态指令微调 . . . . . . . . . . . . . . . . . . . . . . . 184
指令微调优化方法 . . . . . . . . . . . . . . . . . . . . . 187
指令微调的效果 . . . . . . . . . . . . . . . . . . . . . . . 188
对齐微调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
RLHF 算法 . . . . . . . . . . . . . . . . . . . . . . . . . 189
RLHF 的发展历程 . . . . . . . . . . . . . . . . . . . . . 190
对齐微调技术 . . . . . . . . . . . . . . . . . . . . . . . . 192
偏好数据集 . . . . . . . . . . . . . . . . . . . . . . . . . 197
微调算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
第十章 提示工程 203
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
提示工程基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
提示词的组成 . . . . . . . . . . . . . . . . . . . . . . . . 204
提示工程方法 . . . . . . . . . . . . . . . . . . . . . . . . 205
图片提示 . . . . . . . . . . . . . . . . . . . . . . . . . . 209
情景学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
示例设计方法 . . . . . . . . . . . . . . . . . . . . . . . . 213
思维链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
提示方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 216
过程优化 . . . . . . . . . . . . . . . . . . . . . . . . . . 217
外部引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . 220
提示工程安全 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
提示攻击 . . . . . . . . . . . . . . . . . . . . . . . . . . 222
提示防御 . . . . . . . . . . . . . . . . . . . . . . . . . . 224
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
xiv 目 录
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
第十一章 涌现 229
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
涌现现象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
涌现的概念定义和特征 . . . . . . . . . . . . . . . . . . . 230
涌现的普适模型 . . . . . . . . . . . . . . . . . . . . . . . 234
大语言模型中的涌现 . . . . . . . . . . . . . . . . . . . . . . . . 236
大语言模型中涌现的定义 . . . . . . . . . . . . . . . . . 237
大语言模型的涌现能力 . . . . . . . . . . . . . . . . . . . 237
大语言模型涌现能力的来源 . . . . . . . . . . . . . . . . 240
缩放法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
缩放法则的概念 . . . . . . . . . . . . . . . . . . . . . . . 241
模型性能的影响因素 . . . . . . . . . . . . . . . . . . . . 242
大模型可解释性 . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
“黑箱”问题 . . . . . . . . . . . . . . . . . . . . . . . . 244
可解释 AI . . . . . . . . . . . . . . . . . . . . . . . . . . 246
大模型的可解释性 . . . . . . . . . . . . . . . . . . . . . 249
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
第十二章 大模型评估 257
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
评估方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
人工评估 . . . . . . . . . . . . . . . . . . . . . . . . . . 257
自动评估 . . . . . . . . . . . . . . . . . . . . . . . . . . 258
评估任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
基本评估任务 . . . . . . . . . . . . . . . . . . . . . . . . 262
高级评估任务 . . . . . . . . . . . . . . . . . . . . . . . . 266
评估数据集 . . . . . . . . . . . . . . . . . . . . . . . . . 267
评估指标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
准确性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
安全性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
鲁棒性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
高效性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
目 录 xv
其他指标 . . . . . . . . . . . . . . . . . . . . . . . . . . 279
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
第十三章 探讨 283
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
基于大模型的智能体和具身智能 . . . . . . . . . . . . . . . . . . 283
智能体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
具身智能 . . . . . . . . . . . . . . . . . . . . . . . . . . 285
大模型垂直领域应用 . . . . . . . . . . . . . . . . . . . . . . . . 286
金融 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
法律 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
医疗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
旅游 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
大模型的挑战与局限 . . . . . . . . . . . . . . . . . . . . . . . . 296
幻觉现象 . . . . . . . . . . . . . . . . . . . . . . . . . . 296
计算成本高昂 . . . . . . . . . . . . . . . . . . . . . . . . 298
时效性差 . . . . . . . . . . . . . . . . . . . . . . . . . . 299
专业领域表现欠佳 . . . . . . . . . . . . . . . . . . . . . 300
输出不稳定 . . . . . . . . . . . . . . . . . . . . . . . . . 300
大模型的社会影响 . . . . . . . . . . . . . . . . . . . . . . . . . 300
虚构事实 . . . . . . . . . . . . . . . . . . . . . . . . . . 301
毒性与偏见 . . . . . . . . . . . . . . . . . . . . . . . . . 303
学术造假 . . . . . . . . . . . . . . . . . . . . . . . . . . 304
环境成本 . . . . . . . . . . . . . . . . . . . . . . . . . . 305
主流霸权 . . . . . . . . . . . . . . . . . . . . . . . . . . 305
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
第三部分 大模型实践 309
第十四章 大模型本地开发 311
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Transformers 编程基础 . . . . . . . . . . . . . . . . . . . . . . . 312
Transformers 关键组件 . . . . . . . . . . . . . . . . . . . 312
xvi 目 录
对话模型实战 . . . . . . . . . . . . . . . . . . . . . . . . 314
大模型微调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
使用 Transformers 微调大模型 . . . . . . . . . . . . . . 317
使用 LLaMA-Factory 微调大模型 . . . . . . . . . . . . . 320
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
第十五章 基于大模型的应用开发 323
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
基于 OpenAI 的应用开发 . . . . . . . . . . . . . . . . . . . . . 323
关键概念 . . . . . . . . . . . . . . . . . . . . . . . . . . 324
入门程序 . . . . . . . . . . . . . . . . . . . . . . . . . . 325
OpenAI 模型 . . . . . . . . . . . . . . . . . . . . . . . . 326
开发指南 . . . . . . . . . . . . . . . . . . . . . . . . . . 327
应用案例 . . . . . . . . . . . . . . . . . . . . . . . . . . 340
使用 Azure OpenAI . . . . . . . . . . . . . . . . . . . . 344
基于通义千问的应用开发 . . . . . . . . . . . . . . . . . . . . . 346
入门程序 . . . . . . . . . . . . . . . . . . . . . . . . . . 346
通义千问模型 . . . . . . . . . . . . . . . . . . . . . . . . 347
基于 LangChain 的应用开发 . . . . . . . . . . . . . . . . . . . . 350
LangChain 入门程序 . . . . . . . . . . . . . . . . . . . . 351
LangChain 的模型 . . . . . . . . . . . . . . . . . . . . . 352
LangChain 的数据连接 . . . . . . . . . . . . . . . . . . 354
LangChain 的链 . . . . . . . . . . . . . . . . . . . . . . 357
LangChain 的记忆 . . . . . . . . . . . . . . . . . . . . . 359
讨论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
附录 A 预备知识 363
概率论基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
概率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
条件概率 . . . . . . . . . . . . . . . . . . . . . . . . . . 364
贝叶斯法则 . . . . . . . . . . . . . . . . . . . . . . . . . 365
随机变量 . . . . . . . . . . . . . . . . . . . . . . . . . . 366
目 录 xvii
二项式分布 . . . . . . . . . . . . . . . . . . . . . . . . . 367
联合概率分布和条件概率分布 . . . . . . . . . . . . . . . 367
期望与方差 . . . . . . . . . . . . . . . . . . . . . . . . . 368
贝叶斯决策理论 . . . . . . . . . . . . . . . . . . . . . . . 368
信息论基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
熵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
联合熵和条件熵 . . . . . . . . . . . . . . . . . . . . . . . 370
互信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
相对熵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
交叉熵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
困惑度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
机器学习基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . 375
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
训练方式 . . . . . . . . . . . . . . . . . . . . . . . . . . 375
常用算法和模型 . . . . . . . . . . . . . . . . . . . . . . . 378
强化学习基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . 385
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
强化学习中的马尔可夫过程决策 . . . . . . . . . . . . . . 385
策略迭代 . . . . . . . . . . . . . . . . . . . . . . . . . . 388
重要性采样 . . . . . . . . . . . . . . . . . . . . . . . . . 392
近端策略优化算法 . . . . . . . . . . . . . . . . . . . . . 394
附录 B 缩略语表 401
附录 C 翻译对照表 405
附录 D 相关学术会议与学术组织 409
NLP 领域主要学术会议 . . . . . . . . . . . . . . . . . . . . . . 409
NLP 领域学术组织 . . . . . . . . . . . . . . . . . . . . . . . . . 410
索 引 412
参考文献 412
xviii 目 录
第一章 绪论
自然语言处理概述
人类的语言能力是在早期儿童时期发展起来的,并在一生中不断进化。与
人类不同,机器无法自然地掌握人类语言理解能力,它们需要通过如人工智能
算法或者语言模型的方式,提升其在语言方面的智能。为了探究人类语言的奥
秘,研究者们创立了自然语言处理 (Natural Language Processing, NLP)1、自
然语言理解 (Natural Language Understanding, NLU)和计算语言学 (Compu-
tational Linguistics, CL)等学科,这些学科致力于使用计算方法来分析、理解
和生成人类语言,从而构建人机交流的桥梁。随着时间的推移,这些研究领域
在技术上取得了显著的进步,推动了人工智能在语言理解和生成方面的发展。
NLP、NLU和 CL虽然密切相关,但侧重点有所不同。NLP是一门人工智
能领域的交叉学科,涉及计算机科学、人工智能和语言学等多个领域,旨在使
计算机能够解释、生成和处理人类自然语言2。自然语言处理技术的研究不仅
提高了信息处理的效率,而且极大地拓宽了人机交互的方式,促进了科技创新
和社会进步。随着技术的不断发展,NLP在信息检索、智能问答系统、机器翻
译等众多应用领域发挥着日益重要的作用。NLU旨在使计算机能够理解和解
释人类自然语言的含义和意图,其目标是让计算机能够像人类一样理解和推
断自然语言文本或语音输入的意义。CL则更侧重于语言本身的科学研究,试
图通过计算机模拟来理解语言的本质和结构,包括语言的生成和理解机制。总
之,NLP、NLU和 CL都是探索人类语言奥秘、实现人机交流的重要学科,它
们共同推动着语言技术的发展和应用。随着技术的不断进步,这些领域之间的
界限越来越模糊。在本书中,若无特别说明,将不再区分这三个术语。
语言模型(Language Models, LMs)在推动 NLP、NLU和 CL的发展过程
1自然语言处理被誉为人工智能皇冠上的明珠。
2自然语言包括如中文、英文、俄文、阿拉伯文、西班牙语等。不同于自然语言,人们常常还使用各种编程
语言等机器语言操纵计算机、使用 SQL 语言操纵数据库,以及使用手势等肢体语言沟通信息。
1
2 第一章 绪论
中起到了核心作用。语言模型通过计算一系列词汇在特定上下文中出现的概率
来预测下一个词的可能性。这不仅是实现机器翻译、语音识别等应用的基础,
也是让机器能够更自然地与人类进行交流的关键。随着深度学习技术的发展,
基于神经网络的语言模型(如 Transformers [1])极大地推动了这些领域的发
展,使得机器在理解和生成自然语言方面的能力得到了质的飞跃。除了技术的
进步,数据的积累也对这些领域的发展至关重要。大数据时代的来临为这些领
域的研究提供了前所未有的资源。通过分析和处理大量的文本数据,研究者们
能够训练更加强大和精准的模型,这些模型能够更好地理解语言的复杂性和多
样性。然而,尽管取得了巨大进步,人类语言的复杂性和深层的语义理解仍然
是机器面临的巨大挑战。语言不仅仅是词汇和语法的组合,它还包含了文化、
情感和隐喻等多层次的含义。因此,未来的研究将需要更深入地探索人类语言
的这些方面,以及如何让机器更加准确地理解和生成具有深层含义的语言。
自然语言处理简史
自然语言处理技术的发展可以追溯到 20 世纪 50 年代初,经历了若干重
要阶段和关键突破,以下是自然语言处理技术发展的简单概述。
1. 早期阶段(1950s - 1960s)
1950 年代早期,阿兰·图灵(Alan Turing)提出了著名的“图灵测试
(Turing Test)”,探讨了机器是否能够模仿人类的自然语言交流。1954 年,
Georgetown 大学和 IBM 合作,开发了一个名为“Georgetown-IBM 实验室翻
译器”的系统,用 IBM 701 电脑将 60 多个俄语句子翻译成英文,标志着机
器翻译的起步。除了图灵测试和 Georgetown-IBM实验之外,这个时期还诞生
了一些初步尝试来理解语言的技术,如知名语言学家诺姆·乔姆斯基(Noam
Chomsky)的生成语法理论,它对后来的语言模型和理解有着深远的影响。
2. 基于规则和知识的方法(1970s - 1980s)
这个时期,研究者们试图通过构建复杂的规则系统来模拟语言理解和生成
的过程。1970 年代,NLP 的主要方法是基于规则的方法,通过编写大量语法
规则来分析和生成文本。1971 年,Terry Winograd 开发了“ELIZA”,这是一
个早期的“聊天机器人”程序,可以模仿心理医生与患者的对话。1980 年代,
出现了基于知识表示的方法,如 Frame 语义学和产生式语法。1986 年,Xerox
PARC 开发了一个名为“机器人军团”(RUMORS)的项目,该项目尝试将自
自然语言处理简史 3
然语言处理与知识表示相结合。这一时期还出现了专家系统,尝试通过编码专
家的知识来解决特定领域的问题,这些系统在一定程度上体现了 NLP 的应用
潜力。
3. 统计方法的兴起(1990s - 2000s)
统计方法的兴起标志着 NLP 研究的一个转折点,研究者开始从手工编写
的规则转向利用大量数据来自动学习语言模式。1990 年代,随着计算能力的
提高,统计方法开始在 NLP 中兴起。这些方法使用大规模语料库来训练模型,
如隐马尔科夫模型 (Hidden Markov Model, HMM)和最大熵模型 (Maximum
Entropy, ME)。1998 年,IBM 研究人员在机器翻译领域取得突破,提出了统
计机器翻译 (Statistic Machine Learning, SMT)模型,引入了短语翻译和词对
齐等概念。2000 年代,随着互联网的发展,大规模的文本数据变得更加容易
获取,这进一步促进了基于统计方法的 NLP 研究。此外,数据驱动的统计方
法开始在语音识别、图像识别等其它领域也取得了实质性进展。
4. 深度学习和神经网络(2010s - 至今)
深度学习的兴起为 NLP领域带来了革命性的变化。2010年代初,深度学习
和神经网络开始在 NLP 领域引起关注。诸如循环神经网络 (Recurrent Neural
Network, RNN)和长短时记忆网络 (Long Short-Term Memory, LSTM)等模型
被用于语言建模和序列生成。2013 年,谷歌发布了 Word2Vec 模型,通过将
单词映射到连续向量空间中获得词向量。2014 年,谷歌发布了 Seq2Seq 模型,
为机器翻译等任务引入了编码器-解码器结构。2017 年,Transformer 模型被
提出,引领了 NLP 的新浪潮。深度学习和神经网络模型大幅提高 NLP 技术
的水平,在多种任务上的性能达到甚至超越人类水平。
5. 预训练模型与大模型(2018 - 至今)
预训练语言模型成为了 NLP 领域的主流方法。这些模型通过在大规模文
本数据上进行预训练,学习到丰富的语言表示,然后可以通过微调来适应各种
下游任务。2018 年,BERT、GPT-1 等模型基于 Transformer,在各种 NLP
任务上取得了重大突破。2019 年,OpenAI 发布了 GPT-2 模型,引发了对于
大规模预训练模型的讨论,在生成文本方面表现出色。这一时期,研究人员不
断提出新模型和技术,如 RoBERTa、T5、GLM、LLaMA、文心一言、通义
千问、星火等。
4 第一章 绪论
总的来说,自然语言处理技术经历了从基于规则和知识的方法到统计方
法,再到深度学习、预训练模型和大模型的演进过程。这些进步使得计算机在
理解和生成人类语言方面取得了巨大的进展,同时也催生了许多在实际应用中
有重大影响的技术和产品。
自然语言处理传统研究内容
自然语言处理传统研究任务涉及一系列技术和方法,目的是使计算机能够
理解和分析人类语言,主要分为传统基础技术和实际应用任务这两部分。
传统基础技术
传统基础技术主要涉及多个层次的分析,从词法层(如自动分词、命名实
体识别和词性标注)、句法层(如句法分析)、语义层(如语义分析)到语用层
(如篇章分析),下面简要介绍各层主要核心技术。
1. 自动分词
在自然语言处理中,词是基本的语言单位。计算机分析自然语言文本的句
法结构和语义,传统方法中首要任务是识别出句子中的词语或单词。在人类社
会中,自然语言由于不同语言体系的存在具有多样性特征。例如,在英语和德
语这样的曲折语言体系中,词汇之间通常通过空格来分隔,并通过词形变化来
表示语法关系,如时态和人称。相比之下,中文和日语属于孤立语言体系,它
们的词汇间缺乏明显的分隔标记。这不仅导致词的定义和词组划分变得模糊,
还由于缺乏形式语法和构词方法的多样性,以及“同形异义”的特点,使得语
言处理变得更为复杂。因此,在处理这类语言时,需要依赖分词技术来确定句
子中的各个独立语法单元,以便更好地进行语言分析和理解。那么,什么是分
词技术?对于孤立语言体系,如何实现高效的自动分词呢?这些问题将在接下
来的讨论中探讨。
(1)定义:自动分词 (Automatic word segmentation)是计算机语言处理领
域中的一项基础技术,指的是将连续的文本流切分成独立的、有意义的词语单
元的过程。在中文处理过程中,研究者需面临多方面的挑战,包括分词规范的
确定、歧义切分的处理以及未登录词的识别等。
分词规范是一套用于确定词语边界的规则或指导原则。它不仅涉及词与词
之间的基本划分,还需深入考虑动态词性、词的形态变化、词组界定以及专有
名词和缩写的处理等多方面因素,以确保词语的正确划分。例如,在分析句子
自然语言处理传统研究内容 5
“火车穿过南京市长江大桥”时,需要依据分词规范来进行合理的词语划分,确
保每个词语单元的准确性和合理性。为了更好地说明这一点,通过以下例子来
展示不同分词策略对句子含义的影响:
• 不符合规范划分:“火车 / 穿过 / 南京 / 市长/ 江大桥”,这样的划分会
将“南京市”一词拆开,影响了句子的含义。
• 符合规范化分:“火车 / 穿过 / 南京市 / 长江大桥”,这样的划分将每个
词都分割开来,更符合句子的实际含义。
歧义切分是指在分词过程中出现多种切分方式,每种方式可能导致不同的
语义解释或理解。因此,正确的切分对于准确地理解句子非常重要,歧义切分
是自动分词研究中的一个重点。解决歧义切分问题通常需要根据语言的上下
文、语法规则和语义信息来判断最合适的切分方式。下面的例子是一个典型的
组合型歧义:
歧义切分:拍/电影的人
正确切分:拍电影的/人
这个句子如果停顿在‘拍’之后,意思是给电影中的人拍照;如果停顿在
‘拍电影的’之后,指的是电影中的演员或导演等制作者。
未登录词识别是指识别出文本中没有出现在预定义词典或训练语料库中
的词语。在文本处理过程中,很多情况下会遇到一些新词汇,这些词汇可能是
新的专业术语、新兴词汇、缩写、外来语等,如网络热词“凡尔赛”、“PUA”,
这些词语一般没有在预定义词典或词汇表中列出。未登录词识别的目标是确定
这些新词汇,并将它们划分为合适的词语单元,以便于后续的分析和处理。解
决未登录词识别问题通常需要结合上下文、语法规则、统计信息和机器学习方
法来进行判断。一些技术如基于字符级别的切分、统计词频、语言模型等可以
在一定程度上帮助识别和处理未登录词。
(2)自动分词算法:为了有效地解决现代汉语中的分词问题,研究者们已
开发了多种高效的自动分词算法。下面介绍几种常用的自动分词方法,包括最
大匹配法 (Maximum Matching)、基于语言模型的分词方法和基于最短路径的
分词方法等。
最大匹配法是一种基于词典匹配的分词技术,通常可以分为正向最大匹配
(Forward MM, FMM)和逆向最大匹配(Backward MM, BMM)。该方法的
核心原理是通过从左到右(FMM)或从右到左(BMM)扫描待分词文本,配
合预定义的词典来找出最长的匹配词。在具体实施过程中,算法首先设定一个
6 第一章 绪论
滑动窗口,该窗口的长度等于预定义词典中最长词的长度。然后,根据选择的
方向(FMM 或 BMM)移动窗口来扫描文本。每次扫描过程中,它会尝试在
词典中找到窗口中的字符串。如果找到了匹配项,则将此字符串作为一个词来
分割。如果没有找到匹配项,则缩短窗口长度,继续尝试,直到找到匹配项为
止。通过这样的方式,算法将继续扫描和分割文本中的剩余部分,直到整个文
本都被分割成了词语序列。正向最大匹配法的基本步骤如下:
• 第一步:取词典中长度最大的词语作为第一轮取字的长度,从文本的开
头开始,从左向右取该长度字符;
• 第二步:根据所取字符序列在词典中查找最长的匹配词。如果找到匹配
词,就将其切割出来作为一个词语。否则去掉所取字串最右端的一个字,
继续查找词典,直到取字的长度为 1 或者在词典中找到相应词语;
• 第三步:从切割的位置继续扫描剩余的文本,重复上述步骤,直到整个
文本都被切割成词语。
可以通过以下例子说明正向最大匹配法运行过程。
例题 . 假设有一个简短的中文文本:“自然语言处理是计算机科学的一个
分支”,并且有一个包含“自然语言处理”、“计算机科学”和“一个分支”的
词典。使用正向最大匹配法的分词过程可以描述如下:
• 第一步:初始化窗口为最大词长,假设默认最大长度设置为 8,即尝试匹
配“自然语言处理是计”。
• 第二步:因未在词典中找到匹配项,去掉最右侧的一个字符,窗口内的
字符串变为“自然语言处理是”继续尝试匹配。
• 第三步:继续缩减窗口长度,尝试匹配“自然语言处理”,这次在词典中
找到匹配项,将其作为一个词来切割。
• 第四步:从切割的位置继续,对“是计算机科学的一个分支”重复上述过
程,直到整个句子都被分割为词语。
最大匹配法是一种效率较高且相对简单的分词方法,其精度在很大程度上
依赖于所使用词典的质量和完整性。由于它是基于词典的分词方法,因此很可
能遇到新词识别的问题。未来研究可能会探讨如何通过集成其他先进技术来进
一步提高该方法的分词精度和效率。
自然语言处理传统研究内容 7
基于语言模型的分词方法主要利用 n 元语言模型来实现文本分词。在此
方法中,n 元语言模型作为一种统计模型被用来预测文本中特定词语序列的出
现概率,其中 n代表被考虑的上下文词语数量。这个方法主要依赖于两大核心
理念:(i)统计频率:分析各个词汇在大量文本数据中的出现频率,以更准确
地预判哪些词语序列有更高的连续出现概率;(ii)上下文信息:利用词语周围
的上下文信息来更精准地确定词语的边界。结合这两方面的信息,该方法旨在
找到一种分词方案,以最大化整个句子的词序列概率。其基本实施步骤如下:
• 语言模型构建:利用大量已分词的语料库建立 n 元语言模型,计算每个
词在给定上下文中的条件概率
• 词图构建:根据词典找出句子中所有可能的词,并将它们与所有单个字
作为节点构造 n 元切分词图。在此图中,节点代表可能的词候选,边代
表路径,通过计算词在当前位置前 n − 1 个词的上下文下的条件概率来
表示代价
• 最优路径搜索:利用相关搜索算法(例如动态规划),在词图中找到代价
最小的路径,并将其作为分词结果输出
例题 . 假设有一个简短的中文文本:“我喜欢苹果”,并且有一个包含
“我”、“喜欢”和“苹果”的词典。使用 n 元语言模型的分词过程可以描述如
下:
• 第一步:使用大量已分词的语料库建立 n 元语言模型。通过此模型,可
以计算给定上下文中每个词的出现条件概率。
• 第二步:根据词典找出句子中所有可能的词。构建 n 元的切分词图,其
中节点表示可能的词候选,边表示路径。将每个词和所有单个字作为节
点,计算词在当前位置前 n − 1 个词的上下文下的条件概率,这将表示
为路径的代价。
• 第三步:应用相关搜索算法(如动态规划)来找到图中代价最小的路径。
这条路径即表示最优的分词方案。
• 第四步:输出代价最小路径对应的分词结果,即“我 / 喜欢 / 苹果”。
通过结合统计数据和上下文信息,这种方法可以找到最大化整个句子词序列概
率的分词方案,从而实现更为精确的分词结果。
8 第一章 绪论
图 给出了上述例子中基于二元语言模型的切分词图。可以看到,路径
选择主要依赖于在路径上每条边的条件概率。因此,这种方法可以在训练语料
规模足够大和覆盖领域足够多时,获得较高的切分正确率,但同时它的计算量
较大,且性能较多依赖于训练语料的规模和质量。
我 喜 欢 苹 果<S> </S>
苹果喜欢
p(苹果|喜欢)
图 : 基于二元语言模型的切分词图
基于最短路径的分词方法是一种基于图论和动态规划的分词技术。它通过
构建分词图,利用最短路径算法来找到最佳的分词序列,从而实现自动分词。
这种分词方法与基于语言模型的分词技术相似,都需依据词典中的词或词组来
构建分词图。然而,不同之处在于,节点间的权重并非基于条件概率,而是根
据词频或词语概率确定,有时为简化处理,所有权重也可能统一设定为 1。通
过利用最短路径算法(如 Dijkstra 算法、动态规划等)找到最短路径,回溯即
可得到最佳的分词结果。基于最短路径的分词方法能够充分考虑词语之间的连
贯性和上下文信息,从而减少歧义切分和错误分词。它的原理简单而有效,可
在多种语言处理任务中被广泛应用。
(3)结果评估:分词技术的效能在不同方法间存在差异。为了客观衡量分
词系统的性能,采用准确率 (Precision)、召回率 (Recall)和 F-测度作为评价指
标,具体定义如下:
准确率 (Precision) : P =
系统输出中正确的结果个数
系统所有输出结果个数
, ()
该指标衡量了系统输出结果的正确性,即被系统正确识别的词汇占系统所有识
别结果的比例。
召回率 (Recall) : R =
系统输出中正确的结果个数
测试集中正确的答案个数
, ()
召回率则评价了系统识别正确结果的全面性,表明系统正确识别的词汇占所有
应被识别词汇的比例。
F-测度 (F-measure) : F =
2PR
P +R
, ()
自然语言处理传统研究内容 9
F-测度则为准确率和召回率的调和平均值,提供了一个综合性的评估指标。
自动分词技术在自然语言处理领域应用广泛,它能够将连续的文本分割为
单独的词汇单元,为后续的文本处理和语言理解任务打下基础。此技术在信息
检索、机器翻译、实体识别、文本分类及语音识别等多个领域都有重要应用。
利用自动分词技术,可以实现关键词提取、特征构建和命名实体识别等,从而
更准确地实现搜索、翻译及实体抽取,也能更精细地进行文本分类和情感分析
等任务。
2. 命名实体识别
命名实体识别(Named Entity Recognition,NER),也被称为“专名词识
别”,是传统自然语言处理(NLP)中的一项基本且关键的任务,其目的是识
别和提取文本中的特定类别的命名实体,如人名、地名、机构名等,以及时间、
日期、货币和百分比等信息。自然语言文本中常含有大量的非结构化信息,这
使得命名实体识别成为一项具有挑战性的任务。
此任务的核心是将非结构化数据转化为结构化数据,从而使计算机能够更
高效地理解和处理自然语言文本。例如,在处理雇佣合同这类文档时,命名实
体识别可以自动识别和提取其中的关键信息元素(如雇主名称、雇员详情、薪
资信息和合同期限等),并将这些信息结构化,以便于快速和准确的数据检索
和分析。通过这种方式,命名实体识别成为信息提取、问答系统、句法分析、机
器翻译和面向语义网 (Semantic Web)3的元数据标注等应用领域的重要工具,
大大提高了文档处理的效率和准确性。
(1)定义:命名实体识别是自然语言处理领域中一项至关重要的子任务,
其核心目标是从非结构化文本中准确识别和分类具有特定语义价值的实体,并
将它们归类到预先定义的类别中。在这个过程中,实体通常指代可以由专有名
词标识的对象或概念,而类别则可以是常见的分类,如人名、地名或组织机构
名,或是更特定的类别,如时间、日期等,这取决于特定的应用场景和需求。
例如,在以下示例中:
地名 时间
故宫始建于公元 1406 年。
“故宫”和“1406 年”被识别为两个不同的实体,分别属于地名和时间类
3语义网是为了使网络上的数据变得机器可读而提出的一个通用框架。其中,“Semantic”指的是通过更加
丰富和深刻的方式来呈现数据背后的意义或概念,而“Web”则指的是将这些数据互相连接,形成一个庞大
的、互联的信息网络。这样,不仅可以实现数据之间的高效连接,还可以让机器更好地理解和处理这些数据,
从而更加智能和高效地利用网络资源。
10 第一章 绪论
别。这种识别和分类是通过复杂的算法和模型实现的,这些模型经过大量数据
训练,以学习和理解语言的各种细微差异和模式。
在更广泛的范围内,命名实体识别可以被视为信息提取的基础工具,它有
助于构建更高级的自然语言处理应用,如问答系统、机器翻译和语义网络元数
据标注等。它通常涉及使用机器学习和深度学习技术来训练模型,使其能够在
大量的文本数据中准确地识别和分类实体。从技术角度来看,命名实体识别通
常涉及一系列步骤,包括分词、词性标注和句法分析等,这些步骤共同构成了
一个完整的命名实体识别系统,能够处理和分析大量的自然语言文本数据。综
上所述,命名实体识别是自然语言处理领域的一个核心和基础任务,它不仅有
助于提取和分类文本中的关键信息,还为构建更复杂的自然语言处理应用提供
了基础。
(2)技术方法:在命名实体识别(NER)的早期研究阶段,实体的定义和
标注主要依赖于人工操作,这不仅成本高昂,而且效率较低。随着文本数据量
的急剧增加,研究者开始探索利用计算机算法来实现实体的自动识别和标注,
以提高处理速度和准确性。目前,根据研究的发展历程,命名实体识别的方法
可以分为基于规则的方法、基于统计的方法和基于深度学习的方法三类。
基于规则的方法:这种方法依赖于人工编写的一系列规则,这些规则主要
基于实体的模式和上下文信息来进行实体的识别和分类。模式规则主要依赖于
实体的语法结构和常见出现形式,例如,人名通常遵循“姓 + 名”的结构,而
机构名则常以“公司”、“组织”等词汇结尾。上下文规则则是根据实体周围的
文本信息来进行识别,如“华为董事任正非”中的“华为董事”可以作为识别
“任正非”为人名的线索。
基于统计的方法:这种方法主要依赖于对大量人工标注语料的统计和分
析,以挖掘和学习实体的特征和模式。它通常涉及使用各种统计模型和算法,
如 N-gram 语言模型、隐马尔可夫模型(HMM)、最大熵模型、决策树方法
等,从训练语料中学习和提取实体的特征。这类方法的效果和准确性很大程度
上依赖于所使用的语料库的质量和规模。
基于深度学习的方法:图 展示了基于深度学习的 NER 系统框架,这
种方法利用深度学习的强大非线性映射能力,来学习和提取更为复杂和精细的
实体特征。一个典型的基于深度学习的命名实体识别系统通常包括嵌入层、编
码层和解码层三个主要组成部分。嵌入层负责将输入文本转换为分布式表示形
式,通常包括词级和字符级的嵌入。编码层则负责学习输入文本的语义编码,
通常使用卷积神经网络(CNN)或循环神经网络(RNN)等网络结构来捕捉
文本的上下文依赖关系。解码层则负责根据编码层的输出来预测每个输入单元
自然语言处理传统研究内容 11
基
于
深
度
学
习
的
N
E
R
系
统
Softmax, CRF, RNN, Point network...
CNN, RNN, Language model, Tansfomer...
Pre-trained word embedding, Character-lewel
embedding, POS tag, Gazetteer,...
❷编码层
❸解码层
❶ 嵌入层
句子序列
命名实体标注结果
图 : 基于深度学习的 NER 系统框架
的标签,从而实现实体的识别和分类。
通过综合运用这些方法,研究者可以构建高效和准确的命名实体识别系
统,以满足各种自然语言处理应用的需求。
(3)实体标注技术:在命名实体识别的流程中,实体标注是一个核心环节,
它涉及使用特定的标注方案来标记文本中的实体。目前,有多种序列标注方法
得到广泛应用,包括 BIO、BIOSE、IOB、BILOU、BMEWO 和 BMEWO+
等。在本节中,将重点介绍 BIO 方法,这是一种被广泛采用的实体标注方案。
BIO(Beginning-Inside-Outside)是一种常用的序列标注方法,其目的是
通过特定的标签来识别和分类文本中的命名实体,将命名实体识别任务视为一
个逐词逐句的序列标注任务。在 BIO 标注方案中,标签“B”(Beginning)用
于标记命名实体的起始词,后接实体类型的缩写(例如“B-X”表示该词是 X
类型实体的开始)。标签“I”(Inside)用于标记实体的中间部分,也是后接实
体类型的缩写(例如“I-X”表示该词是 X 类型实体的中间部分)。而不属于任
何命名实体的词则被标记为“O”(Outside)。
例如,在图中展示了一个 BIO 标注的示例。在这个例子中,“Li Hua”
是一个人名实体,其中“Li”被标记为“B-PER”(表示人名的开始),“Hua”被
标记为“I-PER”(表示人名的中间部分)。同样地,“Chengdu Panda Base”被
标记为地名实体,其中“Chengdu”和“Panda Base”分别被标记为“B-LOC”
和“I-LOC”。时间实体“Sunday”则被标记为“B-TIM”。所有不属于任何实
体的词汇都被标记为“O”。
12 第一章 绪论
Li Hua went the Chengdu Panda Base on Sunday
B-PER I-PER O O B-LOC I-LOC I-LOC O B-TIM
BIO 标注器
图 : BIO 标记示例
3. 词性标注
词性标注 (Part-of-Speech Tagging, POS)旨在给文本中的每个词分配一个
标签,这个标签揭示了该词在句子中的语法属性和功能。这些属性可以是名
词、动词、形容词等。例如,名词通常可以用作句子的主语、宾语或定语,它
们通常指代人、地点或事物。动词则一般作为谓语出现,表示某种行动或状态。
形容词用于描述名词,提供更多关于名词的信息。相同的词在不用的语境或句
子中不同的位置时,其承担的语法功能和意义也存在差异。例如,
•Your answer is exactly right .
你的回答完全正确。(这里,“right”是一个形容词,用来描述
“answer”)
•Everyone has a right to a fair trial.
每个人都有权获得公正的审判。(这里,“right”是一个名词,指
的是一种权利)
英语中多种词性的单词较为常见,汉语中也有两种或两种以上词性的词,
如“经历”既可做名词,也可做动词。这类词一般称为兼类词。由于每个词性
都有一些通用的特点和用法,这些特点和用法决定了它们在句子中的位置、作
用以及在语言理解和表达中的重要性,因此通过分析词性可以帮助人们确定词
义以及相邻单词信息,更好理解句子结构和含义。
(1)定义:词性标注是自然语言处理领域中一项基本而关键的任务。其主
要目标是为给定句子中的每个单词分配一个适当的词性标签,从而明确其在句
子中的语法角色和功能。
假设有一个给定的句子 S,它可以被表示为一个单词序列 w1, w2, ..., wn。
词性标注的任务则是为这个单词序列中的每个单词 wi 分配一个对应的词性标
签 ti。这样,就得到了一个输出序列 T,其长度与输入序列 S 相同,形式化地
表示为 T = t1, t2, ..., tn。为了实现这一任务,可以利用各种自然语言处理工具
自然语言处理传统研究内容 13
和框架。例如,使用 HanLP 词性标注系统4,可以对句子“A panda lives on
bamboo leaves.”进行词性标注,从而得到每个单词的词性标签。
t1 t2 t3 t4 t5 t6 t7
DET︷︸︸︷
A
NOUN︷ ︸︸ ︷
panda
VERB︷ ︸︸ ︷
lives
ADP︷︸︸︷
on
NOUN︷ ︸︸ ︷
bamboo
NOUN︷ ︸︸ ︷
leaves
PUNCT︷︸︸︷.
w1 w2 w3 w4 w5 w6 w7
词性标注集是一套用于描述和分类词性的集合,它包含了多种词性类别及
其相应的标签,用于在自然语言处理任务中对单词进行精确标记和分类。值得
注意的是,不同的语言和语料库可能采用不同的词性标注集,这些标注集在词
性划分和标记符号上可能存在差异。例如,UPenn Treebank 的中文词性标注
集将词性细分为 33 类,涵盖了名词(NN)、代词(PN)、副词(AD)等类
别;相比之下,中科院的 ICTCLAS 中文词性标注集则将词性分为 22 个主要
类别,包括普通名词(n)、形容词(a)、副词(d)等。
词性标注的核心目的是消除语言中固有的歧义性。在实际应用中,一个单
词可能具有多重词性,而这些不同的词性在句子中所代表的含义也有所不同。
以“book”为例,它可以作为动词使用,如在“book a room”(预订房间)中;
也可以作为名词使用,如在“an interesting book”(一本有趣的书)中。类似
地,在汉语中,“制服”这个词既可以作为名词,表示一种特定的服装(如“海
军制服”),也可以作为动词,表示一种行为或动作(如“制服歹徒”)。因此,词
性标注的任务就是基于单词与其相邻单词的语法关系或其词缀的形态特征来
确定最符合上下文语义的正确词性,从而有助于更深层次的语言理解和分析。
(2)词性标注方法:主要可以分为三种类型:基于规则的方法、基于统计
模型的方法和基于规则与统计结合的方法,下面分别介绍三种方法的特点和应
用。
基于规则的方法是最早的词性标注方法,主要采用人工编写的规则,即根
据兼类词搭配关系和上下文信息编写一组手写规则为单词分配词性。这种方
法通常需要在已有的语言和语法知识的基础上进行规则设计,利用上下文信
息和相邻单词的语境来完成词性标注任务。比如,如果一个未知的英语单词以
“ing”结尾,且前面相邻单词是动词,则将其标记为动词。这种方法的核心是
利用语言学和语法知识来设计规则,通过分析上下文信息和相邻单词的语境来
完成词性标注。以下是一个简化的消歧规则示例:
例题 . 英语单词 that 具有多种词性,比如可以做从属连词(SCONJ),副
4
14 第一章 绪论
词(ADV)。根据以下例句编写消歧规则:
(SCONJ):We know that it is bad.
(ADV):It is not that bad.
通过观察可以发现,在这两句话中 that 前后词存在差异。比如 that 是
SCONJ 时,后一个单词是人称代词(PRP),而 that 是 ADV 时,前一个单
词也是 ADV。因此,可以简单的编写消歧规则进行词性标注。
if 后一个单词是 ADJ、ADV
and 后一个单词是句子边界
and 前一个单词不是动词
then 消除 SCONJ
else 消除 ADV
基于统计模型的方法:这种方法通过分析大量的已标注文本,学习词语
和词性之间的关联。常见的统计方法包括 HMM、条件随机场 (Conditional
Random Field, CRF)等。HMM模型是一种概率序列模型,引入了序列建模的
许多关键概念。给定一个单元序列(单词、字母、语素、句子等),依靠训练语
料库来计算可能的标签序列的概率分布,并选择最佳的标签序列。CRF模型是
一种基于对数线性模型的判别序列模型,考虑了输入序列的上下文信息,并在
标注过程中考虑了序列中各个标记之间的依赖关系。在序列标注任务中,CRF
的目标是学习一个条件概率分布,给定输入序列的情况下,预测出对应的标注
序列,使得标注序列的条件概率最大化。CRF 可以使用各种特征来进行建模,
例如前缀、后缀、上下文等,能够较好地捕捉单词之间的依赖关系。
基于规则与统计结合的方法:该方法将人工设计的规则和统计方法相结
合,利用规则对一些特殊情况进行标注,然后利用统计方法对其他情况进行标
注。具体来说,首先制定一些规则,这些规则可以基于语法、词汇、句法结构
等方面的知识,可以涵盖特定词性或语言现象的规律。然后,基于这些规则对
一些特殊情况进行标注,这可以提高系统对于特定现象的处理能力。接着,使
用统计方法,如 HMM模型、CRF模型等,对剩余的部分进行标注。这些统计
方法通过学习大量已标注的数据中的模式和关系,能够在更一般情况下进行标
注。通过将规则和统计方法结合,可以克服单一方法可能遇到的一些问题。规
则可以用于处理一些特殊情况、稀有词汇或领域特定现象,而统计方法可以在
整体上捕捉数据中的统计规律,提高模型的泛化能力。这种方法可以在一定程
度上综合两者的优势,提高系统在不同情况下的性能。
自然语言处理传统研究内容 15
4. 句法分析
句法分析(Syntax Parsing)是自然语言处理中的一项关键技术,它通过
对句子的语法结构进行分析,确定句子中各个词语之间的语法关系,进而推断
出句子的含义。句法分析可分为短语结构分析和依存句法分析两种类型。
(1)短语结构分析
短语结构分析又称句法结构分析,用于确定句子中各个词语之间的语法结
构和组织,将它们组织成短语和从属关系树。短语结构分析旨在识别句子中的
短语和子句,并表示它们之间的语法关系,如主谓关系、定语关系和宾语关系
等。在短语结构分析中,通常使用上下文无关文法 (Context-Free Grammar,
CFG)或类似的形式化文法5规则来描述句子的语法结构。这些规则定义了如何
将单词组合成短语,并指定短语之间的从属关系。
CFG 定义为一个四元组 G = {N,Σ, S, P},其中,N 是非终结符的有限
集合,包含一些表示语法范畴或短语结构的抽象符号,如 NP、VP 等;Σ 是
终结符的有限集合, 包含语言中的基本单元,如单词、标点符号等;S ∈ N 称
为句子符或初始符,表示从哪个符号开始应用产生式规则进行推导;P 是一组
产生式规则的有限集合:P = {A → α},其中 A 是一个非终结符,α 为一串
非终结符和终结符的组合。每个产生式规则描述了如何将一些非终端符号替换
成另一些符号串,指示语言可以如何组合和排序,从而构造出一些符合语法规
则的字串。例如,
NP → Det Nominal
表示 NP(名词短语)可以由 Det(限定词)和 Nominal(起名词作用的词)组
成。
在 CFG 中,产生式规则将句子分成分句或短语,如名词短语和动词短语,
并定义了如何将非终结符替换为终结符或者其他非终结符。使用这些规则,可
以从一个非终结符开始生成一个句子。例如,从开始符号 S 出发,可以应用
规则“S → NP V P”得到一个名词短语和一个动词短语,然后递归地应用
规则来生成完整的句子,生成句法解析树。下面是一个通过短语结构分析生成
句法分析树的例子。
例题 . 分析句子 “The cat chased the mouse.(猫追逐老鼠)”。使用 CFG
来表示句子的语法结构,并生成相应的句法树。
5形式化文法是一种数学符号体系,一般定义为一个四元组, 包括非终结符集、终结符集、句子开始符以及
产生式规则集。形式化文法用于精确描述语言的语法结构,根据产生式规则的约束,主要分为正则文法、上
下文无关文法、上下文有关文法和无约束文法。
16 第一章 绪论
首先,需要定义一些基本的产生式规则:
S → NP VP
NP → Det N
VP → V NP
Det →“The”
N → “cat” | “mouse”
V → “chased”
然后,可以使用这些规则来分析句子 “The cat chased the mouse.”,并生
成相应的句法树:
S
NP VP
Det N
“The” “cat”
V
“chased”
NP
Det N
“the” “mouse”
在这个句法树中,S表示句子,NP表示名词短语,VP表示动词短语,Det
表示限定词,N 表示名词,V 表示动词。句子 “The cat chased the mouse.” 被
分解成名词短语 “The cat” 和动词短语 “chased the mouse”,并且每个短语都
进一步分解成其组成部分。
在这个例子中,句法树可以帮助计算机理解句子的语法结构,识别主语
(“The cat”)和动词短语(“chased the mouse”),从而有助于进行各种自然语
言处理任务,如问答、翻译和文本生成。但是,需要注意的是,这只是一个非
常简单的示例,实际上,自然语言的语法结构要复杂得多,需要更复杂的文法
规则来进行分析。
在短语结构分析时经常会碰到结构歧义问题。结构歧义可能会导致多种问
题,包括语法解释的混淆、语义歧义以及自然语言处理任务的困难。结构歧义
通常是由于自然语言的复杂性和多义性产生的,同一句话可以被解释成不同
的结构,每种结构都会导致不同的语义。例如,句子 “I saw the man with the
telescope.” 可以有两种不同的句法解析:
•I saw the man (who had) the telescope. 此时,“with the telescope”
被解释为一个修饰词短语,指 “the man” 拥有望远镜。
自然语言处理传统研究内容 17
•I saw the man (using) the telescope. 此时,“with the telescope”
被解释为一个状语短语,指 “I” 使用望远镜。
附着歧义 (Attachment Ambiguity)和并列歧义 (Coordination Ambigu-
ity)是句子结构歧义的两种常见类型。附着歧义指不同的词或短语连接方式,
即不同部分的附加方式。如果一个特定短语可以被附加到句子的不同部分,从
而出现不同的句法解析和意义,那么该句子就具有附着歧义。例如,在上个例
子中,“with the telescope”可以被附加到 “the man”或是 “saw”上,导致两种
不同的解释。并列歧义指两个或多个成分(通常是词、短语、从句等)在语法上
平行排列,具有相同的语法角色。并列结构的成分之间通常由连词(如 “和”、
“或”、“但是” 等)连接。例如,在短语 “old men and women” 中,可以被解
释为 “old (men and women)” 表示老年男性和女性,或者解释为 “(old men)
and women” 表示仅男性为老年人。结构歧义可能会导致多种问题,包括语法
解释的混淆、语义歧义和自然语言处理任务的困难。多种语法解析会导致计算
机或解析器无法确定正确的语法结构,使其难以正确地分析句子。此外,不同
的语法结构解释可能导致不同的语义解释,使文本理解和语义分析变得复杂,
增加处理时间和资源的成本。
为了解决结构歧义问题,传统自然语言处理研究提出了许多技术和方法,
包括使用上下文信息、语法规则、语义分析以及深度学习模型等。本节介绍
一种常见的基于 CFG规则的分析方法——CKY(Cocke-Kasami-Younger)算
法。CKY 算法是一种用于句法分析的动态规划算法,广泛应用于自然语言处
理和计算语言学领域。它的主要目标是确定一个句子的语法结构,将句子解
析成句法树,同时处理结构歧义问题。它的核心思想是使用一个乔姆斯基范
式6的文法规则集合进行分析,并用一个二维表格(通常称为 CKY 识别矩阵)
来存储中间结果,即可能的短语结构。最后,通过查找矩阵顶部的位置来表示
整个句子的语法结构。这个识别矩阵存储的内容将包含整个句法树的信息。
CKY 算法的基本步骤如下:
• 初始化识别矩阵:对于长度为 n 的句子,创建一个 (n+1)× (n+1) 矩
阵的上三角部分;
• 填充终结符:令 t0,0 = 0,然后在矩阵对角线位置,从 t1,1 到 tn,n,在
主对角线的位置上依次放入输入句子的单词 wi;
• 使用文法规则组合:从底部开始,逐渐向上填充紧靠主对角线的位置
ti,i+1。如果在文法的产生式集中有一条规则:A → wi,则 ti,i+1 = A。然后,
6乔姆斯基范式(Chomsky Normal Form,CNF)下的语法规则通常为 A → BC 或 A → w 的形式,
即规则的右侧扩展为两个非终结符或者单个终结符。
18 第一章 绪论
按平行于主对角线的方向,一层一层地向上填写矩阵的各个元素 ti,j,如果有
规则:A→ B C 且 ti,k = B, tk,j = C ,则 ti,j = A;
• 查找句法树的根:通过不断组合,可以在矩阵顶部找到位置填入句子初
始符 S,它表示整个句子的语法结构。识别矩阵存储的内容包含整个句法树的
信息。
CKY 算法的识别过程就是正确填充解析表的过程。算法会考虑两个单元
格的内容是否可以以语法规则认可的方式进行组合,下图中给出的算法从左到
右逐列填充上三角形矩阵,每一列从下到上填充。这个方案保证了在任何时候
都拥有填写单元格所需的全部信息(因为左侧和下面的单元格已经填充完毕)。
下面是一个是采用 CKY 算法分析句子生成句法分析树的例子。
例题 . 给定文法 G(S):S → NP VP NP → Det N VP → V NP
Det →“The” N → “cat” | “mouse” V → “chased”
采用 CKY 算法分析句子 “The cat chased the mouse.(猫追逐老鼠)”。
首先,对句子进行词性标注
The cat chased the mouse
(Det) (N) (V) (Det) (N)
初始化识别矩阵, 并填充句子的单词:
0
The
cat
chased
the
mouse
然后,从底部开始,逐渐向上填充紧靠主对角线的位置, 填入单词的词性:
0 Det
The N
cat V
chased Det
the N
mouse
根据文法规则,自底向上进行组合,并找到根节点:
自然语言处理传统研究内容 19
0 Det NP S
The N
cat V VP
chased Det NP
the N
mouse
CKY 算法可以表示句子的所有可能解析,但不能获得单个最佳解析。从
所有可能的解析中选择一个正确的解析可以通过引入概率上下文无关文法来
完成。通过引入概率模型,表示语法规则的相对频率或概率分布,可以为每个
结果分配分数,找到最高分数的解析树。
(2)依存句法分析
依存句法 (Dependency Grammars)分析旨在解析句子中词汇之间的依存
关系,即词汇之间的句法结构。在依存句法中,句子的句法结构完全通过单词
或词语之间的有向二元语法关系来描述,无需考虑短语组合或短语结构规则。
这些关系由两个主要成分构成,即中心词(head)和依赖词(dependent)。中
心词负责组织其他词汇,而依赖词类似于描述中心词的修饰语。可以通过有向
的、标记化的弧线从中心词指向直接依赖于它的词汇,来表示它们之间的依存
关系。例如,
The cat chased the mouse.
在这个例子中,可以看到词汇之间的依存关系。“cat” 是句子的主语,它依赖
于动词 “chased”,是执行动作的主体,而 “mouse”也依赖于动词 “chased”,是
动作的客体。
常见的依存关系可以分为两大类:从属关系和修饰关系。从属关系描述与
谓词相关的语法,其中包括主语关系、宾语关系、间宾关系等,而修饰关系则
对单词如何修饰或限定它们的中心词进行分类,包括定中关系、状语关系、介
词关系等。Universal Dependencies(UD)7提供了一个包含 37 种依存关系的
库,其中包括主语(NSUBJ)、直接宾语(OBJ)和间接宾语(IOBJ)、名词
性修饰语(NMOD)等。
在依存句法分析中,依存关系可以用树状结构表示,称为依存树 (Depen-
dency Tree)。依存树的每个节点表示一个词汇,而有向边表示依存关系。例
如,“The cat chased the mouse”的依存树如下:
7
20 第一章 绪论
chased
cat
The
mouse
the
一般来说,满足以下 3 个条件的有向图被称作依存树:(i)有一个被指定
为根的顶点,该顶点无输入弧;(ii)除了根节点之外的每个顶点都有一个输入
弧;(iii)从根节点到其他每个顶点都有唯一的路径。
依存树主要用来研究句子的投射性。投射性是指生成的依存树能否 “投
射”到一条直线上。如果依存树不具有相交的弧,则称依存树是投射的。非投
射树可能会涉及跨越词组或句子部分的弧,增加依存句法分析的复杂度。
目前,常见的依存句法分析算法可大致归为:决策式分析方法、基于图的
判别式分析方法、基于动态规划的生成式分析方法以及基于约束满足的分析方
法。本节将简要介绍前两种方法。
决策式依存句法分析主要基于移进-归约 (Shift-Reduce)算法。该算法使用
分析栈和输入缓冲区来管理分析过程,并定义一组预定义的转移操作:移进
(Shift)、左弧(Left-Arc)和右弧(Right-Arc)等。移动操作将句子中的下一
个词移到分析栈中,而弧操作将词与栈中的其他词建立依存关系。具体步骤如
下:
• 初始化:将输入句子分解为单词或词汇单位,并将它们放置在一个输入
缓冲区中。同时,创建一个初始为空的分析栈。
• 移进操作(Shift):从输入缓冲区中提取一个词汇单位并将其推送到分析
栈的顶部。此操作意味着将该词汇单位纳入到分析树的一部分。
• 归约操作(Reduce):检查分析栈顶部的元素,以确定是否可以应用一个
或多个文法规则进行归约,从而构建更大的结构。如果栈顶的单词是另
一个单词的支配词,则移除栈顶的单词,执行左弧归约。如果栈顶的单
词是另一个单词的中心词,则取出第二个单词并将其推送到栈顶,执行
右弧归约。
• 重复:继续执行移进和归约操作,直至完成句子的分析。这可能需要多
轮的移进和归约操作来构建完整的句法树。
自然语言处理传统研究内容 21
• 结束:当分析栈为空且输入缓冲区也为空时,分析结束。此时,关系集将
代表最终的分析结果。
该方法是一种贪心算法,通过有监督的机器学习训练预测模型,在每个
步骤提供单一选择,解析器按照该选择进行处理,不探索其他选项,不回溯。
表是采用决策式依存句法分析方法生成例的依存树的分析过程。
基于图的依存句法分析 (Graph-based Dependency Parsing)是依存句法分
析算法中第二个重要的方法。相对于决策式方法,基于图的分析器构建一个图
结构来表示句子中的依存关系,它对长句子的解析更加准确。分析器在句子的
所有可能树结构中寻找一个(或多个)得分最高的树结构,通过将搜索空间编
码为有向图,采用图论的方法来寻找空间中的最优解。具体步骤如下:
• 首先:将输入文本进行分词处理,将其分割成单词或子词单元;
• 构建依存图:(i)初始化一个完全带权有向图,其中每个单词作为图的
一个节点,依存关系则作为边。(ii)依存关系揭示了一个单词与句子中
其他单词之间的语法关系,例如主谓关系、动宾关系等。(iii)在该图中,
有向边的头部是中心词,箭头则指向附属词。每条边的权重反映了中心
词和附属词之间关系的得分。(iv)设立一个额外的 root 节点,其出边指
向句子中的所有其他节点。
• 依存关系分析:构建完依存图后,利用图算法来分析图中的依存关系。寻
找句子的最佳依存句法分析等价于在依存图中寻找从 root 节点出发的最
大生成树。
基于图的依存句法分析方法有很多,包括基于规则的方法、基于统计模型
的方法和基于神经网络的方法。最近,深度学习方法在依存句法分析中也取得
了显著的进展,使用神经网络来学习依存关系。
(3)两种句法分析的关系和区别
短语结构分析和依存结构分析在分析句子的方式、所关注的语法关系和表
示方法等方面有一些区别,但它们也有一些共同之处,并且在某些应用中可以
相互补充。在语法结构的表示方式上,短语结构分析中句子的语法结构以树状
结构表示,其中每个节点代表一个短语或子句,而叶子节点代表单词或标记;
在依存结构分析中,句子的语法结构以有向图表示,其中单词是节点,依存关
系是有向边。在语法关系的表示上,短语结构分析关注短语之间的嵌套和组合
关系,通过树中的节点来表示这些结构。依存结构分析关注单词之间的直接依
存关系,通过有向边来表示哪些单词是其他单词的依赖。对于句法分析的目
22 第一章 绪论
表 : “The cat chased the mouse”的决策式依存句法分析过程
编号 操作 分析栈 输入缓冲区 关系集
0 初始化 [ ] [The cat chased the mouse] { }
1 Shift [ The ] [cat chased the mouse] { }
2 Left-Arc [ ] [cat chased the mouse] {The ← cat}
3 Shift [ cat ] [chased the mouse] {The ← cat}
4 Left-Arc [ ] [chased the mouse]
{The ← cat,
cat ←chased}
5 Shift [ chased ] [ the mouse]
{The ← cat,
cat ←chased}
6 Shift [ chased the ] [ mouse]
{The ← cat,
cat ←chased}
7 Left-Arc [ chased ] [ mouse]
{The ← cat,
cat ←chased,
the ← mouse}
8 Right-Arc [ chased mouse] [ ]
{The ← cat,
cat ←chased,
the ← mouse,
mouse ← chased}
9 Reduce [ chased] [ ]
{The ← cat,
cat ←chased,
the ← mouse,
mouse ← chased}
10 Reduce [ ] [ ]
{The ← cat,
cat ←chased,
the ← mouse,
mouse ← chased}
自然语言处理传统研究内容 23
标,短语结构分析主要关注短语之间的句法关系,例如主谓宾关系、修饰关系
等。依存结构分析主要关注单词之间的依存关系,即哪些单词是句子中其他单
词的中心或依赖。此外,短语结构分析通常用于语法分析、句法分析、句法树
生成等任务。依存结构分析通常用于关系抽取、语义分析、机器翻译等任务。
尽管短语结构分析和依存结构分析有不同的方法和关注点,但它们不是互斥
的。实际应用中,这两种方法有时可以结合使用,以提高句法和语义分析的准
确性。例如,可以使用依存结构分析来提取句子中的基本依存关系,然后使用
短语结构分析来更深入地理解短语之间的语法结构。这种结合可以增强 NLP
系统对文本的理解和处理能力。
5. 语义分析
计算机要能深入地理解和处理人类语言的含义和意图,词语和句法结构可
以提供一定的信息,但仅仅基于这些信息可能无法完全捕捉文本的真实含义。
要让计算机理解文本所传达的真正含义、推断用户的意图、理解文本中实体之
间的关系,需要对句子所表达的语义进行分析和解释。例如,对于句子“他买
了一辆新车。”,语义分析能够帮助计算机理解“他”是指谁而不是其他人,以
及“新车”表示一种交通工具而非其他事物。
(1)语义表示
在计算语义学中,理解语义的一个重要方法是创建语义表示(meaning
representation),以捕获文本所表达的含义。这种形式化结构将输入的自然语
言和与其相关的具体应用所需的各种非语言世界知识联系起来。比如,通过阅
读说明书来学习如何使用某个产品。语义分析 (Semantic Analysis)的任务就是
创建语义表示并将其指派给语言输入的过程。表示语法和语义的框架被称为语
义表示语言,表示语言需要能够支持语义处理的计算要求,包括确定命题的真
实性、无歧义性,能够表示变量、支持推理等。
一阶逻辑 (First-Order Logic)是一种易于理解和计算的语义表示语言,它
所表示的内容包括对象、对象的属性和对象之间的关系。FOL 用常量(con-
stant)、函数(function)和变量(variable)三个术语来表示语言中的信息块。
其中,常量指代某个特定对象,如“Car”、“Restaurant”,通常用首字母大写
的单词表示;函数相当于英文中的所属格概念,如“Chengdu’s location” 可
表示为函数 Location Of (Chengdu)。此外,还可以加入逻辑连接词 ∧、∨ 表
示更加复杂的结构。
例如,可以用如下结构表示“I like apple and I don’t like pear.”这句话:
24 第一章 绪论
Like(Speaker,Apple) ∧¬Like(Speaker, Pear)
结构中的常量也可以替换成变量,用来指代非特定对象。引入存在量词 ∃
和全称量词 ∀ 后,变量既能够表示特定未知事物,又能表示某个分类中的一
切事物。句子“A tennis court provides drinking water.”,不定冠词 a 表示存
在一个网球场,用 FOL 语言可以将这个含义表示为:
∃x TennisCourt(x) ∧ Provides(x,DrinkingWater)
对于句子“All tennis courts provide tennis nets.”,all 表示网球场这一类
别下的所有对象都满足该情况,使用全称量词可表达为:
∀y TennisCourt(y)⇒ Provides(y, TennisNets)
从词汇和句子级层面,语义分析任务可以分为两个部分:词义消歧和语义
角色标注。
(2)词义消歧
为了给输入的自然语言建立准确的意义表示,需要先为句中的词语选择正
确的词义。许多词语具有多义性,如 break 既可以作为动词表示“打破”,也
指“一段休息”。词义消歧 (Word Sense Disambiguation, WSD)任务就是为单
词选择符合上下文语境的正确词义。
词义消歧的方法有很多。早期主要是基于规则的消歧方法,主要依赖于手
工编写的规则和启发式技术,以帮助确定单词在特定上下文中的含义。这些方
法在计算机处理自然语言的早期阶段得到了广泛使用,但是由于方法通常需要
大量人工努力来编写和维护规则,因此在大规模和复杂的自然语言处理任务中
存在局限性。随着机器学习和深度学习技术的发展,基于数据驱动的方法在词
义消歧方面取得了更好的表现。这些方法基于大规模语料库中的数据和统计模
型,通过大量的训练数据和特征工程来选择最佳词义。下面简要介绍三种词义
消歧方法:
简单最近邻算法是一种使用上下文单词嵌入的词义消歧方法,是一种标
准监督算法。首先,需要构建一个包含已知含义的单词和它们的定义、上下文
示例等信息的词汇库或语料库。然后,在待消歧的单词周围选择一个上下文窗
口,计算待消歧的单词和词汇库中的每个已知含义单词的相似性得分(如余弦
相似度、Jaccard相似度等)。通过得分比较,选择最佳的词义,完成词义消歧。
基于特征的词义消歧算法依赖于从文本中提取的特征,以帮助确定单词在
特定上下文中的确切含义。这些特征可以是与单词、上下文或其他相关信息有
自然语言处理传统研究内容 25
关的各种属性和指标。其核心思想是将待消歧的单词放置在上下文中,并提取
与该单词相关的特征,然后通过训练一个分类器(如 SVM 分类器)来确定最
适合的词义。
Lesk 算法是一种基于字典的词义消歧方法。与监督方法不同,Lesk 算法
不依靠标记数据或带有词义标注的语料库,而是依靠词库或者字典中的词义注
释,通过一系列的算法计算目标单词的字典注释与邻近单词的交集,并选交集
最大的词义作为目标单词的正确词义。Lesk 算法的优点是简单易实现,并且
不需要大量的训练数据。然而,它也存在一些限制,如对上下文窗口的选择敏
感,无法处理多义词的复杂情况,以及对定义中的词汇和语法结构的依赖。通
常 Lesk 算法会与其他更复杂的词义消歧方法结合使用。
不同任务和应用场景可能需要不同的词义消歧方法,通常需要根据具体情
况选择合适的方法。词义消歧对于提高自然语言处理任务的性能和准确性非常
关键,也是 NLP 领域的一个重要研究方向。
(3)语义角色标注
词义消歧确定了句子中各个单词的词义,在词汇层级上完成了语义分析任
务。为了使机器更好地理解文本的整体意思,需要将单词的含义与句子的语义
联系起来,这就是语义角色标注 (Semantic Role Labeling, SRL)任务。SRL 针
对整个句子,以句子中的谓词为核心,分析其他成分与谓词之间的关系,即找
出句子中哪一部分是给定谓语的语义变元,为它选择合适的角色。
PropBank8(Proposition Bank)是一个 SRL 语料库资源。PropBank 中
每个动词的每个义项都有一个特定的角色集,这些角色用 Arg0,Arg1,...,Arg5
等表示。PropBank 还有一些不与具体动词直接相关的非编号论元 ArgM,表
示修饰义。如 ArgM-LOC 表示地理位置角色、ArgM-TMP 表示时间角色。以
动词 agree 的第一个义项“同意”为例,PropBank 定义了如下的角色集,对
句子“Kelly agreed on travel plan”的角色标注如图所示。
基于特征的语义角色标注算法通过解析器对输入的字符串进行解析,生成
解析树。在句法分析的基础上,算法遍历解析树,找到所有谓词,并为之检查
解析树中的每个节点,使用监督分类来确定该节点是否在该谓词中扮演语义角
色。
语义分析是机器深入理解文本意义的关键,在很多自然语言处理任务中发
挥着重要作用。在信息检索方面,语义分析可以帮助搜索引擎理解查询意图,
提供更准确、更相关的搜索结果;在机器翻译系统中,可以对源语言和目标语
言之间的语义关系进行建模,提高翻译的准确性;在自动文摘中,通过语义分
8
26 第一章 绪论
图 : 语义角色标注示例
析,系统可以自动从大量的文本中提取出关键信息,并生成文本摘录。
6. 篇章分析
篇章,又称语篇,它是由一组有结构、有组织的相邻句子构成的自然语言
文本,比如一篇新闻、一段对话、一节小说。篇章通常由句子、段落或话语组
成,这些句子、段落或话语之间通过逻辑、语法和语义关系相互连接,以构建
一个完整的意义和信息结构。篇章分析旨在理解和处理长文本或连续对话中的
语言内容,以揭示文本的结构、主题、情感、逻辑和信息关系。通过篇章分析,
机器可以更好地理解和解释各种类型文本的上下文、语境和含义,从而应用于
NLP 应用程序,如自动文档分类、情感分析、问答系统、信息检索、机器翻译
和虚拟助手。
(1)连贯性分析
篇章呈现出局部连贯性 (Local Coherence)和全局连贯性 (Global Coher-
ence)。局部连贯性是指句子之间在段落或话题内部的连贯性,通常通过连接
词、代词、重复等手段来实现。全局连贯性是指整个文本的连贯性,包括主题
的延续、情节的发展和结构的组织。人们对篇章的理解和解释通常建立在这种
连贯性的基础上,它能反映同一篇章中句子之间的关系,使篇章区别于随意拼
凑而成的句子组合。连贯性是一篇文章的基本属性,而连贯性检测是衡量文本
质量、分析语篇结构的重要任务。
篇章的局部连贯大致包括关系连贯、实体连贯和主题连贯。
关系连贯: 关系连贯体现在邻近句子或从句之间的结构化关系,指在文
本中邻近句子关系保持一致,确保文本的逻辑和信息流。例如,语句“晓晴从
上海坐飞机到成都。她每天锻炼一个小时。”这两句话是不连贯的,因为读者
无法理解“坐飞机”与“锻炼”有何关系,即俗称的“前言不搭后语”;相比之
下,语句“晓晴从上海坐飞机到成都。她要参加一项运动比赛。”则没有这种
自然语言处理传统研究内容 27
问题,后一句为前一句解释了原因。语篇都是由许多这样的连贯关系构成的。
修辞结构理论 (Rhetorical Structure Theory, RST)9是一种常用的连贯关
系模型。RST 用核心 (Nucleus)和卫星 (Satellite)定义两个文本区间之间的关
系。核心通常是文本中比较重要的部分,可以独立存在,具有明确的意义,而
卫星是与核心相关的、支持性的、解释性的或补充性的部分。常用的 RST 连
贯关系包括起因(reason)、阐释(elaboration)、论据(evidence)等。RST 关
系通常用树状结构表示,通常使用移位规约和其他解析算法来构建。图中的叶
子节点称为基本语篇单元 (Elementary Discourse Units, EDUs),它由语篇片
段组成。核心语句和卫星语句的关系用箭头表示,从卫星语句指向核心语句。
例题 . 下面 3 句话构成一个简单的语篇,分析它的连贯关系。
(i) 李华想来成都看大熊猫。
(ii) 李华已经到四川了。
(iii) 他的 IP 地址显示为四川省。
可以看出,句(ii)是语篇中的核心,而句(i)和句(iii)是对句(ii)的
信息补充。句(i)是句(ii)的起因,而句(iii)是句(ii)的论据。整个语篇
的 RST 关系树如图所示。
李华想来成都看大熊猫。 李华已经到四川了。 他的IP地址显示为四川省。
Reason Evidence
图 : RST 关系树
实体连贯:语篇会聚焦于某个突出的实体,如人物、地点、物品等。实体
连贯要求文本中提及的实体在整篇文章中保持一致,避免在不同实体之间来回
切换。中心理论 (Centering Theory)10是基于实体的连贯性领域内最有影响力
的理论之一。中心理论通过跟踪语篇模型中的显著实体来衡量语篇的连贯性,
认为语篇中的显著实体更有可能被代词化或出现在突出的句法位置,例如主
9RST 是由 Mann 和 Thompson 在 1987 年提出的一种基于文本局部之间关系的关于文本组织的描述理
论。
10中心理论最初由 Grosz, Sidner 和 Sorkin 在 20 世纪 80 年代末提出,用于研究语篇中的指代、连贯性
和信息结构。
28 第一章 绪论
语或宾语。实体网格模型 (Entity Grid Model)是一种常见的实体连贯性模型,
它采用自底向上的方法来计算哪些实体的引用,确保文本的连贯性。
主题连贯:主题连贯是指文本中不同部分之间关于主题的一致性。在连贯
性语篇中,相邻的句子、段落或文本部分通常都围绕相同的主题或话题展开,
使用相关的词汇和信息,以确保文本的连贯性和理解性。通常,相邻句子通过
词汇上的连贯方式表现出主题连贯,因为相邻句子通常都是为同一主题服务,
会包含相同或相关的词语来讨论主题。例如,语句“鲁迅的作品深刻地揭露现
实。我喜欢读鲁迅的书。”中,两句话都包含“鲁迅”这一人名,表示它们讨
论相同的主题。
全局连贯性的表现形式与局部连贯性相似,但是着重关注文本中各个部分
之间的关系,以及这些部分如何共同构建文本的整体理解。在进行全局连贯性
分析时,需要考虑一些关键步骤和因素,如主题和中心思想、信息结构、逻辑
连接、信息层次、文本结构等。全局连贯性分析有助于提高文本的质量,可以
应用于各种文本类型,包括文章、报告、小说、学术论文、演讲稿和广告等。
(2)指代消解
指代消解是篇章分析的另一个重要任务。指代消解旨在确定文本中不同部
分是否指代(共指)同一个实体。比如,在语句“鲁迅原名周树人,字豫才。
他是浙江绍兴人。”中的“他”和“鲁迅”指代同一个话语实体“鲁迅”。像这
样两个用语指向同一个话语实体的现象称为共指 (Coreference)。在自然语言
文本中,经常会出现代词(如“他”、“她”、“它”)或名词短语(如“这家公
司”、“这本书”)来指代之前提到的实体(如人、物、地点等)。指代消解任务
是将这些指代词或短语与先前提到的实体建立联系,以确保读者或计算机能够
正确理解文本。
指代包含两种用语:先行语 (Antecedent)和照应语 (Anaphor)。先行语是
指先将实体引入文本中的用语,照应语则是指后文中用来指示先行语所代表实
体的表述词。比如,在上段话的例子中,“他”就是先行语“鲁迅”的照应语。
根据照应语和现行语出现的位置,可以将指代现象分为两种情况。
回指(回指 (Anaphora)):当先行语出现在照应语之前时,称为回指。回
指主要包括直接回指和间接回指。直接回指是指代词直接引用先前提到的实体
或概念,而且这个引用关系相对明确和直接。间接回指是指代词引用先前提到
的实体或概念,但这个引用关系可能不太明显或需要上下文来理解。下面是两
种回指的例子。
•Mary has a dog. It is very friendly.
“It” 是一个直接回指,指代前文提到的“Mary’s dog”。
自然语言处理传统研究内容 29
• 门口停着好些三轮车, 许多车夫在那里闲站着11。
“车夫”是一个新引入的实体,但是根据前文的信息可以知道它与
“三轮车”形成照应关系,是一个间接回指。
预指 (Cataphora):当先行语出现在照应语之后时,称为预指。预指一般在
文本中使用代词来引用稍后将要提到的实体或概念。例如,语句“If you want
some, there’s coffee in the pot.”中,“some”是一个照应语,指代后文中的
“coffee”。
按照照应语出现的位置,指代消解分为回指消解和预指消解。按照照应语
的语义关系强弱程度,指代消解又可分为共指消解和非共指消解。共指是先行
语和照应语存在等价关系,且指向同一实体。共指关系可以脱离上下文语义独
立存在,而非共指关系中先行语和照应语指示不同的实体,需要上下文来确定
语义关系。不管是哪种指代消解,都需要进行指代识别,即找出句子中所有的
指代,包括代词、名词短语或其他词语,以及它们的先行语(如果存在)。一
旦指代被识别,系统就可以继续进行指代消解,确定这些指代与其先行语之间
的关系,从而实现对文本的深层理解。指代消解通常包括以下几个步骤:
• 指代识别:在文本中识别潜在的指代关系,即找到代词、名词短语或其
他词语,以及它们可能的先行语。
• 上下文建模:一旦潜在的指代被识别,接下来的步骤是建立指代与其周
围上下文之间的关系。这包括考虑指代词所在句子、前文和后文的内容,
以捕捉上下文信息。
• 特征提取:在上下文建模的基础上,需要提取用于指代消解的特征。这
些特征可以包括词性、词义、句法结构、距离等信息,以帮助系统更好地
理解指代关系。
• 指代消解决策:在指代识别、上下文建模和特征提取之后,系统需要进
行决策,以确定指代词与其可能的先行语之间的关系。这个决策可以是
二元分类,即判断是否存在共指关系,也可以是多类别分类,识别具体
的共指关系类型。
• 生成或更新指代关系:一旦确定了指代关系,系统会生成或更新相应的
指代关系表,以记录文本中的共指关系。这可以用于后续的文本处理和
理解。
11摘自《半生缘》
30 第一章 绪论
目前常见的指代消解方法包括基于规则的方法、机器学习方法和深度学习
方法。基于规则的方法使用人工制定的规则集来识别指代关系,而机器学习方
法则利用标记的语料库来训练模型,自动学习指代关系的特征。深度学习方法
采用深度神经网络,如递归神经网络和大模型(如 GPT),来捕捉上下文和语
义信息,从而更准确地解决指代消解问题。这些方法通常结合了特征工程、上
下文建模和分类决策等步骤,以提高指代消解的性能,有助于自然语言处理应
用中的文本理解和生成。
篇章分析是自然语言处理中的重要任务,从语篇整体层面来理解和组织文
本信息,以揭示文本的结构、主题、关系和含义。通过篇章分析,机器能够更
全面地理解长文本、文章、新闻报道等文本类型,为构建文档摘要、问答系统、
信息检索和机器翻译等自然语言处理应用提供关键支持。随着深度学习技术的
发展,篇章分析在自然语言处理领域取得了显著进展,在文本理解准确性和处
理效率方面都有提高,为信息处理和文本自动化带来了显著的推动力。
实际应用
1. 机器翻译
机器翻译(Machine Translation, MT)是自然语言处理领域的一个核心应
用,其目标是利用计算机技术将一种语言的文本准确、流畅地翻译成另一种语
言。这项技术在信息获取和跨语言交流方面具有重要价值,特别是在全球化的
背景下,它可以有效地弥补语言间的信息鸿沟和交流障碍。
机器翻译的发展历史可以追溯到 20世纪中期。在 1949年,Warren Weaver
发表了一篇备忘录,题为《翻译》(Translation)。在这篇备忘录中,Weaver
提出了机器翻译问题12,探讨了如何使用计算机来进行自动翻译的概念。这篇
备忘录被认为是机器翻译领域的重要历史里程碑。在随后的十多年里,科学家
们探索不同的方法和技术来解决这些机器翻译挑战。不过,这些早期研究集中
在基于规则的方法上,翻译系统尝试使用语法和词典来进行翻译。因此,这些
系统的效果十分有限,难以处理语言的复杂性和歧义性。1966 年,美国科学
院成立了自动语言处理咨询委员会,发布了题为《语言与机器》的报告。该报
告明确指出:“目前对机器翻译的强烈支持似乎缺乏充分理由”,并认为“机
器翻译面临着难以克服的语义障碍”。受此报告影响,各类机器翻译项目锐减,
导致机器翻译研究在全球范围内陷入低谷期。不过,随着计算机技术和语言学
12备忘录中的问题被称为“Weaver 的三难问题”:语言难题:如何将一种语言的句子翻译成另一种语言,以
便另一个人可以理解?信息理论难题:如何确保翻译后的句子传达的信息与原始句子相等或相近?解码难题:
如何构建一种方法,使计算机能够自动执行翻译,而不需要人类介入?
自然语言处理传统研究内容 31
的发展,1970 中后期机器翻译研究开始复苏。1976 年,加拿大蒙特利尔大学
与加拿大联邦政府翻译局联合开发了一个名为 TAUM-METEO 的机器翻译系
统,该系统主要用于天气预报翻译,每小时可以翻译 6-30 万个词,是机器翻
译发展史上的一个里程碑。之后,多国政府开始启动多语言机器翻译计划。
九十年代开始,计算机技术飞速发展,深度学习开始崭露头角,机器翻译
研究进入了一个空前辉煌的繁荣时期。1993 年,IBM 公司提出了统计机器翻
译模型。该模型利用大量双语文本数据来训练翻译系统,极大提高了翻译质
量。在 2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一种端到端的编码
器-解码器架构,该架构使用卷积神经网络将源文本编码为连续向量,随后通
过循环神经网络作为解码器,将状态向量转换为目标语言,开创了神经机器翻
译的先河。之后,基于编码器-解码器架构,研究学者又将深度学习模型应用
到机器翻译系统,引入注意力机制,进一步提升了翻译质量。未来,随着深度
学习和自然语言处理技术的不断发展,机器翻译的性能还将继续提高。
机器翻译可以视为一个序列到序列的映射问题,其挑战主要源自语言间的
结构和词汇差异。不同的语言有不同的句法结构和词汇体系,这使得直接的词
到词映射变得困难和不准确。例如,给定英文句子“There is a mobile phone
on the desk.”,其对应的中文翻译为“桌上有一个手机。”,原文单词和译文并
非按顺序一一对应。
为了解决这些问题,研究者们引入了编码器-解码器网络(Encoder-decoder
Networks)这一架构。在这个架构中,编码器首先将源语言句子转换为一个中
间的表示(或称为上下文向量 h),这个表示捕获了句子的语义信息。然后,解
码器使用这个中间表示来生成目标语言的句子。为了提高翻译的准确性和流畅
性,这个网络还引入了交叉注意力(Cross-attention)机制,它允许解码器在
生成目标语言句子时参考源语言句子的所有部分,而不仅仅是当前的词或短
语。这个架构通常使用大规模的平行语料库进行训练,其中包含了大量的源语
言和目标语言的句子对。通过这样的训练,系统能够学习到从源语言到目标语
言的复杂映射关系,从而实现高质量的机器翻译。
在实际应用中,机器翻译不仅可以帮助用户获取各种语言的信息资源,还
可以与语音识别技术结合,为实时的跨语言交流提供支持,如同声传译中的实
时语音翻译等。从早期基于规则和统计方法到现代的神经机器翻译,机器翻译
领域经历了巨大的演进,翻译质量和效率都有了显著提升。不过,机器翻译仍
然面临一些挑战,包括低资源语言、多模态翻译和解释性问题等。未来,预训
练模型和自监督学习等新兴技术将继续推动翻译质量的提高。机器翻译研究将
继续在全球范围内推动文化和语言之间的交流,为世界带来更大的互联互通。
32 第一章 绪论
2. 文本分类与情感分类
文本分类(Text classification)旨在将给定的文本分类为预定义的类别中
的一个,常见类别包括情感、主题、语言和其他自定义类别。文本分类可以表
示为一个数学函数,该函数将文本映射到一个或多个预定义的类别标签13。这
个函数可以形式化为:
f(text)→ category ()
其中,f 是文本分类函数,接受文本作为输入,text 是待分类的文本数据,
category 是文本被分类到的一个或多个类别标签。这个函数的目标是将输入
文本映射到一个或多个类别,通过分析文本的特征和上下文信息来实现分类决
策。
文本分类的研究工作最早开始于 20 世纪 50 年末。早期,研究人员通过
制定专家规则和利用知识工程来建立专家系统进行文本分类。不过该方法需要
大量的人工工作和专业领域知识,且难以应对大规模和复杂的文本数据。到了
80年代,随着计算能力的提高和大规模文本数据的可用性,统计方法和机器学
习方法开始应用于文本分类。经典方法如朴素贝叶斯法 (Naive Bayes model,
NB)、支持向量机 (Support Vector Machine, SVM)等开始被应用于文本分类,
它们能够从数据中自动学习分类规则。特别到了 90 年代,互联网在线文本数
量增长和机器学习学科的兴起,研究人员着重于特征工程,尤其是基于词袋模
型 (Bag of Words, BoW)的特征提取方法。BoW将文本表示为词汇表中词项的
向量,用词频(Term Frequency)或 TF-IDF 权重来表示。这种方法简化了特
征提取过程。随着深度学习技术的兴起,尤其是卷积神经网络和循环神经网络
的应用,文本分类目前已取得了显著的进展。神经网络模型可以自动学习文本
的高级特征表示,而不需要手动进行特征工程。此外,预训练模型(如 BERT
和 GPT)的引入进一步提高了文本分类的性能,使得模型可以理解更复杂的
语义和上下文信息。
具体来讲,经典的文本分类方法主要是基于特征工程和浅层学习。在不考
虑训练集的情况下,一个文本分类系统可以被拆分为特征工程和分类器两个
主要部分。系统流程如图所示。文本需要转化为计算机可处理的数据结构,
这要求将文本切分成构成文本的语义单元。例如,在中文文本处理中,首要任
务是分词,这一步需要用到之前提到的自动分词技术。通常情况下,文本中蕴
含大量词汇,构成庞大的词汇向量,可能会给计算机带来巨大的计算负担。因
此,需要进行特征选择以减小问题规模。特征选择的核心目标是独立地评估原
13文本分类也可表示为一个二分类模型,其输入为文本数据和预定义类别,输出为 true 或 false。(Sebas-
tiani,2002)
自然语言处理传统研究内容 33
始特征项(词汇)并按评分对其进行排序,然后选取最高得分的一些特征项,
筛除其余的特征项。常见的评价指标包括文档频率(Document Frequency)、
互信息(Mutual Information)、信息增益、统计量等。文本表示的任务是将
这些非结构化信息转化为计算机可以理解的结构化信息。文本表示方法多种多
样,传统方法通常采用 BoW或向量空间模型 (Vector Space Model, VSM)等。
BoW 不考虑单词的顺序和位置,将训练集中的文本表示为一个包含词汇表中
所有词语的向量,每个维度表示对应词语在文本中是否出现或出现的次数。在
获得文本表示之后,可以使用机器学习算法或深度学习神经网络等方法,训练
分类模型,将特征向量映射到类别标签。
文本预处理 特征提取 文本表示 分类器
特征工程
文本 类别
图 : 文本分类系统流程示意图
情感分析(Sentiment Analysis)是一种常见的文本分类任务,即分析文
本表达的情感倾向,是积极还是消极的态度。例如,影评和书评反映了发布者
对相关电影、书籍的情感态度,这些评论中“引人入胜”、“环环相扣”、“逻辑
性强”、“无聊”等词语在情感分析中有很强的指向性。情感分析系统将自动识
别文本中的情感或情感极性,通常分为正面、负面和中性。相比于其他文本分
类任务,情感分析在创建训练数据集时,需要确保情感标签的定义清晰明了,
标签应该准确反映文本的情感极性,如正面、负面或中性。除了情感极性分类
外,情感分析还可以进行情感强度判断和主观性分析。例如,该情感是轻微的
满意还是极度的愤怒,是否包含主观情感等。情感分类任务在商业和社交领域
中应用广泛。企业可以利用情感分类来分析产品评论,了解用户对其产品的感
受,改进产品设计和市场策略。社交媒体平台可以使用情感分类来监测用户在
平台上发布的帖子和评论的情感倾向,以提供更个性化的用户体验。此外,情
感分类还可用于市场调研、广告定位、舆情分析等领域,为决策制定提供重要
的数据支持。
除了情感分析外,文本分类任务还包括垃圾邮件过滤、新闻分类、法律文
书归档、医学文献识别以及在线广告定位等。这些文本分类任务不仅提供了在
不同领域中更多的应用机会,还推动了各个领域的智能化和创新。它们为决策
制定提供了重要的数据支持,使人们能够更好地理解和利用大量文本数据。在
34 第一章 绪论
信息时代,文本分类成为了促进各个行业发展的关键工具之一。
3. 信息抽取与自动文摘
信息抽取 (Information Extraction, IE)是一种从文本中自动化地提取结构
化信息的过程。它的目标是从非结构化或半结构化的文本数据中抽取出特定的
实体、关系和事件等重要信息,并将其转化为结构化的形式(如数据库),以便
进一步的分析和应用。例如,从一篇志愿者面试通知中提取活动地点、时间、
适合人群、活动任务等关键信息。信息抽取主要包括以下几个任务:
• 命名实体识别 (Named Entity Recognition, NER):识别文本中的命名实
体,如人名、地名、组织机构名等,这一部分在中间任务中做过介绍。
• 关系抽取(Relation Extraction):当检测出文本中的命名实体后,需要
识别文本中实体之间的关系或关联,例如人与公司的雇佣关系、物品与
属性之间的关系等,这些关系通常由各类语料库进行定义。关系抽取的
五个主要算法类别包括手工模式、有监督机器学习、半监督(通过自举
或远程监督(Distant Supervision))和无监督。当有标注好的训练数据
可用时,可以使用监督学习方法对测试集中关系和实体进行标注;当只
有少量种子元组或种子模式可用时,可以使用弱监督的自举方法;当有
关系数据库可用时可以使用远程监督方法,还可以使用无监督或开放式
信息抽取方法。
• 事件抽取(Event Extraction):在英语中,大多数事件提及对应于动词,
即事件大多由动词引入。根据不同的任务和目标,还需要提取事件的触
发词、参与者、时间等信息。事件抽取通常通过监督学习进行建模,通过
IOB 序列模型检测事件,并使用多类分类器来分配事件类别和属性。
信息抽取在许多领域具有广泛的应用,如文本挖掘、知识图谱构建、智能
搜索和问答系统等。它可以帮助人们从大量的文本数据中获取有价值的信息,
并支持自动化的决策和分析过程。
自动文摘(Summarization)是自然语言处理领域中的一个重要研究方向,
其核心目标是通过算法和技术,从大量文本中提取关键信息和主要观点,生成
简洁、凝练且信息丰富的摘要。这样可以帮助用户在短时间内获取文本的核心
内容,大大提高了信息检索和获取的效率。
自动文摘系统流程如图所示,通常可以分为以下步骤:
自然语言处理传统研究内容 35
文本分析 句子或段落提取与泛化 文摘生成
文本输入 文摘输出
图 : 自动文摘系统流程示意图
• 文本分析:这是自动文摘的第一步,涉及对原始文本进行分析和理解。这
包括文本的分词、词性标注、命名实体识别等自然语言处理任务。文本
分析有助于识别冗余信息,建立对文本内容的理解和语义理解。
• 句子或段落提取与泛化:在这个阶段,从原始文本中选择出具有代表性
的句子、段落或信息块。这通常涉及到句子或段落的重要性评估,以确
定哪些部分应该包含在文摘中。同时,泛化是指将具体的信息转化为更
一般性和概括性的表达方式,以便生成更具概括性的文本摘要。
• 文摘生成:在这个阶段,选定的文本内容需要被转换为文摘的形式。对于
提取式文摘(Extractive Summarization),选定的句子或段落通常会被
直接包含在文摘中。对于生成式文摘(Generative Summarization),需
要使用自然语言生成技术将选定的信息重新表述为摘要文本。
整个自动文摘过程需要复杂的自然语言处理和机器学习技术,以确保生成
的文本摘要既准确反映原始文本的核心信息,又具有概括性和可读性。这个过
程中的每个阶段都需要仔细的设计和优化,以满足不同应用场景的需求。
自动文摘技术在多领域中具有广泛的应用。它可以生成新闻摘要,使读者
能够迅速了解新闻要点,也用于生成学术论文摘要,帮助研究人员快速筛选相
关文献。搜索引擎结果中的文本摘要提高了搜索效率,而社交媒体和内容生成
平台使用它来呈现用户生成的内容的概要。在法律领域,自动文摘有助于从法
律文书中提取关键信息,医学领域则用于生成医学文献的摘要。市场研究、舆
情分析和智能助手也借助自动文摘技术获得重要信息。这些应用示例突显了自
动文摘在信息处理和决策制定中的重要性,提高了效率和便捷性,帮助人们更
快速地获取关键信息。
4. 信息检索与问答系统
信息检索 (Information Retrieval, IR)是一门致力于从庞大的文本集合中
高效检索与用户查询相关信息的学科。其核心是通过用户输入的关键词或短语
36 第一章 绪论
来满足实时检索需求,系统则从文档集合中返回与查询最相关的文档集合。这
些文档可以是各种文本单位,如网页、科学论文、新闻文章或更短的文本片段。
一般情况下,信息检索任务是指临时检索。用户提交查询给检索系统,然
后该系统以有序方式返回与查询相关的文档集。当用户输入一个查询时,检
索系统会对查询进行处理,包括分词、去除停用词(Stop Words)和词干化
(Stemming)等操作,以确保查询与索引中的文本匹配。为了实现高效的信息
检索,系统会首先创建一个索引。索引是一个结构化的数据结构,其中包含了
文档集合中的关键词、词汇表、文档位置等信息,以加速检索过程。然后,检
索系统使用特定的算法和策略来对文档进行排名,以根据与查询的匹配程度进
行排序。在检索结果中,文档通常按照与查询的相关性进行排名,比如可以基
于查询中的关键词在文档中的出现频率、位置以及其他因素。
IR 在多个领域扮演着关键角色,包括搜索、推荐和信息组织。其应用广
泛,例如:
• 搜索引擎:这是信息检索最普遍的应用形式,通过输入关键词,能够在各
类资源中找到相关内容。常见的搜索引擎有 Google、Baidu 和 Bing 等。
• 学术文献检索:帮助研究者在大量学术资源中找到特定论文或相关文献,
例如 Google Scholar、IEEE Xplore 和 PubMed。
• 智能问答系统:利用大量的网络文本数据和知识库来快速提供准确答案。
问答系统 (Question Answering, QA)是一种能够自动回答用户以自然语
言提出的问题的人工智能应用。问答系统通过将问题与预先构建的知识库或语
料库进行匹配和分析,从中提取答案,并以自然语言的形式返回给用户。相比
信息检索,问答系统可以直接返回用户询问的答案,免去用户人工定位信息。
在整个问答过程中,系统必须能够准确理解用户提出的自然语言问题,并且生
成准确、易于理解和阅读的自然语言答案。因此,问答系统不仅包含信息检索
技术,还需要自然语言处理技术,包括分词、词性标注、句法分析和语义分析
等。
目前,问答系统可以主要以事实型问答为主。事实型问答(Factoid Ques-
tion Answering)是一种可以通过简短文本回答有关特定事实、属性或关系问
题的问答任务。常见的应用包括在线客服和智能助手,它们可以提供即时的信
息和答案。下面介绍两种主要的事实型问答方法,分别是基于信息检索的问答
系统和基于生成的问答系统。
第一种是基于信息检索的问答系统,其核心思想是通过从网络或其他大型
文档集合中找到短文本片段来回答用户的问题。这种系统通常采用“检索和阅
自然语言处理传统研究内容 37
读”模型,首先通过搜索引擎从文本集合中检索相关段落,然后使用神经阅读
理解算法遍历每个段落,找到可能的答案片段,并返回一个答案。
另外一种是基于生成的问答系统,与基于检索的问答系统不同,生成型问
答系统不仅从已知信息中检索答案,还能根据问题的语义和上下文生成全新的
答案。基于生成的问答系统通常需要深度理解问题和文本生成能力。当系统检
索到相关信息,需要使用自然语言生成技术生成自然语言答案。答案生成可以
是基于模板填充,也可以是基于生成式模型,如循环神经网络。此外,系统还
需要对生成的答案进行排版和格式化,以确保答案易于理解和阅读。
为了评估事实型问答系统的性能,通常使用平均倒数排名(mean recipro-
cal rank, MRR)作为评价指标。MRR 是一个用于衡量系统在回答一系列问
题时的首次正确答案的平均排名的指标。它是一个适用于能为每个测试问题返
回一个已排名的答案列表的系统的指标。MRR 的计算公式如下:
MRR =
1
Q
Q∑
i=1
1
ranki
()
其中,Q 是测试集中问题的总数,ranki 是第 i 个问题的正确答案的排名。在
实际操作中,对于每一个测试问题,系统会返回一个答案列表,其中包含了多
个可能的答案,按照其相关性或准确性进行排名。然后,找到第一个正确答案
在列表中的排名,其倒数即为该问题的得分。例如,如果系统对一个问题返回
了五个答案,但前三个答案是错误的(因此最高排名的正确答案排名第四),那
么该问题的得分为 1/4。最后,为了得到整个系统的 MRR 得分,计算所有测
试问题得分的平均值。这样,MRR 得分能够综合反映系统在回答一系列问题
时的首次正确答案的平均排名。下面给出一个具体示例进行详细介绍。
例题 . 假设有一个事实型问答系统,用它来回答一个测试集,该测试集包
含 3 个问题。以下是系统为每个问题返回的答案列表,以及每个答案的正确
性:
• 问题 1:“首都是北京的国家是哪个?”
1. 中国 (正确)
2. 美国
3. 泰国
• 问题 2:“谁是‘理论物理学的奠基人’?”
1. 牛顿
38 第一章 绪论
2. 爱因斯坦 (正确)
3. 波义耳
• 问题 3:“哪种动物是‘澳大利亚特有的袋类动物’?”
1. 袋鼠 (正确)
2. 大熊猫
3. 长颈鹿
根据 MRR 的计算公式,首先找到每个问题的第一个正确答案的排名,并计算
其倒数。因此有:
• 问题 1 的得分: 1
1
= (因为第一个答案就是正确的)
• 问题 2 的得分: 1
2
= (因为正确答案是第二个)
• 问题 3 的得分: 1
1
= (因为第一个答案就是正确的)
然后,计算这些得分的平均值来得到 MRR 得分:
MRR =
1
3
( + + ) ≈
因此,该事实型问答系统的 MRR 得分是 。
5. 对话系统
对大多数人来说,对话是最常用的语言形式。日常生活中,无论是医生向
病人询问病情还是员工参加公司会议,亦或是向老师请教问题,都需要通过对
话来与对方传递信息、达成共识。对话系统(Dialogue Systems)是一种人机
交互的技术,旨在模拟人类的对话行为并与用户进行自然语言交流。它可以用
于各种场景,包括智能助理、客服机器人、语音助手等。聊天机器人 (chatbot)
是一种最常见的对话系统,它可以模仿人际会话模式,进行扩展对话。图是
一段聊天机器人对话示意图。可以看到,对话是双向的,用户可以提出问题、
表达需求,而系统则回应并提供信息或执行任务。在对话过程中,系统需要理
解和记住对话中的上下文信息,以便更好地回应用户的问题。
对话系统的目标是理解用户的意图并以自然、连贯的方式进行回应。对话
系统可以分为两类:闲聊型对话系统和任务型对话系统。闲聊型对话系统旨在
模拟与人类进行自由对话的能力,它更注重处理开放式的、非任务导向的对
话。它通过与用户进行日常性的对话来提供娱乐、聊天等服务,系统更注重对
自然语言处理传统研究内容 39
话的流畅性和类人化程度。比如苹果公司的 Siri、微软的小冰系统都是常见的
闲聊型对话系统。其架构可分为两类:基于规则的系统和基于语料库的系统。
基于规则的系统使用规则将用户的句子映射到系统的回应,包括早期有影响
力的 ELIZA 和 PARRY 系统。基于语料库的系统利用大规模的人际对话数据
集,可以通过使用信息检索从先前对话中复制人类回复,或者使用编码器-解
码器系统从用户话语生成回复。任务型对话系统旨在解决特定任务或目标,如
预订机票、订购商品、查询天气等。用户通过提出明确的问题或指令来与系统
进行交互,系统则通过理解用户意图并执行相应的任务来提供答案或完成用户
的请求。任务型对话系统通常需要结合领域知识和特定的任务流程进行设计和
实现,更专注于完成特定任务的准确性和效率。比如,用户通过餐厅预订系统
进行对话,提供日期、时间和人数等信息,系统会为用户预订餐桌并发送确认。
自助银行服务可以帮助用户查询帐户余额、进行转账或报告丢失的信用卡等。
嘿,你好,我想订一张明天飞往上海的机票。
好的,已为您找到9月15日成都到上海的航班。
有上午九点的吗?
航班号MU5406,明天早上九点起飞。
什么时候到上海?
那帮我订这个航班。
抵达上海的时间是十一点45分
好的,已为您打开XX软件进行预定,请您稍后
图 : 聊天机器人对话示意图
建立对话系统的关键技术仍然是 NLP 技术,包括文本分词、词性标注、
语法分析、命名实体识别、情感分析等。但是,相比其他的自然语言处理任务,
对话系统还需要对话管理。对话管理技术负责确定系统如何响应用户输入以及
如何维护对话的上下文和流程,包括对话状态跟踪、对话策略、多轮对话管理
等。对话管理需要感知上下文信息,包括之前的对话历史、提到的实体和相关
话题,还需要能够处理用户的误解、重复问题或模糊的输入,并提供清晰的回
应。此外,在一次对话中,用户可能会多次切换话题或中断话题,系统需要适
应这些变化并保持对话的连贯性。对于语音交互的对话系统,还需要引入语音
40 第一章 绪论
识别技术,将用户的口头输入转化为文本。
目前,对话系统在各个领域都有广泛的应用。它们用于提供虚拟助手、在
线客户支持、智能家居控制、医疗诊断、教育辅助、社交媒体互动和娱乐,使
用户能够通过自然语言与计算机进行交互,获取信息、执行任务和获得个性化
建议。这些系统的不断发展和改进推动了人工智能和自然语言处理技术的进
步,为人们带来更便捷、智能的交流方式。
自然语言处理与大模型发展现状
上一节简要介绍了传统自然语言处理的研究内容,传统方法主要是针对单
个任务独立开展研究。然而,大模型技术主要是采取多任务同时学习的方式。
因此,本书后续章节不会再对自然语言处理传统研究分任务来展开描述。下面
分别从研究层面、技术层面和发展角度阐释自然语言处理和大模型发展现状。
从研究层面来看,随着大语言模型技术的迅速发展,自然语言处理研究领
域经历了深刻的变革。大模型已经内建了传统自然语言处理任务(如分词、词
性标注、句法分析等)所需的语言处理能力。因此,在当前大模型驱动的自然
语言处理时代,针对这些传统任务进行专门研究的必要性显著降低。大模型技
术将各类任务统一转化为序列到序列的生成问题,不仅能够高效解决现有任
务,还能有效处理未曾面对的新任务,从而可能对那些过去专注于特定任务研
究的学者形成竞争压力。随着计算硬件和算法的进步,大模型的规模不断扩
大,从最初的几亿参数到现在的数十亿、百亿甚至数千亿参数。优化的训练算
法和硬件基础设施的改进使得大模型在训练和推理时的效能大幅提升,能够处
理更大规模的数据和更复杂的任务。相较于学术界研究,工业界拥有丰富的计
算资源、用户数据和反馈信息,使其具备更强的创新优势。这种“AI 马太效
应”可能导致少数头部组织垄断创新成果,进一步加剧了自然语言处理学术界
研究面临的挑战。
从技术层面来看,大模型技术不仅局限于文本,还开始探索将视觉、语音
等多模态数据整合到统一的模型框架中,例如通过 Vision Transformers(ViTs)
和 Audio Transformers(AuTs)等技术。这种跨模态能力使得大模型可以在更广
泛的应用场景中发挥作用,如多模态情感分析、图像描述生成等。2023年,生成
模型在多模态领域取得了重要进展。2023年底,Midjourney v6和 ChatGLM3
相继发布。Midjourney v6在图像生成方面达到了新的高度,而 ChatGLM3则
在对话生成和语言理解方面表现出色。2024 年 2 月 15 日,OpenAI 正式发布
文生视频模型 Sora,并发布了 48 个文生视频案例和技术报告,正式入局视频
本书内容安排 41
生成领域。Sora 能够根据提示词生成 60s 的连贯视频,“碾压”了行业目前大
概只有平均“4s”的视频生成长度。AudioLDM 和 MusicLM 是生成音频和音
乐的代表模型,展示了人工智能技术在音频生成方面的潜力。这些模型能够生
成高质量的音频内容,广泛应用于音乐创作、音效设计等领域。2024 年 3 月
24 日,AI 初创公司发布 Suno V3 音乐生成模型,惊艳了全世界。
从发展角度来看,目前大模型的研究也面临诸多挑战和机会。训练和推理
大模型需要大量的计算资源和能源,如何在保证效能的同时降低能源消耗是一
个重要挑战。大模型的黑箱特性限制了其在某些应用中的可解释性,如何提升
模型解释性仍然是一个研究热点。如何在使用大模型处理个性化数据时确保用
户隐私的同时,保持模型的有效性和公平性也是一个需要解决的问题。
总体而言,大模型技术在自然语言处理领域展现出了巨大的潜力和应用前
景,但也面临着多方面的技术挑战和伦理考量,未来需要学术界、工业界及社
会共同努力,以实现其在人工智能发展中的持续推动和良好应用。
本书内容安排
本书首先将引导读者从理解 NLP 是什么开始,然后介绍了 NLP 中语言
模型的基础知识,随后本书对大语言模型架构、多模态大模型架构以及大模型
预训练和微调等技术进行讲解。最后,介绍了大模型实战开发知识。具体来讲,
本教材包括十五章,分为三大部分,详细如下:
第一部分介绍语言模型基础知识,包括第二章至第五章。第二章,词向
量,主要介绍词向量的基本概念,以及几个典型的学习词向量的模型,如
Word2vec、Glove、Elmo等。第三章,统计语言模型,介绍 N-gram模型和平滑
技术的基本知识。第四章,神经语言模型,介绍循环神经网络模型,以及基于
循环神经网络的语言模型基本知识。第五章,预训练语言模型,介绍 Seq2Seq
模型、注意力机制、Transformer 模型以及预训练语言模型的基本知识。
第二部分介绍大语言模型关键技术,包括第六章至第十三章。第六章,大
语言模型架构,详细讲解了基于 Transformer 的模型架构、非 Transformer 架
构、大模型架构配置等知识。第七章,多模态大模型架构,介绍了 ViT 图像
编码模型,以及 CLIP、BLIP 和 BLIP2 等典型的多模态模型架构。第八章,
大模型预训练,详细探讨了大模型的训练数据工程,包括数据源的选择、数据
处理方法和预训练数据对大模型的影响。本章还深入讨论了大模型的预训练方
法,如预训练任务的选择、优化参数设置和可扩展训练技术等,并对相关问题
进行了讨论。第九章,大模型微调,详细介绍了大模型微调的概念和方法,包
42 第一章 绪论
括指令微调、对齐微调微调算法等。第十章,提示工程,深入探讨了提示工程
的基础和进阶技术,包括情景学习、思维链和提示工程安全。第十一章,涌现,
详细阐述了涌现现象的概念定义、大模型中涌现、缩放法则以及大模型的可解
释性。第十二章,大模型评估,系统介绍了大模型评估的方式、任务和指标,
包括评估的基本要求、人工评估、自动评估、准确性、安全性、鲁棒性、高效
性等。本章还深入讨论了垂直领域下大模型评估的专用方法和通用大模型的专
家能力。第十三章,探讨,简要介绍了基于大模型的智能体和具身智能,全面
分析了大模型在不同垂直领域的应用等。本章还探讨了大模型的挑战与局限,
以及人工智能的伦理和社会影响,大模型的隐私与安全问题等,并对未来进行
了展望。
第三部分介绍大模型实战知识,包括第十四章和第十五章。第十四章,大
模型本地开发,详细介绍了 Transformers 编程基础,以及微调大模型。第十
五章,基于大模型的应用开发,介绍了多个平台上的大模型应用开发流程和技
术细节,包括 OpenAI、通义千问和 LangChain 等。
附录A介绍自然语言处理中用到的一些概率论、信息论、机器学习以及强
化学习等基础知识,如果读者已经熟悉该部分内容,可忽略。
这本教材将为学生和专业人士提供全面的 NLP 教育资源,全书不仅介绍
了基础理论,还提供了实际应用的深入见解,涵盖了自然语言处理和大语言模
型的关键技术和最新进展,为读者提供了理论基础和实践指导,有助于培养具
备前沿技术能力的专业人才。鉴于本书内容的丰富性,如果本科生或研究生在
课时较少时,可以对内容进行适当取舍,选择性地跳过某些章节,专注于核心
概念和技术。例如,第一部分的基础知识对于入门学习至关重要,而第二部分
和第三部分的内容可以根据课程需要进行选择和调整。对于偏工程的读者,建
议重点关注大模型的架构、训练、部署及实际应用的章节。
讨论
讨论 . 请讨论自然语言处理与人工智能的关系。
讨论 . 请讨论自然语言处理课程的学习方法。
习题
习题 . 请阐述自然语言处理的发展历史与研究现状。
习题 . 请阐述传统自然语言处理技术的知识体系及应用。
习题 43
习题 . 现已知词典最长词语的长度为 7,请用正向最大匹配算法模拟对句
子“熊猫基地位于四川省成都市”的自动分词过程。
习题 . 请按照 BIO 标记的规则对句子“Apple Inc. was founded by Steve
Jobs, Steve Wozniak, and Ronald Wayne on April 1, 1976”进行命名实体标
记。
习题 . 在词性标注一节,介绍了哪两种用于词性标注的序列模型?
习题 . 请按照句法分析小结介绍的产生式规则,为句子“The cat chased
the mouse”画一颗句法解析树。
习题 . 基于句法分析,请为句子“Tom gave Mary a book as a birthday
present”的语义角色进行标注。
习题 . 请阐述语篇的局部连贯性表现在哪三个方面,并简单介绍每个方面
的内容。
习题 . 请介绍机器翻译的方法,并机器翻译评估主要衡量哪两方面的性能。
习题 . 请阐述对话系统的分类,并介绍任务型对话的两个架构。
44 第一章 绪论
第一部分
语言模型基础
45
第二章 词向量
概述
在自然语言处理中,如何正确理解并表示人类语言是核心问题。虽然人类
能够通过文字直接进行交流,但计算机只能处理数字形式的信息(如 0 和 1)。
因此,为了使计算机能够解析和处理人类语言,必须将语言(如文本和声音)
转化为数字形式。这种转化过程允许将单个词汇与数字相对应,进而将文本段
落转化为向量形式。在此背景下,文本表示成为了自然语言处理的关键任务
之一,其主要目标是将文本元素(如词、句子或段落)转化为数值数据,通常
是向量形式。其中,单个词汇的向量化表示尤为重要,这些表示被称为词向量
(Word Vector)、词嵌入(Word Embedding)或词表示(Word Representation)。
本书将统一采用词向量这一术语。词向量 [2]为词汇提供了数学化的表示,使计
算机能够更加有效地解析和处理自然语言。
本章首先介绍独热表示 (One-Hot Representation)1等传统的文本表示方
法,然后进一步介绍 Word2Vec 等经典的分布式表示 (Distributed Represen-
tation)方法。
文本表示方法
文本数据是信息时代最直观、最丰富的信息载体之一,其有效表示和处理
对自然语言处理任务至关重要。文本表示的核心在于将文本数据转换为计算机
能够理解和处理的形式。这个过程中涉及多种表示方法,其中独热表示和分布
式表示是两个具有代表性的类别。
1在一些学术论文中,独热表示也被称为 1-of-N 编码。
47
48 第二章 词向量
独热表示
独热表示是一种将词汇映射为向量的策略。在这种表示法中,每个词汇都
被转换为一个唯一的向量,其维度与词汇表的大小相匹配。在该向量中,仅有
一个元素的值为 1,其余的元素均为 0。考虑表中的词汇表,词汇的独热向
量表示如下:
“牛奶” → [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ]
“奶油” → [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 ]
在此表示法中,向量中数值 “1” 的位置是根据词汇在词汇表中的索引确
定的。例如,“牛奶” 的索引为 3,因此其独热向量的第 4 个位置为 1,其余数
字为 0;而 “奶油” 的索引为 8,因此其独热向量的第 9 个位置为 1,其余数字
为 0。独热向量为每个词汇提供了一个唯一的向量表示,其中仅有一个元素为
1,而其位置对应于该词汇在词汇表中的索引,其余元素均为 0。
表 : 示例词汇表
索引 0 1 2 3 4 5 6 7 8 9
词汇 苹果 香蕉 橙子 牛奶 咖啡 茶 糖 面包 奶油 水
然而,独热表示方法存在两个主要的问题:表示向量存在维数灾难,并且
独热表示无法度量不同词之间的语义相关性。
维数灾难是指随着特征空间的维度增加,数据的分布变得更加稀疏,需要
更长维度的向量来表达词汇,当维度过度增加时,将导致计算困难。此外,高
维数据还可能导致模型过拟合,因为模型可能会在高维空间中找到并依赖于数
据中的噪声或偶然性。由于独热向量中只有一个元素是 1,其余都是 0,因此
独热表示高度稀疏。随着词汇表的增大,独热表示的向量维度会急剧增加,导
致计算效率低下且难以处理。
另一方面,通过独热向量无法表征到词汇之间的语义相似性或相关性。考
虑词汇 “猫” 和 “狗”,假设在 10000 维的独热表示中,“猫” 被表示为 [1, 0, 0,
..., 0],而 “狗” 被表示为 [0, 1, 0, ..., 0]。这两个向量之间的欧几里得距离是由
两个元素的差异决定的:第一个位置上 “猫” 的 1 和 “狗” 的 0,以及第二个位
置上 “猫” 的 0 和 “狗” 的 1。计算得到这两个向量之间的欧几里距离为
√
2。
在独热表示中,不同词汇的向量之间存在固定的距离。无论比较哪两个不同的
词汇,它们在独热表示中的向量之间的距离都是
√
2。因此,所有不同词汇之
文本表示方法 49
间的距离都是相等的。例如,在独热表示中,“猫” 和 “狗” 之间的距离与 “猫”
和 “汽车” 之间的距离是完全相等的。这也是为什么独热表示无法反映词汇之
间语义相似度的原因。
分布式表示
针对独热表示中存在的问题,后续研究通过引入深度学习技术,采用分布
式表示的形式表示词语。分布式表示是由 Hinton 等多位计算机科学家和神经
网络研究者在 20 世纪 80 年代独立提出的 [3]。与独热表示相比,分布式表示
的主要优势在于其能够有效地捕捉词汇之间的语义和上下文关系,使得语义上
相似的词在向量空间中位置接近。
分布式表示的核心思想是通过训练将语言中的每个词汇映射到一个固定
长度的实数向量上。向量的长度通常远小于独热向量的长度。这些向量共同构
成了一个词向量的语义空间,其中每个向量可以被视为该空间中的一个点。在
此空间中,可以通过计算向量之间的距离来衡量词汇之间的语义相似性。通过
以下词的词向量例子来进行说明:
“猫” : [, ,−]
“狗” : [, ,−]
“鸟” : [−, ,−]
“汽车” : [,−, ]
“飞机” : [,−, ]
在此表示中,每个词汇都被映射为一个 3 维的实数向量。通过这种分布
式表示,可以使用各种距离度量方法(如欧氏距离或余弦相似度),来比较和
分析词汇之间的关系。例如,计算可得,“猫” 和 “狗” 两个词的欧式距离约为
,“猫” 和 “鸟” 两个词的欧式距离为 ,“猫” 和 “汽车” 两个词的欧式
距离为 ,“汽车” 和 “飞机” 两个词的欧式距离为 。这些计算结果表
明,在给定的词向量空间中,“猫” 与 “狗” 最为相似,而与 “鸟” 和 “汽车” 的
差异较大。同时,“汽车” 与 “飞机” 在语义上也相对接近。
分布式表示克服了独热表示的维度灾难问题,通过低维、稠密的向量来高
效表示词汇,不仅提高了计算效率和存储效率,还有效捕捉了词汇之间的语义
关系和上下文信息。目前,分布式表示广泛应用于各种自然语言处理任务中,
如文本分类、情感分析、机器翻译等。通过预训练的词向量模型(如Word2Vec、
GloVe 等),可以方便地获取高质量的词汇表示,为自然语言处理任务的实现
提供有力支持。
50 第二章 词向量
Word2Vec 模型
Word2Vec 模型是 2013 年由 Tomas Mikolov 等人提出的轻量级神经网络
架构,用于生成词语的分布式表示 [4]。该模型主要包括输入层、投影层和输出
层等三个组件。根据模型的输入-输出关系,Word2Vec 模型主要有连续词袋
(Continuous Bag-of-Words, CBOW)模型和 Skip-gram 模型等两个变种。
CBOW模型的目标是根据给定词(wt)的上下文(wt−2, wt−1, wt+1, wt+2)
来预测该词(wt)本身。换句话说,CBOW尝试在给定上下文条件下,最大化
目标词出现的条件概率。与之相反,Skip-gram 模型则是在给定一个词(wt)
的情况下,预测该词的上下文(wt−2, wt−1, wt+1, wt+2)。具体来说,Skip-gram
模型是在给定目标词条件下,最大化其上下文词出现的条件概率。CBOW和
Skip-gram 模型的原理概览如图所示。
sum wt wt
CBOW Skip-gram
输入
投影 输出 输入 投影
输出
wt-2
wt-1
wt+1
wt+2 wt+2
wt+1
wt-1
wt-2
图 : CBOW 和 Skip-gram 模型的原理概览图
CBOW 模型
1. 简化版 CBOW 模型
为了深入理解模型的内部机制,首先从简化版 CBOW 模型开始探讨。简
化版 CBOW 模型仅根据一个输入词 wi 来预测一个输出词 wi+1。传统的前馈
神经网络语言模型(参见第四章)由输入层、投影层、隐藏层和投影层构成,而
CBOW模型移除了隐藏层2,降低了模型的计算复杂度,其模型架构如图所
示。
• 输入层:输入 X 是单词的独热表示。在一个词汇表 V 中,此表大小为
2需要说明的是,广义上投影层也能被称为隐藏层。
WORD2VEC 模型 51
|V|,每个词 Vi 都有一个唯一的编号 i ∈ {1, ..., |V|}。词 Vi 的独热表示是
一个维度为 |V| 的向量,其中只有第 i 个元素是 1,其余全为 0。
• 输入层到投影层:输入层和投影层之间有一个词向量矩阵W ∈ Rd×|V|(即
词向量矩阵),其中 d表示投影后的维度(即词向量维度,一般 d≪ |V|)。
因为 X 是一个独热编码,所以 h = W×X 实际上就是从词向量矩阵 W
中选择一个列向量。例如,如果输入的向量 X 是 [0, 0, 1, 0, 0, 0]⊤,那么
h 实际上就是选择矩阵 W 的第 3 列 [2, 1, 3]⊤ 作为投影层的输出。
• 投影层到输出层:投影层和输出层之间也有一个的权重矩阵W′ ∈ Rd×|V|。
输出层向量 z = hW′,每个元素是隐藏层向量和权重矩阵 W′ 的列向量
之间的点积。例如,输出层的第一个值 7 是由投影层向量 [2, 1, 3] 和 W′
的第一列 [1, 2, 1]⊤ 点积得到的。
• Softmax 激活函数:模型的最终输出会经过 softmax 函数处理,即 ŷ =
softmax(z)。该函数将输出向量的每个元素归一化为一个介于 0 和 1 之
间的概率值,即 wi+1 的条件概率分布,其中概率最大的元素对应的词被
视为模型的预测输出。
输入层
投影层
输出层
0 0 1 0 0 0
2 1 3
2
1
3
1
2
1
7
独热编码向量
权重矩阵
词向量矩阵
图 : 简化版 CBOW 模型图
因此,CBOW 模型的训练目标是使预测向量 ŷ 与真实向量(采用独热编
码)y 最为接近,从而优化词向量矩阵 W 和权重矩阵 W′。对于每个输入词,
其训练的计算复杂度为 d+ d× |V|。
52 第二章 词向量
2. CBOW 模型(多词上下文模型)
CBOW模型根据上下文 Context(wt) = {wt−m, . . . , wt−1, wt+1, . . . , wt+m}
中 2m 个词,预测中心词 wt,并在输出层使用了层次 Softmax (Hierarchical
Softmax)技术。其关键结构包括:
• 输入层:这一层以 wt 为中心词的上下文 Context(wt) 作为输入,每个
词都是通过独热编码向量 X(k) 来表示,其中 k ∈ {t −m, . . . , t − 1, t +
1, . . . , t+m}。
• 投影层:上下文中每个词 wk 都经过相同的词向量矩阵 W ∈ Rd×|V| 得到
向量 vk = WX(k),再执行词向量的累加平均操作:
v̂ =
1
2m
∑
k∈{t−m,...,t−1,t+1,...,t+m}
vk ()
• 输出层:该层经过权重矩阵 W′ ∈ Rd×|V| 得到输出概率向量:
ŷ = softmax(v̂⊤W′) ()
其中,中心词 wt 计算得到的条件概率为 ŷt = P (wt|Context(wt))。
从公式()可以看出,Softmax每次需要计算 V 中所有词的输出值,才可
以得到当前节点的输出,当 V 很大的时候,O(|V|) 的计算代价会非常高。因
此,在训练Word2Vec 模型的时候,一个常用的训练技巧是通过构建哈夫曼树
(Huffman Tree)3进行层级 Softmax,从而将复杂度从 O(|V|)降低到 O(log |V|)。
在哈夫曼树中,每个叶子节点对应一个词,非叶子节点则用于计算路径概率。
最终,该模型的训练计算复杂度为 2m× d+ d× log |V|。
接下来重点介绍层次 Softmax 的原理以及优化方法。
(1)层次 Softmax
传统的 Softmax 在计算概率时需要矩阵 W ′,即考虑整个词表 V,而层次
Softmax的则不再需要矩阵 W ′。下面以哈夫曼树对层次 Softmax展开说明,为
了方便介绍,假设例子中的词频相同。
如图所示,层次 Softmax 通过将所有词汇构建成一棵二叉树,词表中
的单词位于叶子结点,树中的每个内部节点表示一个二分类决策(即左子树或
右子树)。P (wt|Context(wt))的计算过程可以看成是从根结点到目标叶结点的
决策过程。比如,为了符号简洁,把 Context(学习) 记为 C,词“学习”的路
径为“根(n0)→ 左(n1)→ 右(n2)→ 左(学习)”,则它的条件概率就是
3哈夫曼树是一种基于词频的编码树,频率高的词对应较短的路径,频率低的词对应较长的路径。
WORD2VEC 模型 53
我 喜欢 学习 自然 语言 处理 和 大模型
图 : 层次 Softmax 模型示意图
P (学习|C) = Pn0(左|C)Pn1(右|C)Pn2(左|C)
其中,Pn(左|C) 表示在非叶子结点 n 选择左子树的概率。显然,Pn(右|C) =
1− Pn(左|C)。这个过程可以视为一个逻辑回归问题,并使用 Sigmoid(·) 函数
进行建模:
Pn(左|Context(wt)) = Sigmoid
(
θ⊤n v̂
)
()
其中,每个非叶子结点 n 有一个待训练的参数 θn,它是一个维度为 d 的向量,
用于取代矩阵W′。可以发现,P (wt|Context(wt)) 仅依赖从根结点到目标词路
径中的非叶子结点。因此,对于一颗平衡二叉树,参数的总数量就是 log |V|。
(2)模型优化目标
该模型最大似然函数作为优化目标,具体可以表示为:
min J = −
L∑
t=1
log ŷt ()
= −
L∑
t=1
logP (wt|Context(wt)) ()
其中,L 表示训练集长度,在训练中使用梯度下降算法更新词向量矩阵 W 和
权重矩阵 W′。
Skip-gram 模型
与 CBOW 模型不同,Skip-gram 模型以单个词作为输入,以预测其上下
文环境中出现的多个词,其模型架构如图所示。Skip-gram 模型的输入层和
54 第二章 词向量
投影层与简化版 CBOW 模型完全一致,包括:
• 输入层:输入 X 是单词 wt 的独热表示。
• 投影层:这一层的输出是 vt = W×X。
• 输出层:通过 v⊤t W′ 得到 2m 个输出向量,并通过 Softmax 得到真实输
出的概率分布。在训练的时候,可以采用层次 Softmax等技术降低复杂
度,而不直接使用矩阵 W′。
输入层
投影层
输出层
...
词向量矩阵
权重矩阵
图 : Skip-gram 模型图
Skip-gram 模型的训练计算复杂度是 2m× (d+ d× log |V|),其优化目标
可以表示为:
min J = −
L∑
t=1
logP (wt−m, . . . , wt−1, wt+1, . . . , wt+m|wt) ()
其中,L 表示训练集长度。在训练过程中,一般认为在给定 wt 的情况下,2m
个输出是完全独立的。读者可以根据此假设对上式进行化简。
GloVe 模型
GloVe(Global Vectors for Word Representation)模型 [5]是斯坦福大学的
一个开源项目,于 2014 年被提出。GloVe 是一个基于全局词频统计的词向量
模型,它结合了两个模型族的特征,即全局矩阵分解(基于奇异值分解(SVD)
的潜在语义分析算法)和局部上下文窗口方法(如 Word2Vec 算法)。具体来
讲,GloVe 模型结合了 Word2vec 模型的 Skip-gram 模型优势,同时利用了全
GLOVE 模型 55
局词频统计信息,通过矩阵分解技术有效地获取单词向量表示。它可以把一个
单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特
性,比如相似性(Similarity)、类比性(Analogy)等。例如,通过向量运算
“官员 - 文人 + 武功”可以得到接近“武将”的向量表示。同时,与传统的基
于矩阵分解的向量空间模型(如潜在语义分析)相比,GloVe 避免了计算复杂
度高的奇异值分解过程,在自然语言处理任务中表现出了更为优越的性能和应
用前景。
GloVe模型的实现过程简要分为三个步骤:构建共现矩阵(Co-occurrence
Matrix)、建立词向量与共现矩阵之间的关系以及构建损失函数。
1. 构建共现矩阵
首先,构建一个共现矩阵 X。这个矩阵的元素 Xij 表示单词 i和单词 j 在
一定上下文窗口内共同出现的次数。通过这个矩阵,可以了解词汇在文本中的
共现模式。下面是一个示例。
例题 . 假设有以下文本:
“我喜欢深度学习” “我喜欢数学” “我喜欢猫咪”
对于这个文本,假设上下文窗口大小为 2,可以得到如下的共现矩阵:
表 : 单词共现矩阵示例
我 喜欢 深度 学习 数学 猫咪
我 0 3 0 0 0 0
喜欢 3 0 1 0 1 1
深度 0 1 0 1 0 0
学习 0 0 1 0 0 0
数学 0 1 0 0 0 0
猫咪 0 1 0 0 0 0
在这个矩阵 X 中,X12 = 3 表示单词 “我” 和 “喜欢” 在上下文窗口内共
同出现了 3 次。
56 第二章 词向量
2. 构建词向量与共现矩阵的关系
GloVe 模型提出词向量和共现矩阵之间的某种近似关系,公式表达如下:
w⊤i w̃j + bi + b̃j = log(Xij) ()
其中,wi 和 w̃j 分别是单词 i 和单词 j 的词向量,bi 和 b̃j 是偏置项,log(Xij)
是共现次数的对数。例如,假设当前要优化的是词对是 (“我”,“喜欢”),它们
的共现次数为 3,即 X12 = 3,那么希望学习到的词向量 w1 和 w̃2 满足:
w⊤1 w̃2 + b1 + b̃2 ≈ log(3)
3. 构建损失函数
损失函数的目标是通过最小化预测值 w⊤i w̃j + bi + b̃j 与实际值 logXij 之
间的误差来学习词向量。通过优化这个损失函数,GloVe 模型能够在低维空间
中生成词向量,这些向量保留了原始共现矩阵 X 的统计信息,捕捉了词汇之
间的语义关系。根据上面的假设,定义一个损失函数来表示词向量之间的关
系:
J =
∑
i,j
f(Xij)
(
w⊤i w̃j + bi + b̃j − log(Xij)
)2
()
其中,f(Xij)是共现次数 Xij 的权重函数,用于控制不同共现次数的影响,确
保频繁共现的单词对在训练中占较大比重,减少稀有共现对损失函数的干扰。
此外,权重函数在单词共现次数为零时权重为零,以避免对损失函数产生不必
要的影响。通过这种设计,权重函数可以提高模型的训练效果,使其更好地捕
捉语料库中的重要信息。权重函数如下:
f(x) =
(x/xmax)
α if x < xmax
1 otherwise
()
其中,xmax 在此处表示最大词频数。
ELMo 模型
ELMo 模型(Embeddings from Language Models)[6]是由 Allen Institute
for Artificial Intelligence(AI2)于 2018 年提出的一种用于自然语言处理任务
(如情感分析、问答系统、命名实体识别等)的预训练语言模型。传统的词向
量方法(如 Word2Vec 和 GloVe)为每个词生成一个固定的词向量,无论词出
ELMO 模型 57
现在什么上下文中,其表示都不变。这种静态表示无法处理一词多义的现象。
ELMo模型生成的词向量是上下文相关的,即它能够根据每个单词在不同语境
中的具体含义,动态地调整其表示。这种上下文相关的表示使得 ELMo 能够
更好地捕捉语言的复杂性和多义性。
ELMo 模型的训练分为两个主要阶段:首先,在大规模文本数据上进行无
监督预训练,同时考虑前向和后向语言模型,通过结合双向长短时记忆网络
(Bi-directional Long Short-Term Memory, BiLSTM)的神经网络结构来实现;
随后,通过特定的监督学习任务(例如情感分析、文本分类等)进行微调。在
微调过程中,将从预训练模型中提取的各层词嵌入作为新的特征输入,以便更
好地适应特定应用场景。下面分别介绍预训练和任务微调技术:
1. 预训练
在自然语言处理中,双向语言模型是一种用于建模语言序列的方法。给定
一个由 N 个单词组成的序列 (t1, t2, . . . , tN ) ,双向语言模型同时考虑了序列
的前向和后向信息。
前向语言模型的任务是计算整个序列的概率 p,通过对每个单词 tk 建模,
考虑到先前单词的历史 (t1, t2, ..., tk−1):
p(t1, t2, . . . , tN ) =
N∏
k=1
p(tk | t1, t2, . . . , tk−1) ()
后向语言模型与前向模型类似,但是在后向遍历序列时,通过考虑未来上
下文来预测先前单词:
p(t1, t2, . . . , tN ) =
N∏
k=1
p(tk | tk+1, tk+2, . . . , tN ) ()
为了综合前向和后向信息,双向语言模型结合了两者,通过联合最大化前
向和后向的对数似然来进行训练:
N∑
k=1
( log p(tk | t1, . . . , tk−1; Θx,
−→
ΘLSTM ,Θs)
+ log p(tk | tk+1, . . . , tN ; Θx,
←−
ΘLSTM ,Θs))
()
其中,Θx 是词向量参数,ΘLSTM 是 LSTM 模型的参数,Θs 则是模型最终预
测阶段 Softmax 层的参数。值得注意的是,在这个模型中,将前向和后向方向
的单词表示和 Softmax 层的参数绑定在一起,但保持每个方向的 LSTM 模型
参数独立。这种双向语言模型的设计旨在更全面地捕获语言序列中的上下文信
息,有助于提高在自然语言处理任务中的性能。
58 第二章 词向量
2. 任务微调阶段
(1)双向语言模型的表示计算
对于每个输入单词 tk,ELMo 模型利用一个包含 L 层的双向语言模型来
生成一系列表示,具体包括:单词层表示 xLMk ,即与 tk 上下文无关的表示;以
及正向表示
−→
h LMk,j 和后向表示
←−
h LMk,j ,分别对应于 BiLSTM 在第 j 层的正向
和后向隐藏层输出。对于每个单词 tk,这些表示组合成一个集合 Rk:
Rk = {xLMk ,
−→
h LMk,j ,
←−
h LMk,j }, j = 1, . . . , L
= {hLMk,j }, j = 0, . . . , L
()
其中,hLMk,0 表示第一层输入词向量。一个 L 层的双向语言模会为每个单词计
算出一组共 2L + 1 个表示。这些表示最终会通过一定的方式融合,以生成每
个词的最终表示。
(2)针对特定任务的表示生成
为了生成针对特定任务的词向量表示,可以引入特定任务的权重计算。对
于每个单词 tk,特定任务的 ELMo 表示 ELMotaskk 是通过对所有双向语言模
型层的输出进行加权求和得到的,
ELMotaskk = γ
task
L∑
j=0
staskj h
LM
k,j ()
其中,staskj 是 Softmax 归一化的权重,用于调整每个双向语言模型层的贡献。
γtask 是一个标量参数,用于缩放整个 ELMo 向量,允许任务模型调整其规模,
这有助于提高模型的鲁棒性和训练的稳定性。
讨论
讨论 . Tomas Mikolov 曾在 2016 年的一次演讲中将自然语言中的词语表
示方法分为局部表示(Local Representation)和连续表示(Continuous Rep-
resentation)。请查阅资料,讨论这两个表示方法与本章介绍的独热表示和分
布式表示方法的区别与联系。
讨论 . 研究人员提出了多种数据结构来实现层次 Softmax,请对其进行调
研和梳理,并分析相较于普通的平衡二叉树,使用哈夫曼树的优点。
习题 59
习题
习题 . 假设有一个小词汇表,包含三个单词:“apple”, “banana”, “cherry”。
如果单词 “banana” 在独热向量中的位置是索引 2,那么请写出单词 “apple”
和 “cherry” 的独热表示。
习题 . CBOW 模型的什么特征使其符合“词袋”(Bag of Words)的概念?
习题 . 考虑词表大小 |V|,每次处理 N 个单词,词向量的维度是 d,隐藏
层的大小是 H,请估算传统的前馈神经网络语言模型的训练复杂度。
习题 . 除了层次 Softmax,科研人员还提出了负采样 (Negative Sampling)的
方法来降低投影层到输出层的计算复杂度,请查阅资料并简述其主要步骤。
习题 . Word2Vec 模型使用一种基于上下文的预测方法来训练词嵌入。假
设有一个句子:“The quick brown fox jumps over the lazy dog”。如果使用
Word2Vec 的 CBOW 模型,并且目标是预测“fox”这个词,请问哪些词会作
为上下文被模型考虑?
习题 . 请对公式()进行化简。
习题 . GloVe 是一种基于单词共现统计信息的词嵌入模型,它使用共现矩
阵来学习单词的向量表示。如果单词 “dog”和 “cat”在共现矩阵中有较高的共
现计数,这意味着什么?
习题 . 描述 ELMo 模型中双向长短时记忆网络(BiLSTM)的作用及其在
生成词嵌入表示中的重要性。
习题 . 解释 ELMo 模型中任务特定权重计算的过程,并说明其在生成任务
特定表示中的作用。
习题 . FastText 是另外一种 Word2Vec 的扩展模型,请查阅资料并简述
其主要思想。
60 第二章 词向量
第三章 统计语言模型
概述
自然语言处理基于的技术最早可追溯至形式语言,其概念是由语言学家乔
姆斯基等于 1956 年提出 [7]。形式语言通过定义语法规则和符号组合方式来形
式化地描述语言结构,然而该技术不够灵活,即无法描述结构和语义更为复杂
的自然语言。不同于形式语言,语言模型 (Language Model, LM)是一种用于
计算词序列(如短语、句子、段落等)概率分布的模型,是目前自然语言处理
中的重要技术组成部分,其通过计算一个文本序列中各词语出现的概率,以量
化该文本与人类语言规则的符合程度,进而达到灵活描述复杂自然语言的目
的。举例而言,一个文本序列 S 由一系列特定顺序的词 w1, �w2, � . . . , �wL 组
成,其中 L 表示文本序列 S 中词的个数,也可以看做是 S 的长度,语言模型
则将计算该文本序列的概率 P (S):
P (S) = P (w1, �w2, �w3, � · · · , �wL) ()
= P (w1)P (w2|w1)P (w3|w1, w2) · · ·P (wL|w1, w2, . . . , wL−1) ()
=
L∏
i=1
P (wi|w1, w2, · · · , wi−1), ()
其中,P (w1)是 w1的概率;P (w2|w1)是在给定 w1的条件下 w2出现的概率;以
此类推,P (wi|w1, w2, . . . , wi−1)表示在已经产生 i−1个词 w1, w2, . . . , wi−1
的情况下 wi 出现的概率。因此,通过对这些条件概率建模可计算出该文本序
列的概率 P (S)。
20 世纪 70 年代初,IBM 华生实验室的语音和语言处理专家弗雷德里克·
贾里尼克(Frederick Jelinek)领导了一组科学家,专注于利用数学方法使计算
机能够理解和生成自然语言。贾里尼克团队提出了统计语言模型 (Statistical
Language Model, SLM),通过大规模文本数据的统计分析来描述词语、语句
甚至整个文档的概率分布,用于评估句子或词序列是否符合自然语言的规范。
61
62 第三章 统计语言模型
他们利用大型计算机和大规模的文本语料库进行统计建模,分析词语之间的搭
配和出现频率,从而推导出词语的概率分布。这种基于数据驱动的方法不同于
传统的基于规则的方法1,其不依赖于人为定义的语法规则,而是从实际语料
中学习和推断自然语言的规律。这种方法在处理语言的复杂性和动态性方面具
有显著优势,且随着计算机技术的进步和数据量的增加,其在自然语言处理领
域取得了重要进展。
N-gram 模型
语言是一种复杂的序列数据,词与词之间存在长距离依赖。但是,完整建
模每个词与之前所有词的关系在计算上几乎不可行。例如,式()可以捕捉序
列中任意长度的依赖关系,但是需要计算序列中每个词与其他所有词之间的关
系。对于 P (wi|w1, w2, · · · , wi−1) 的计算,需要统计 w1, w2, · · · , wi−1 的共现
频率,而当 i 无限增大时,计算多个词共现频率的复杂度将呈指数级上升。因
此,为了降低计算复杂度,俄国数学家安德烈·马尔可夫(Andrey Markov)提
出的一阶马尔可夫链假设 [8]被引入语言模型中。一阶马尔可夫语言模型认为
任意一个词 wi 出现的概率仅与其前一个词 wi−1 相关。因此,文本序列 S 的
概率可以简化为 P (S) ≈ P (w1)
∏L
i=2 P (wi|wi−1)。同理,基于 N − 1 阶马尔
可夫链的统计语言模型假设当前词的出现与其前 N − 1 个连续的词相关,这
种语言模型被称为 N 元文法(N -gram)模型。
定义 1 (N -gram). 给定一个词序列 S=w1, �w2, � . . . , �wL,每个词 wi 的出现概
率仅依赖于它之前的 N−1 个词,即
P (S) = P (w1, w2, · · · , wL) =
L∏
i=1
P (wi|wi−(N−1), wi−(N−2), · · · , wi−1). ()
当 N = 1 时,称为一元文法(Unigram 或 Monogram),每个词出现的概
率只与其自身的词频相关;当 N = 2 时,称为二元文法(Bigram),其基于 1
阶马尔可夫链构造;当 N = 3 时,称为三元文法(Trigram),其基于 2 阶马
尔可夫链构造,依此类推。例如,长度为 5 的序列 w1, �w2, �w3, �w4, w5 在一
1传统的基于规则的方法依赖于人工编写的规则和规则集合来分析和生成语言。这些规则通常基于语法、语
义和语言结构等方面的知识,旨在捕捉语言的各个层面和特征。
N-GRAM 模型 63
元文法、二元文法和三元文法下的概率分别为:
P (w1, �w2, � · · · , �w5) = P (w1)P (w2)P (w3)P (w4)P (w5) ()
P (w1, �w2, � · · · , �w5) = P (w1)P (w2|w1)P (w3|w2)P (w4|w3)P (w5|w4) ()
P (w1, �w2, � · · · , �w5) = P (w1)P (w2|w1)P (w3|w1, w2)P (w4|w2, w3)P (w5|w3, w4)
()
N -gram 模型旨在基于前连续的 N − 1 个词计算第 N 个词的出现概率,
当 N 较小时,语言模型的准确率较低;而当 N 取值较大时,则会带来计算量
和存储量的增加。
接下来以二元文法为例,对 N -gram语言模型进行介绍和说明。在 Bigram
语言模型中,一个词的出现概率仅受其前一个词的影响。以一个文本序列片段
“她正在努力”为例,思考哪些词可接在这个序列片段之后以构成一个完整的
句子。显然,如“画画”、“唱歌”或“学习”等词汇,因其与“她正在努力”
这一表述在语义上紧密相连,成为了潜在的后续选项。相反,像“房子”、“小
猫”或“你”等词汇,由于它们与前面提到的内容在语境上关联较弱,因此不
太可能紧接着出现。这一现象直观反映了在自然语言中,词汇间的连续性及语
义依赖关系对于句子构建的重要性。下面是 Bigram 模型的计算示例。
例题 . 给定句子 “<BOS> Mary sings a song <EOS>”2,计算该句子的
概率。
基于 Bigram 模型计算上述句子的概率为:
P (Mary sings a song) = p(Mary|<BOS>)× p(sings|Mary)
×p(a|sings)× p(song|a)× p(<EOS>|song)
()
其中,P (Mary|<BOS>) 表示在给定 “<BOS>”(句子起始标记)的情况下,
下一个词是 “Mary” 的概率;P (sings|Mary) 表示在给定 “Mary” 的情况下,
下一个词是”sings” 的概率,以此类推。
例题 . “随着人工智能技术的不断发展,通用人工智能和数字经济领域的
融合与交叉已成为科研和产业发展的重要趋势。通用人工智能与数字经济创新
团队依托金融智能与金融工程四川省重点实验室,面向国家“智改数转”重大
战略需求,聚焦行业大模型研究,致力于探索大模型技术在数字经济领域的应
用潜力,推动人工智能技术与数字经济产业的创新发展。”
2为了保证条件概率在 i=1 时有意义,即在 N -gram 模型中能够计算第一个单词的概率。同时
为了保证句子内所有字符串的概率和为 1,即
∑
s
p(s) = 1,可以在句子首尾两端增加两个标志:
<BOS>w1w2...wm<EOS>。
64 第三章 统计语言模型
根据上述文本,用极大似然估计计算后验概率。
Bigram 模型中计算 P (智能|人工):在上述文本中,“人工智能”出现了 4
次,“人工”作为第一个词出现了 4 次,因此,
P (智能|人工) =
4
4
= 1
Bigram 模型中计算 P (智能|金融):在上述文本中,“金融智能”出现了 1
次,“金融”作为第一个词出现了 2 次,因此,
P (智能|金融) =
1
2
=
以上是一个简化示例。为准确计算 Bigram 模型概率,需要一个更大型的
语料库来统计词组合的频率。
平滑技术
在诸如 N -gram 等统计语言模型中,数据稀疏性问题是一个常见的挑战。
稀疏性指的是训练数据中某些词或短语可能从未出现,或其上下文信息不足,
导致模型在估计这些词序列概率时可能出现零概率问题。为解决该问题,研究
者引入平滑技术 (Smoothing Techniques) [9],该技术可为那些在训练数据中未
出现或出现次数极少的单词或短语提供一个非零的概率估计,从而使模型预测
更为合理。本节主要介绍几种应用较为广泛的平滑技术。
加一平滑
加一平滑(Add-one Smoothing),也被称为“拉普拉斯平滑”(Laplace
Smoothing),是一种较为简单的平滑技术。其核心原理是对每个出现在词汇
表中的统计单元(如单词或 N -gram)的频率计数进行加一操作,以避免任何
零概率的估计。加一平滑可表示为:
P (wi|wi−1) =
count(wi−1, wi) + 1
count(wi−1) + |V |
, ()
其中 P (wi|wi−1)表示在给定前缀词 wi−1的情况下 wi出现的概率,count(wi−1,
wi) 表示 wi−1 和 wi 组成的词对在语料库中出现的频率,count(wi−1) 表示前
缀词 wi−1 出现的频率,而 |V | 则是词汇表的大小。以下将通过示例详细说明
加一平滑技术。
平滑技术 65
例题 . (零概率问题示例详解)考虑如下简单的语料库:
<s> 这个猴子吃了香蕉 </s>
以及对应的词汇表:
V = {这个,猴子,吃了,香蕉}
计算未使用平滑技术的概率, 对于 P (“吃了” | “香蕉”):
P (“吃了” | “香蕉”) =
count(“香蕉”, “吃了”)
count(“香蕉”)
=
0
1
= 0
上述示例明显表现为零概率,即未出现在训练数据中的词对或 N-grams,
如 “香蕉吃了”,其概率被估计为零。在实际应用中,这种情况会导致模型无法
有效地预测,特别是在小型语料库或特定文本领域中,这种数据稀疏性会影响
基于统计的语言模型的准确性。引入平滑技术,如加一平滑或其他方法,能显
著提高模型的鲁棒性和预测能力。
例题 .(加一平滑示例详解)在上述例题中引入加一平滑,计算两个 Bigram
概率:P (“吃了” |“猴子”) 和 P (“吃了” |“香蕉”)。
• 对于 P (“吃了” |“香蕉”):
count (“香蕉”,“吃了”) + 1
count (“香蕉”) + |V |
=
1
5
由于“香蕉吃了”从未在语料库中出现,其计数为 0。但“香蕉”出现了
1 次。在加一平滑后,分子上的计数变为 1,而分母加上词汇表的大小 4
之后为 5,总概率为 1
5
。
• 对于 P (“吃了” |“猴子”):
count (“猴子”,“吃了”) + 1
count (“猴子”) + |V |
=
2
5
Bigram“猴子吃了”在语料库中出现了 1 次,而“猴子”也出现了 1 次。
考虑加一平滑,在分子上加 1,而分母加上词汇表的大小 4 之后为 5,所
以概率为 2
5
。
其他平滑
1. 加 K 平滑
加K 平滑(Add-K Smoothing)是加一平滑的泛化形式,也叫做“Lidstone
平滑”。在这种方法中,每个统计单元的频率计数增加了一个预定的常数 K,
66 第三章 统计语言模型
而不是 1。其数学表达式如下:
P (wi|wi−1) =
count(wi−1, wi) +K
count(wi−1) +K × |V |
. ()
加 K 平滑能够更灵活地调整平滑程度以适应不同的数据分布。具体来说,通
过合适地选择 K 的值,可以在减少过度平滑与保持数据稳健性之间达到更好
的平衡。
2. 古德-图灵平滑
古德-图灵平滑(Good-Turing Smoothing),其核心思想是对低频事件进
行重新估计,将非零 N 元文法的概率均匀分给一些低概率的语法,以修改最
大似然估计与真实分布之间的偏差。对于出现 r 次的事件,其调整后的频率 r̂
为:
r̂ = (r + 1)
Nr+1
Nr
, ()
其中,Nr 和 Nr+1 分别表示出现 r 次和出现 r + 1 次的事件的数量。该方法
利用频率的类别信息来平滑频率。对于任何发生 r 次的 N 元文法,都假设它
发生了 r̂ 次,利用频率分布表中高频事件的信息,对稀有事件进行加权平滑,
从而提高它们的概率估计准确性。古德-图灵平滑的优点在于能够有效应对数
据稀疏性带来的概率估计偏差,确保模型对稀有事件的合理处理,从而提高语
言模型和其他概率估计任务的整体性能和稳定性。
3. 插值平滑
插值平滑(Interpolation Smoothing)利用不同阶数的 N -gram 模型来估
算概率。具体来说,插值平滑将各阶数模型的概率进行线性加权平均:
P (wi | wi−(N−1), . . . , wi−1) =
N∑
j=1
λjP (wi | wi−j+1, . . . , wi−1), ()
其中,λ1, λ2, ..., λN 是不同阶数的 N 元文法模型对应的权重系数。这种方
法充分利用不同阶数的马尔可夫模型,但依赖于权重系数的选择。
4. 回退平滑
回退平滑(Back-off Smoothing)方法允许在高阶 N -gram 模型无法提供
有效信息时,自动“回退”到低阶模型。实施该平滑方法时的关键点在于确定
何时以及如何回退,即回退的条件。回退的条件应该基于当前上下文的信息量
讨论 67
和高阶模型的统计可靠性,以确保在信息不足时能够有效地利用低阶模型的信
息进行平滑处理,从而提高整体的概率估计准确性。回退平滑方法在需要考虑
多级上下文信息的语言模型中表现良好。
5. 绝对减值平滑
绝对减值平滑(Absolute Discounting Smoothing)方法直接从每个 N 元
文法事件的观察频率中减去一个固定的值 d,之后将剩余的概率质量3分配给
未见或低频事件。其数学表达式如下:
P (wi|wi−1) =
max [count(wi−1, wi)− d, 0]
count(wi−1)
. ()
其中,count(wi−1, wi) 是训练数据中 N 元文法模型中 (wi−1, wi) 的出现次数,
count(wi−1) 是训练数据中以 wi−1 开头的所有 N 元文法模型的总数。这种方
法的一个优点是在处理稀疏数据时更有效,但模型效果依赖于减值参数 d 的
选择。
讨论
讨论 . 你认为语言模型在未来会有怎样的发展趋势?请提出至少两点预测
或观点支持你的观点。
讨论 . N-gram 语言模型在自然语言处理中广泛应用,但面临数据稀疏性
问题。请展开讨论 N -gram 模型的数据稀疏性问题及其解决方案,特别是平滑
技术的应用及其影响。
习题
习题 . 请分析什么是语言模型?它的根本目标是什么?
习题 . 请描述一下统计语言模型的基本原理和建模方法。
习题 . 请解释什么是“马尔可夫模型”,并根据其在统计语言模型中的应用
给出一个简单的例子。
习题 . 请简要说明 N -gram 模型在自然语言处理中的应用和作用。
3剩余的概率质量指的是在应用平滑方法后,从观察频率中减去固定值 d 后剩余的概率分配给未见或低频
事件的部分。
68 第三章 统计语言模型
习题 . 在 Bigram 语言模型中,平滑技术是如何解决零概率问题的?请举
例说明其在实际中的应用。
习题 . 请比较 Unigram 和 Bigram 模型在文本建模中的异同,分析在什么
情况下选择使用 Unigram 或 Bigram 模型更为合适。
习题 . 假设有以下文本片段作为语料库:
<COS>在地球人类接近灭亡之际,只有程心和艾 AA两个幸存者乘坐光
速飞船离开。罗辑成为设置于冥王星的地球文明博物馆的“守墓人”,她们在
冥王星带走人类文明的精华。在云天明送的恒星的一颗行星上,程心遇到关一
帆且探讨了宇宙降维的真相,然而超乎一切之上的力量要求宇宙归零重生,在
黑域中穿越长达 1800 万年的时空⋯⋯程心没有等到云天明到来,和关一帆在
小宇宙中短暂居住后重新进入大宇宙生活。<EOS>
请用程序计算以下 Bigram 的概率:
1. Bigram: “地球 | 人类”
2. Bigram: “程心 | 遇到”
习题 . 在音字转换问题中,语言模型帮助确定给定拼音串对应的最可能的
汉字串。通过训练基于语言模型的系统,可以估计每个汉字在特定上下文中出
现的概率。这样,可以利用条件概率选择最有可能的汉字串作为输出结果。(语
料库自拟,合理即可。)
给定拼音串:wo zui xi huan mao mi le
可能的汉字串:我最喜欢猫咪了、我最西幻茂密了、我嘴喜欢猫咪乐、我
最喜欢冒米乐等等
请使用 Bigram 模型,计算每个可能的汉字串的概率,并选择最优的汉字
串作为输出结果。
习题 . 在汉语分词问题中,语言模型可以帮助确定句子中的词边界。传统
的基于规则的分词方法通常受限于预定义的词典和规则,无法处理未登录词和
歧义情况。而基于语言模型的方法则可以计算句子中各个位置的词的概率,从
而确定最可能的词边界。通过训练语言模型来估计给定上下文中每个词出现的
概率,可以将分词问题转化为一个搜索问题,并找到最优的分词结果。(语料
库自拟,合理即可。)
给定汉字串:“我最喜欢猫咪了。”
可能的汉字串:
我 | 最 | 喜欢 | 猫咪 | 了
我 | 最 | 喜欢猫 | 咪 | 了
习题 69
请使用 Bigram 模型,计算上述两种可能的分词方式的概率,并选择最优
的分词结果。
习题 . 请简单介绍加一平滑和加 K 平滑的基本思想和异同。
70 第三章 统计语言模型
第四章 神经语言模型
概述
在自然语言处理中,诸如 N -gram 等统计语言模型因泛化能力差、性能过
度依赖语料库且在处理相似上下文信息时表现不佳,因此逐渐被神经网络语言
模型 (Neural Network Language Model, NNLM) 所取代。神经语言模型基于
神经网络的参数化建模方式,其将文本序列的上下文信息编码在模型参数中,
并通过学习词之间的统计关系,实现对未见的词搭配的预测能力。相较于传统
的统计语言模型,神经语言模型对词向量进行建模,避免了统计语言模型所
面临的数据稀疏性问题,无需使用复杂的平滑或回退等技术对语言模型 “打补
丁”。神经语言模型能捕捉到更复杂的语言结构和上下文信息而备受青睐,因
此在现代自然语言处理中得到广泛应用,例如利用神经语言模型有效处理语言
生成、机器翻译以及文本分类等任务。
本章旨在详细介绍神经语言模型的基本架构和理念,首先介绍早期的神
经概率语言模型,然后介绍基于循环神经网络的语言模型,重点阐述模型的架
构、模型的原理以及模型训练方法。通过本章的学习,读者能够深入理解神经
语言模型的工作原理,为进一步探索和应用提供坚实的理论基础。
神经概率语言模型
神经概率语言模型 (Neural Probabilistic Language Model) 由 Bengio 等
人 [10]于 2003 年提出,是将深度神经网络应用于语言模型领域的早期工作之
一。该模型利用一个前馈神经网络来学习词语之间的条件概率关系,从而实现
文本生成和预测的能力。下面将介绍神经概率语言模型的概率约束条件、模型
架构及利用前馈神经网络构建神经概率语言模型的具体过程。
71
72 第四章 神经语言模型
概率约束条件
如果将一段自然语言文本视为一个离散的词序列,神经概率语言模型的目
标则是训练一个模型,使其能够根据给定的上下文预测下一个单词的条件概率
分布,即
f(wt, . . . , wt−n+1) = P̂ (wt|wt−11 ) ≈ P̂ (wt|w
t−1
t−n+1),
其中,wt 表示第 t个词,w
t−1
1 表示从第 1个单词到第 t−1个单词序列,w
t−1
t−n+1
表示从第 t − n + 1 个单词到第 t−1 个单词序列。由于计算复杂度和上下文
长度的限制,实际中通常采用一个固定窗口 n 来截断上下文,将目标近似为
P̂ (wt|wt−1t−n+1) ,即仅使用最近的 n−1 个词作为上下文进行预测。
为了确保模型输出的是一个有效的概率分布(即满足概率分布的基本性
质),模型需要满足两个约束条件:
• 概率归一性: 第一个约束条件是对于给定的任意前文序列 wt−11 ,模型对
词汇表中所有可能的词的条件概率之和为 1。概率归一性确保模型在所
有可能选项中的选择是合理的。
• 非零概率:第二个约束条件是每个可能的词的条件概率必须大于零。这个
约束避免了模型为某些词分配零概率的问题。非零概率保证即使在稀疏
数据或未见组合下,模型仍能生成合理的词序列。
为建立一个模型能够使得 f(wt, . . . , wt−n+1) = P̂ (wt|wt−11 ) 成立,建模任
务被拆解为两部分:词向量学习和条件概率的计算。
• 首先,模型需要将离散的词表示转换为连续的向量。这些向量能够捕捉
词之间的语义关系,构成模型输入的基础。
• 接下来,模型基于上下文(前文)计算下一个词的条件概率分布。通过神
经网络(如前馈神经网络或更复杂的架构),模型将词向量经过非线性变
换,最终输出一个符合概率约束的分布(如通过 softmax 函数归一化)。
模型架构
神经概率语言模型架构主要包括两部分:词嵌入层和前馈神经网络1。
• 词嵌入层:这一层负责将词语转化为词向量。词向量是词语在连续向量
空间中的表示,能够捕捉词语之间的语义和语法关系。通过将词语映射
1前馈神经网络也可以替换为循环神经网络或其他带参数化的函数。
神经概率语言模型 73
. . . . . .
. . . . . .
第i个输出:
Context)
. . . . . . . . .
此处有最多计算
softmax
的索引
的
索引
的
索引
. . .
矩阵C
所有词共享的参数
在C中
查表
tanh
图 : 神经概率语言模型的神经架构
到低维的向量空间中,词嵌入层有效地解决了传统语言模型中的维数灾
难问题。
• 前馈神经网络:这是一个三层的前馈神经网络,包括输入层、隐藏层和
输出层。输入层接收词嵌入层输出的词向量作为输入;隐藏层通过非线
性变换捕捉词语之间的复杂关系;输出层则输出给定上下文条件下每个
词语的条件概率。
词嵌入层定义了一个映射 C(·),用于将词汇表 V(词汇数量多但有限)中
的每个词 w 映射到一个实值向量 C(w) ∈ Rm,其中 m 是词向量的维度,通常
称为分布式特征向量的维度。将词汇表中所有词的向量堆叠在一起,就形成了
一个矩阵 C ∈ RV×m,即
C =
C(w1)
C(w2)
· · ·
C(wV )
其中,V 表示词汇表中的总词数,每一个词向量则对应于矩阵 C 中的一行。
前馈神经网络通过一个映射 g(·) 来估计给定上下文条件下下一个单词的
74 第四章 神经语言模型
条件概率。网络的输入是上下文中单词的词向量序列 [C(wt−n+1), . . . , C(wt−1)],
其中每个词的词向量从矩阵 C 中获得。g 的输出是一个向量,其中第 i 个元素
表示单词 wt = i 在给定上下文下的条件概率 P̂ (wt = i|wt−11 ),数学公式表达
如下:
f(i, wt−1, . . . , wt−n+1) = g[i, C(wt−1), . . . , C(wt−n+1)]. ()
其中,i 表示词汇表中的一个索引。
总而言之,映射 C(·) 的参数是由特征矩阵,即词向量构成的矩阵 C ∈
RV×m 决定的;函数 g(·)可以通过前馈神经网络、循环神经网络或其他带参数
化的函数来实现。通过训练过程来优化这些参数,以使模型能够更准确地预测
下一个单词的概率。
具体过程
如图 所示,下面本节介绍如何利用前馈神经网络来实现条件概率估计
的具体过程。
1. 输入层
模型的输入是当前时刻 t 之前 n − 1 个时刻的词序列所对应的词向量序
列,目的是根据这些已知的 n− 1 个词向量序列来预测 t 时刻的词 wt。t 时刻
网络的输入是将 C(wt−n+1), C(wt−n+2) . . . , C(wt−1) 这 n − 1 个向量拼接起来
形成一个长度为 m(n− 1) 的向量,记作 xt,即
xt = [C(wt−n+1), C(wt−n+2) · · · , C(wt−1)] ()
2. 隐藏层
隐藏层的状态可以看作是神经网络对上下文信息的表示,它是一个全连接
层。隐藏层的输出为:
xh,t = tanh(bh + Hxt), ()
其中,其中 bh 表示隐藏层的偏置,H 表示输入层到隐藏层的连接权重矩阵,
tanh(·) 表示双曲正切激活函数,非线性激活函数的使用可提升模型对复杂特
征的表达能力。
基于循环神经网络的语言模型 75
3. 输出层
输出层也是一个全连接层,共有 V 个节点,t 时刻网络的输出层 yt 计算
如下:
yt = bo + Wxt + Uxh,t ()
其中,bo 为输出层的偏置,W是输入层到输出层的权重矩阵,可选择为零(表
示无直接连接),U 是隐藏层到输出层的权重矩阵。
最后,通过 Softmax函数将输出层的输出转化为条件概率。以第 i个节点
为例,在给定前文 wt−1, . . . , wt−n+1 条件下,输出下一个单词 wt 的概率如下:
P̂ (wt | wt−1, · · ·wt−n+1) =
eywt∑
i e
yi
()
上述基于前馈神经网络的概率语言模型的训练过程涉及到大量自由参数
θ = {C,H,W,U, bh, bo},模型参数 θ 的估计通过最大化如下目标函数获得:
L =
1
T
∑
t
log f(wt, wt−1, . . . , wt−n+1;θ) +R(θ) ()
其中,T 是训练语料库中序列的总长度。log f(wt, wt−1, . . . , wt−n+1;θ) 是对数
似然项,R(θ) 是正则化项。R 是仅应用于神经网络权重和 C 矩阵的权重衰减
惩罚项2。利用随机梯度上升法,可得参数 θ 的更新规则为:
θ ← θ + ϵ
∂ log P̂ (wt | wt−1, . . . , wt−n+1)
∂θ
()
其中,ϵ 是学习率。
综上所述,神经概率语言模型通过将神经网络与概率建模相结合,为自然
语言处理引入了一种新的范式。模型基于最大似然估计原则进行训练,目标是
最大化在给定上下文下预测下一个词的条件概率。通过训练,模型可以学习到
词语之间的语义关系和概率分布,从而实现对文本的生成和预测。
基于循环神经网络的语言模型
传统的前馈神经网络如多层感知器(MLP)[11]和卷积神经网络 [12]缺乏时
序结构和记忆能力,因此无法很好地处理自然语言文本等序列数据。相比之下,
RNN是一种具有层间反馈连接的神经网络,其可维护隐状态序列3来捕捉上下
2权重衰减是一种惩罚机制,通过在损失函数中添加正比于权重的平方和的项,来鼓励模型使用较小的权
重。这可以防止网络权重过大,从而减少过拟合的风险。
3隐状态序列指在 RNN 中每个时间步的隐藏状态的序列。隐藏状态是网络的记忆单元,用于捕捉和表示
序列数据中的上下文信息和时序依赖关系。每个时间步的隐藏状态会根据当前时间步的输入和前一个时间步
的隐藏状态计算得出,并在下一个时间步传递和更新。
76 第四章 神经语言模型
文依赖,且输入序列长度是可变的。RNN的优势使其成为目前主流的语言建
模和生成任务的模型之一。本节首先介绍 RNN 的基本结构和原理,然后对基
于循环神经网络语言模型 (Recurrent Neural Network Language Model) 的原
理及模型训练进行介绍。
循环神经网络结构
为理解循环神经网络是如何捕获语言序列中的依赖关系,首先需探讨循环
神经网络结构。在传统的多层感知机中,信息仅在单个方向上流动,即从输入
层通过隐藏层最后到输出层。不同于传统方式,RNN引入一个环形结构,使得
信息可在网络内部循环。在 RNN中,每个时间步的输入不仅影响当前步的输
出,还会更新一个内部状态,随后该状态用于下一个时间步的输入和内部状态
的计算。该结构使得 RNN具有 “记忆” 功能,即能够存储并利用先前步骤的信
息。图展示了经典的 RNN 神经网络结构,其中,符号 x, h, 和 y 分别表示
图 : 简化循环神经网络结构
RNN的输入、隐藏状态和输出;U, W, 和 V 分别表示输入层到隐藏层、隐藏
层到输出层以及隐藏层内部的权重矩阵,用于对各层的输入 x, h, 和 y 分别进
行线性变换,其中 RNN 的隐藏层使用循环结构来传捕捉时序信息。RNN 的
隐藏层可被进一步展开,如图 所示,可看到隐藏层的神经元在每个时间步
对时序数据的计算步骤。具体的,
考虑一段时序数据 {xt−1, xt, xt+1},其中 {t− 1, t, t+ 1} 分别代表连续的
时间步。在时间步 t,RNN 会接收两个输入:当前的输入数据 xt 和来自上一
个时间步的隐藏状态 ht−1。基于这些输入,RNN 会计算并输出当前时间步的
隐藏状态 ht 并输出 yt。在 RNN 的设计中,隐藏状态 ht,是由当前输入 xt 与
前一时刻的隐藏状态 ht−1 联合计算得出,因此它融合了至当前时间步为止的
全部信息。隐藏状态 ht 的计算可用下列方程概括:
ht = σ(zt) = σ(Uxt + Wht−1 + b) ()
基于循环神经网络的语言模型 77
图 : RNN 展开
yt = σ(Vht + c) ()
其中,yt 为网络的输出,b 和 c 为偏置项,σ(·) 为激活函数,常用的激活函数
包括 Tanh、整流线性单元(Rectified Linear Unit, ReLu)以及 Softmax 等。
循环神经网络在应对不同任务时,需要适配不同的模型结构。这些结构
的设计主要考虑了输入序列与输出序列的长度对应关系,以下为三种典型的
RNN 网络结构。
1. 多对多结构
循环神经网络的多对多结构是其最典型的表现形式。在 RNN 多对多结构
中,每一个时间步都会有一个输入与一个输出,使得输入序列和输出序列的长
度保持一致。如图所示,结构由 N 个输入元素 x1, x2, . . . , xN 与相应的 N
个输出元素 y1, y2, . . . , yN 构成的。在每个时间步中,模型对给定的输入数据
计算一个隐藏状态,如 h1, h2, . . . , hN,并基于这些隐藏状态生成相应的输出
序列。
多对多结构使模型在每个时间步都能接收输入并基于前面的全部信息来
产生输出,从而在每个时间步有效地捕获和利用之前的信息。因此,它适合需
要在每个时间步都产生输出的任务,例如:
• 词性标注: 对于一个给定的句子,每一个词都需要被标记为它的词性(例
如:名词、动词、形容词等)。因为模型需要根据每一个词都输出一个词
性标签,所以输入和输出的长度是相同的。
• 命名实体识别: 需要从文本中识别和分类特定实体(如人名、组织名、地
点等)的任务,与词性标注类似,模型需要根据每个词输出一个标签。
• 机器翻译: 在机器翻译任务中,当遵循“源语言词汇到目标语言词汇”的
直接映射原则,或者当源语句与目标句子的词序基本相同时,输入与输
出序列的长度通常会接近或相同。
78 第四章 神经语言模型
• 视频帧预测: 基于先前的视频帧来预测下一帧的任务。
上述任务共同点在于,在每一个时间步,模型都需要考虑到先前的上下文
信息来生成当前的输出。例如,在词性标注中,一个词的词性可能受到其前后
词的影响。
...
图 : 多对多结构
2. 一对多结构
在循环神经网络架构中,一对多结构特指从单一输入产生多个输出的形
式,具体的,该模型接受一个单独的输入 x 并输出一个长度为 N 的序列
y1, y2, . . . , yN。与多对多结构同理,一对多结构会在 N 个时间步中产生一系
列隐藏状态 h1, h2, . . . , hN。一对多结构存在两种模式: 如图所示,将输入 x
整合到初始时间步的隐藏状态 h1 中;如图所示,使输入 x 在每个时间步都
与隐藏状态 h1, h2, . . . , hN 交互。
在这两种结构中,神经网络均接受单一输入,但在每个时间步中都产生输
出,其输出序列的长度显著大于输入长度。此结构适用于以下任务:
• 图像描述: 对于特定图像,模型旨在生成一系列单词或短语,描述图像的
内容。
• 音频转录: 在音频转录领域,模型将简短的音频输入转换为相应的文本
字符或单词序列。
• 文本生成: 以简短提示或关键词为输入时,模型输出扩展的长文本内容。
3. 多对一结构
在循环神经网络架构中,多对一结构特指从多个输入产生单个输出的形
式。如图所示,在多对一结构中,模型的输入为长度为 N 的序列,并仅在
基于循环神经网络的语言模型 79
...
图 : 一对多的第一种结构,输入信息只传入第一个时间步的隐藏状态中
...
图 : 一对多的第二种结构,输入信息传入所有时间步的隐藏状态中
最终时间步骤生成单一输出。具体的,模型接受一个包含 N 个元素的输入序
列 x1, x2, . . . , xN,但仅产生一个单一的输出 y。在处理输入序列的每一个时间
步骤时,模型都会计算一个相应的隐藏状态 h1, h2, . . . , hN。这些隐藏状态综
合整个序列的信息,从而生成该单一输出。
多对一结构的优点是能够对整个输入序列进行综合分析,最终得到一个代
表整体信息的输出。以下为一些典型的应用场景:
• 情感分析: 对于长句或文本段落,任务的目标是确定其整体的情感极性,
如正面、负面或中性。鉴于只需要对整个输入文本进行全局情感评估,因
此只需要一个输出。
• 文档分类: 在文档分类任务中,模型的目标是基于整体文档内容为其分
配一个特定的类别或标签。
• 异常检测: 在处理连续的时间序列数据时,如金融市场的股票价格或工
业生产中的数据,模型的任务是确定整个序列中是否存在异常数据,并
据此产生输出。
• 音频终止点检测: 在语音处理中,此任务的目的是确定音频段落的结束。
80 第四章 神经语言模型
...
图 : 多对一结构
RNNLM 模型的原理
2010年由 Mikolov等人 [13]提出基于循环神经网络的语言模型(Recurrent
Neural Network Language Model,RNNLM),该模型使用一种被称为简单循
环神经网络或 Elman 网络的架构 [14]。该网络架构包括输入层、隐藏层和输出
层,分别使用 x(t)、s(t) 和 y(t) 表示在 t 时刻网络的输入、(隐藏层)隐藏
状态及网络输出。RNNLM 模型具备 RNNs 网络的优势,即能通过隐藏层状
态 s(t) 捕捉输入序列的时间依赖关系,隐藏层的状态不仅依赖于当前时刻的
词向量 w(t),还依赖于前一时刻的隐藏状态 s(t− 1)。接下来,本节将详细介
绍 RNNLM 的输入层、隐藏层和输出层的计算方式。
1. 输入层
RNNLM 在 t 时刻的输入向量 x(t) 是由 t 时刻的词向量 w(t) 和 t− 1 时
刻的隐藏状态 s(t− 1) 进行计算而得:
x(t) = w(t) + s(t− 1) ()
在开始处理文本序列数据之前,需要对隐藏层状态 s(0)进行初始化。通常 s(0)
设置为一个较小的值,可以避免因初始网络状态过大或过小导致的梯度消失或
梯度爆炸等问题。
2. 隐藏层
RNNLM 的隐藏层各状态节点输出可由下式得到:
sj(t) = f
[∑
i
xi(t)uji
]
()
其中 sj(t) 表示 t 时刻第 j 个状态节点的值,xi(t) 是 t 时刻的状态节点 i 的
输入,uji 表示两个节点的连接权重,f(·) 表示激活函数。
基于循环神经网络的语言模型 81
3. 输出层
网络的输出是:给定当前时刻 t 的词向量 w(t) 和 t − 1 时刻的隐藏状态
s(t− 1),来预测 t+1 时刻的词的条件概率。输出层第 k 个节点的计算如下所
示:
yk(t) = g
[∑
j
sj(t)vkj
]
()
其中,vkj 表示隐藏层第 k 个节点到输出层第 j 个节点的连接权重,g(·) 是
Softmax 函数,对于任一输出节点 k 都有 yk(t) > 0,且
∑
k yk(t) = 1。
针对给定的上下文和当前单词,语料库中的第 i 个词在 t+ 1 时刻出现的
概率计算公式如下:
P [wi(t+ 1)|w(t), s(t− 1)] = yi(t) ()
值得注意的是,若训练数据中出现了罕见词,这些词的概率分布可能不稳
定,对模型的预测能力产生负面影响。为了处理罕见词,通常会引入一个罕见
词类别,计作 wrare,将所有罕见词的概率归为一类。具体的计算方法如下:
• 如果 wi(t + 1) 是一个罕见单词(即出现次数少于阈值),则它的概率被
设为 yrare(t) 除以罕见单词的总数量 Crare。这相当于将所有罕见单词看
作等同的,将概率在它们之间均匀分布。
• 如果 wi(t + 1) 不是罕见单词(即出现次数不少于阈值),则它的概率为
正常情况下通过 Softmax 计算得到的 yi(t)。
综合上述方法,罕见词处理后的概率计算公式如下:
P (wi(t+ 1)|w(t), s(t− 1)) =
yrare(t)
Crare
如果wi(t+ 1) 是罕见单词,
yi(t) 否则
()
这种方法确保了罕见词在训练过程中能够被合理对待,避免了由于频次过
低而导致模型对其预测不准确的问题。通过这种处理方式,模型在面对实际语
言数据时能够提供更稳定和准确的预测,从而提升整体性能。
RNNLM 模型的训练
传统的基于前馈神经网络的语言模型的训练一般采用时间反向传播 (Back-
propagation Through Time , BPTT) 算法 [15]。尽管 BPTT 算法能够捕捉到
长距离依赖关系,但其存在计算复杂度高的问题,且在处理长序列数据时,存
82 第四章 神经语言模型
在梯度消失和梯度爆炸问题。为克服上述问题,RNNLM 模型的训练通常使用
截断的时间反向传播 (Truncated BPTT) 算法 [16]。该算法通过在固定长度的
时间窗口内展开和计算梯度,仅考虑当前时间窗口内的信息进行权重更新,因
此显著降低计算复杂度和内存需求,提高训练效率。此外,截断的时间反向传
播 算法在一定程度上缓解了梯度消失和梯度爆炸问题,使得模型在处理长序
列数据时更加稳定。为提高模型的训练效率和稳定性,RNNLM 模型的训练通
常采用批量梯度下降方法 [17],即在每个训练步骤中,使用一小批训练样本来
计算梯度和更新权重。这样不仅可以加速训练过程,还可以使梯度估计更加平
稳,避免陷入局部最优解。此外,RNNLM 模型采用梯度裁剪技术 [18] 防止训
练过程中梯度爆炸,即当梯度的范数超过预设阈值时,对梯度进行裁剪,从而
保证模型训练的稳定性。读者可参考文献 [13] 以了解更多关于 RNNLM 模型
训练的内容。
讨论
讨论 . 分析传统统计语言模型和现代神经网络语言模型之间的异同。比较
它们的优劣,探讨为何神经网络方法逐渐取代了传统的统计方法。
讨论 . 当处理长文本时,神经网络语言模型面临哪些挑战?如何有效处理
长文本中的信息流失和文本理解难度增加问题?
习题
习题 . 神经网络语言模型是如何在语言建模中发挥作用的?它相比于传统
统计方法有什么优势?
习题 . 什么是循环神经网络(RNN)?它与传统的前馈神经网络有何不同?
习题 . 请写出循环神经网络中的基本更新公式,即如何计算隐藏状态 ht 和
输出 yt?
习题 . 循环神经网络有哪几种结构形式?请列举并说明每种结构在自然语
言处理、时间序列预测等领域的具体应用。
习题 . 循环神经网络为什么会出现梯度消失或梯度爆炸问题?这些问题与
序列长度和激活函数的选择有什么关系?
习题 . 神经网络训练过程中适当的归一化操作如何影响模型的性能和训练
效果?
习题 83
习题 . 给出一个具体的应用场景,解释循环神经网络如何利用输入权重矩
阵、隐藏状态权重矩阵和输出权重矩阵来处理和输出数据。
习题 . 请阐述在循环神经网络中权重共享的概念,并解释为什么这种机制
有助于模型在处理序列数据时的学习和泛化。
习题 . 请阐述在循环神经网络中时间深度与空间深度的区别,并讨论这两
者对模型性能的不同影响。
习题 . 循环神经网络中能否使用 ReLu 作为激活函数?请阐述理由。
84 第四章 神经语言模型
第五章 预训练语言模型
概述
神经语言模型起初主要依赖于循环神经网络和长短时记忆网络,通过学习
语料库中的语言结构和概率分布来预测文本序列中的下一个单词。这些模型
基于最大化训练集上的似然概率进行训练,逐步提升了文本生成和语言理解
的能力。随着深度学习的快速发展,研究人员开始探索如何通过更广泛的文本
学习来提升语言模型的性能,因此,预训练语言模型(Pre-trained Language
Models)应运而生。预训练语言模型通过在大规模未标记文本数据上进行自监
督学习,来预先训练通用的语言表示。它不再局限于简单的生成任务,而是通
过各种自监督任务(如掩码语言建模和下一句预测)学习到更丰富和普适的语
言理解能力。
本章将详细介绍预训练语言模型的发展和应用,以 Seq2Seq 模型 [19-20]作
为起点,逐步深入讨论注意力机制、Transformer 模型、模型的训练方法和实
际应用技巧,最后探讨一些重要的预训练语言模型(如 BERT 和 GPT-1)的
技术细节。
Seq2Seq 模型
RNN模型是为了解决序列建模问题1,但是其输入和输出的长度受限于模
型结构。例如,在 N → N 结构中,输入和输出序列的长度必须都是 N。然
而,在许多自然语言处理任务中,如文本摘要、问答和机器翻译,输入和输出
序列的长度往往不固定,并且存在较大差异。因此,传统的 RNN在处理这些
任务时面临很大挑战。
序列到序列模型(Seq2Seq)是一种常用于序列数据处理的深度学习模型,
特别适合处理输入和输出长度不固定的任务。虽然它基于 RNN构建,但能够
1序列建模问题是指输入和/或输出是数据序列(单词、字母等)的问题。
85
86 第五章 预训练语言模型
灵活地处理长度为 N 的输入序列与长度为 M 的输出序列,因此可以视为 N
对 M 循环神经网络2。
模型结构
Seq2Seq 模型由编码器和解码器两个主要部分组成。
• 编码器:编码器的作用是读取输入序列(比如一个句子),并将其转换为
一个固定长度的上下文向量。这个上下文向量包含了输入序列的所有必
要信息,随后被传递给解码器,用来生成输出序列。
• 解码器:解码器接收编码器生成的上下文向量,并利用它来生成输出序
列。
Seq2Seq模型可以看作是两个 RNN,即编码器和解码器均包含一个 RNN。
编码器中的 RNN用于捕捉输入序列中的长期依赖关系,解码器中的 RNN初
始隐藏状态由编码器的上下文向量决定。在每个时间步,解码器会预测输出序
列的下一个元素,并将这个预测结果作为下一时间步的输入。
Seq2Seq 模型的基本工作原理如图所示。编码器首先接收长度为 N 的
输入序列 x1, x2, . . . , xN。通过 RNN生成一系列隐藏状态 h1, h2, . . . , hN。在这
一过程结束时,最后一个隐藏状态 hN 被视为上下文向量 c,它捕捉了整个输
入序列的信息。然后,解码器将此上下文向量 c 作为其初始隐藏状态,并生成
新的隐藏状态序列 h′1, h
′
2, . . . , h
′
M,并由此产生输出序列 y1, y2, . . . , yM。此外,
需要在每个输入的末尾添加 <EOS> 或 <End> 等特殊符号,用于表示序列
的结尾。当输出遇到该特殊标记的时候,则停止生成序列。
... ...
...
ℎ0 ℎ1 ℎ2 ℎ𝑁 𝑐
𝑥1 𝑥2 𝑥𝑁
ℎ1
′ ℎ2
′ ℎ𝑀
′
𝑦1 𝑦2 𝑦𝑀
图 : Seq2Seq 的结构示意图
2Google 在最早面向机器翻译的 Seq2Seq 模型中使用的是 LSTM。
SEQ2SEQ 模型 87
... ℎ1 ℎ0 ℎ2 ℎ𝑁 𝐶
𝑥1 𝑥2 𝑥𝑁
图 : 编码器结构
1. 编码器计算
如图所示,编码器的结构与传统的 RNN非常相似,但其中间的神经元
并没有外部输出。此外,上下文向量 c 的计算可以基于多种方法得出。例如,
上下文向量 c 可以直接由最后一个神经元的隐藏状态 hN 表示:
c = hN ()
向量 c 也可以通过对最后一个神经元的隐藏状态 hN 应用激活函数 q 进
行转换而得到:
c = q(hN ) ()
此外,向量 c 还可以通过对所有神经元的隐藏状态 h1, h2, . . . , hN 应用函
数 q 计算得出:
c = q(h1, h2, . . . , hN ) ()
2. 解码器计算
编码器计算得到的上下文向量 c 被传递给解码器,产生最终的输出序列。
每个解码器神经元的输入包括三部分:i)上一个神经元的隐藏状态 h′t−1;ii)
上一个神经元的输出 yt−1;iii)来自编码器的上下文向量 c。对于第一个神经
元,其输入 y0 通常是表示句子起始(一般表示为 <BOS> 或 <Begin>)的一
个特殊向量。
h′t = f(c, h
′
t−1, yt−1) ()
yt = g(c, h
′
t, yt−1) ()
这里的 f 和 g均是非线性激活函数。它们可以是简单的函数(如 sigmoid),
也可以是个神经网络。值得说明的是,图实际上是一种简化的解码器实现,
即输出仅依赖当前隐状态,可以表示为 yt = g(h′t)。在实践中,一般通过 Teacher
Forcing(参见第节)的方式计算条件概率 P (yt|yt−1, yt−2, . . . , y1, c),从而
得到在时间步 t 概率最大的单词。
88 第五章 预训练语言模型
... ℎ0
′ ℎ1
′ ℎ2
′ ℎ𝑀
′
𝑦0
𝑦1 𝑦2 𝑦𝑀
𝑐
图 : 解码器结构
模型训练与使用技巧
RNN等模型的常见训练方式是 Free-running,即将上一个时间步的输出
作为下一个时间步的输入。该训练方式理论上允许模型学习到序列内部的依赖
关系。但是在实际应用中,尤其是在训练初期,模型由于参数尚未充分优化,
可能会生成错误的输出。这些错误的输出一旦作为后续时间步的输入,就可
能引发所谓的“错误累积”问题,导致模型难以正确学习序列的长距离依赖关
系,进而影响模型的性能和稳定性。为了缓解这一问题,最常用的方法是使用
Teacher Forcing。此外,在推理阶段,可以使用贪心搜索的策略,即在每个时
间步均选择概率最大的单词,但是该方法很难获得最优解;也可以使用暴力搜
索的策略,即选择条件概率最大的可能序列,但是该方法复杂度高,不具备可
行性。为了解决该问题,最常用的方法是使用束搜索(Beam Search)。下面将
分别介绍这两种技术。
1. Teacher Forcing
Teacher Forcing是在训练序列生成模型时的一种技术。其主要思想是在训
练过程中,模型的每一步输入使用真实的目标序列,而不是模型自己生成的输
出。因此,即使模型在生成过程中犯了错误,它的下一步输入依然是正确的目标
值。相比 Free-running,Teacher Forcing可以使模型更快地学习到序列中的依
赖关系,并减少错误的积累。具体而言,Free-running是基于模型的预测,即计
算条件概率 P (yt|ŷt−1, ŷt−2, . . . , ŷ1, c),其中 ŷi 表示在时间步 i模型的预测;而
Teacher Forcing 是基于目标序列,即计算条件概率 P (yt|yt−1, yt−2, . . . , y1, c)。
前面介绍的 Seq2Seq 编码器设计实际上就是 Teacher Forcing 的应用。考
虑一个翻译示例:将英文句子“He has a Huawei phone” 翻译成中文“他有一
部华为手机”。如果不使用 Teacher Forcing,则神经元使用上一个时间步的输
出作为当前神经元的输入(图左边)。如果使用 Teacher Forcing,则神经元
SEQ2SEQ 模型 89
直接使用正确输出作为当前神经元的输入(图右边)。
c
他 有 华为
Begin
一部
编码 He has a Huawei phone
手机
ℎ0
′ ℎ1
′ ℎ2
′ ℎ3
′ ℎ4
′ ℎ5
′
c
他 有 华为
Begin
一部
他 有 一部
手机
华为
ℎ0
′ ℎ1
′ ℎ2
′ ℎ3
′ ℎ4
′ ℎ5
′
图 : 不使用与使用 Teacher Forcing 进行训练的 Seq2Seq 模型
此外,研究人员也提出了计划采样(Scheduled Sampling)的方法 [21],其
主要思想是综合了 Free-running 和 Teacher Forcing 训练技术,从而在训练过
程中引入多样性,提高模型的泛化能力。
2. 束搜索
贪心搜索是在时间步 t 从词表 Y 中选择使得条件概率最大的单词,即
yt = argmaxy∈Y P (y|yt−1, yt−2, . . . , y1, c) ()
上述过程当输出遇到 <EOS> 或达到最大时间步 T 将停止。贪心算法是
局部最优,其整体计算复杂度为 O(|Y|T )。但是实际的目标是寻找最优序列,
即最大化
∏T
t=1 P (yt|yt−1, yt−2, . . . , y1, c),这被称为暴力搜索,其整体计算复
杂度为 O(|Y|⊤)。束搜索是一种启发式搜索算法,在贪心搜索和暴力搜索之间
取得了良好平衡。它的核心思想是在每个时间步骤保留最有希望的多个候选项
(而非仅保留一个最优候选项),并在后续步骤中继续扩展这些候选项。通过设
置一个参数束宽度(Beam Width),束搜索可以控制搜索的宽度,即在每个时
间步骤选择保留的最有希望的候选项数量。
在每个时间步的操作中,束搜索都会选择当前输出概率值最大的 top k 个
输出并传递至下一个神经元。接下来的神经元会使用这 k 个输出来计算词汇
表中每个单词的概率,然后从概率分布结果中得到 top k 个概率最大的输出,
并持续重复这个过程,其计算复杂度为 O(k|Y|T )。图展示了束搜索的过程,
词表 Y = {A,B,C,D,E},其中某个为 <EOS>,并假设 k = 2、最大时间步
为 3,则可能的候选输出序列包括 A、D、AB、DE、ABD 和 DEC 等 6 种。
束搜索的基本步骤如下:
• 初始化:首先选择一个固定的束宽度 K。这是每个时间步需要保留的候
选序列的数量。
90 第五章 预训练语言模型
[]
A
D
B
C
E
A
D
B
A
C
E
D
A
B
C
D
E
AB
DE
D
A
C
E
A
B
D
E
C
ABD
DEC
B
时间步 1
的候选
时间步 2
的候选
时间步 3
的候选
图 : 束搜索示意图
• 第一个时间步:对于序列的第一个元素,计算所有可能选项的概率,并
选择概率最高的 K 个选项作为候选序列。
• 后续时间步:对于每个后续时间步,针对当前的 K 个候选序列,为每个
序列计算加入下一个可能元素的概率。从这些扩展序列中选择总概率最
高的 K 个序列,作为新的候选序列。
通过优化序列生成过程、减少错误累积和提高生成效率,束搜索能够帮助
序列生成模型生成更高质量的序列。
注意力机制
Seq2Seq 模型中的编码器-解码器架构在处理长序列输入时可能会遇到信
息丢失的问题。因为编码器需要将整个输入序列编码成一个固定长度的向量,
但是当输入信息太长时,固定长度的向量不能满足信息存储的要求,从而导致
信息丢失。注意力机制(Attention Mechanism)可以解决“信息过长,信息丢
失”的问题。与传统的网络结构不同,注意力机制能对输入元素进行动态的权
重分配,以便模型可以聚焦在最重要的信息上。这种方法不仅可以增加模型对
长距离依赖的识别和处理能力,也能显著提升模型的可解释性与灵活性。
注意力机制 91
定义与原理
注意力机制是一种在处理序列数据(如自然语言处理、图像处理等)时使
用的技术,它允许模型在生成输出时,有选择地关注输入序列的不同部分。注
意力机制的核心思想是从全局信息中筛选出局部且关键的信息进行更高效的
处理。这一概念与其名称有直接联系,即“从关注全部到关注重点”。注意力
机制模拟了人类观察图片的自然过程。人眼通常并非全面审视图片的所有细
节,而是将注意力集中在显著或重要的部分上。如图所示,人眼会自动聚焦
于“熊猫”。这种聚焦机制使人能够快速有效地获取图片中的关键信息。与此
类似,注意力机制在信息处理中也将重点放在输入的核心信息上。
图 : 图片中的“Attention”
在自然语言处理中,注意力机制通过计算输入的不同部分与模型当前状态
之间的相关性,并根据相关性的大小来分配不同的权重。因此,模型就可以根
据任务需求选择性地关注与当前任务相关的部分,忽略与任务无关的部分。注
意力机制最早出现在翻译语言模型中 [22]。比如说,将“他有一部华为