这是一本务实的入门书,助你零起点上手自然语言处理。 HanLP 作者何晗汇集多年经验,从基本概念出发,逐步介绍中文分词、词性标注、命名实体识别、信 息抽取、文本聚类、文本分类、句法分析这几个热门问题的算法原理与工程实现。书中通过对多种算法的讲解,比较了它们的优缺点和适用场景,同时详细演示生产级成熟代码,助你真正将自然语言处理应用在生产环境中。 随着本书的学习,你将从普通程序员晋级为机器学习工程师,*后进化到自然语言处理工程师。
你一定能看懂的自然语言处理(NLP)入门教程! 这是一本把读者阅读体验放在首位的中文 NLP 图书,作者采用从问题到算法再到工程实现的写作思路,只允许必不可少的公式出现,降低了读者学习的门槛,通俗易懂、容易上手。是一本可以在地铁上也能学会 NLP 开发的图书。 全书有以下特点: 1. 图文并茂,算法、公式、代码相互印证,Java 与 Python 双实现。 2. 学习路径清晰,问题导向、算法实现、工程实战,简单易懂好上手,双色印刷阅读体验佳。 3. 业内专家工业界周明、李航、刘群、王斌、杨攀,学术界宗成庆、刘知远、张华平 联合推荐。 4. 作者何晗(@hankcs)兼具一线实战经验与硬核学术背景。自然语言处理开源项目 HanLP 作者(GitHub Star 数远超宾夕法尼亚大学的 NLTK、斯坦福大学的 CoreNLP 以及哈工大的 LTP)埃默里大学计算机博士生,研究方向是句法分析、语义分析与问答系统。 5. 随书附赠大尺寸(60CM*74CM)思维导图,提供源码下载、 GitHub 答疑,为教师提供教学讲义 PPT。读者可到图灵社区本书页面下载。
何晗(@hankcs) 自然语言处理类库 HanLP 作者(GitHub 加星超过 14 600),码农场博主(日活跃读者数超过 3000),埃默里大学计算机博士生,研究方向是句法分析、语义分析与问答系统。 HanLP 和码农场是 NLP 领域实用的学习资源,何晗大约每周处理一次 HanLP GitHub上的 Issues。
第 1 章 新手上路 1
1.1 自然语言与编程语言 . 2
1.1.1 词汇量 . 2
1.1.2 结构化 . 2
1.1.3 歧义性 . 3
1.1.4 容错性 . 3
1.1.5 易变性 . 4
1.1.6 简略性 . 4
1.2 自然语言处理的层次 . 4
1.2.1 语音、图像和文本 .. 5
1.2.2 中文分词、词性标注和命名实体
识别 . 5
1.2.3 信息抽取 . 6
1.2.4 文本分类与文本聚类 .. 6
1.2.5 句法分析 . 6
1.2.6 语义分析与篇章分析 .. 7
1.2.7 其他高级任务 7
1.3 自然语言处理的流派 . 8
1.3.1 基于规则的专家系统 .. 8
1.3.2 基于统计的学习方法 .. 9
1.3.3 历史 . 9
1.3.4 规则与统计 . 11
1.3.5 传统方法与深度学习 11
1.4 机器学习 .. 12
1.4.1 什么是机器学习 13
1.4.2 模型 .. 13
1.4.3 特征 .. 13
1.4.4 数据集 .. 15
1.4.5 监督学习 .. 16
1.4.6 无监督学习 . 17
1.4.7 其他类型的机器学习算法 .. 18
1.5 语料库 19
1.5.1 中文分词语料库 19
1.5.2 词性标注语料库 19
1.5.3 命名实体识别语料库 20
1.5.4 句法分析语料库 20
1.5.5 文本分类语料库 20
1.5.6 语料库建设 . 21
1.6 开源工具 .. 21
1.6.1 主流NLP 工具比较 .. 21
1.6.2 Python 接口 23
1.6.3 Java 接口 . 28
1.7 总结 . 31
第 2 章 词典分词 32
2.1 什么是词 .. 32
2.1.1 词的定义 .. 32
2.1.2 词的性质--齐夫定律 .. 33
2.2 词典 . 34
2.2.1 HanLP 词典 . 34
2.2.2 词典的加载 . 34
2.3 切分算法 .. 36
2.3.1 完全切分 .. 36
2.3.2 正向最长匹配 . 37
2.3.3 逆向最长匹配 . 39
2.3.4 双向最长匹配 . 40
2.3.5 速度评测 .. 43
2.4 字典树 46
2.4.1 什么是字典树 . 46
2.4.2 字典树的节点实现 47
2.4.3 字典树的增删改查实现 .. 48
2.4.4 首字散列其余二分的字典树 . 50
2.4.5 前缀树的妙用 . 53
2.5 双数组字典树 55
2.5.1 双数组的定义 . 55
2.5.2 状态转移 .. 56
2.5.3 查询 .. 56
2.5.4 构造* 57
2.5.5 全切分与最长匹配 60
2.6 AC 自动机 .. 60
2.6.1 从字典树到AC 自动机 61
2.6.2 goto 表 61
2.6.3 output 表 .. 62
2.6.4 fail 表 63
2.6.5 实现 .. 65
2.7 基于双数组字典树的AC 自动机 . 67
2.7.1 原理 .. 67
2.7.2 实现 .. 67
2.8 HanLP 的词典分词实现 71
2.8.1 DoubleArrayTrieSegment 72
2.8.2 AhoCorasickDoubleArrayTrie-
Segment . 73
2.9 准确率评测 . 74
2.9.1 准确率 .. 74
2.9.2 混淆矩阵与TP/FN/FP/TN .. 75
2.9.3 精确率 .. 76
2.9.4 召回率 .. 76
2.9.5 F1 值 .. 77
2.9.6 中文分词中的P、R、F1 计算 .. 77
2.9.7 实现 .. 78
2.9.8 第二届国际中文分词评测 .. 79
2.9.9 OOV Recall Rate 与IV Recall Rate . 81
2.10 字典树的其他应用 . 83
2.10.1 停用词过滤 .. 83
2.10.2 简繁转换 87
2.10.3 拼音转换 90
2.11 总结 . 91
第3 章 二元语法与中文分词 . 92
3.1 语言模型 .. 92
3.1.1 什么是语言模型 92
3.1.2 马尔可夫链与二元语法 .. 94
3.1.3 n 元语法 .. 95
3.1.4 数据稀疏与平滑策略 96
3.2 中文分词语料库 . 96
3.2.1 1998 年《人民日报》语料库PKU . 97
3.2.2 微软亚洲研究院语料库MSR 98
3.2.3 繁体中文分词语料库 98
3.2.4 语料库统计 . 99
3.3 训练 . 100
3.3.1 加载语料库 .. 101
3.3.2 统计一元语法 .. 101
3.3.3 统计二元语法 .. 103
3.4 预测 .. 104
3.4.1 加载模型 104
3.4.2 构建词网 107
3.4.3 节点间的距离计算 111
3.4.4 词图上的维特比算法 . 112
3.4.5 与用户词典的集成 115
3.5 评测 .. 118
3.5.1 标准化评测 .. 118
3.5.2 误差分析 118
3.5.3 调整模型 119
3.6 日语分词 122
3.6.1 日语分词语料 .. 122
3.6.2 训练日语分词器 . 123
3.7 总结 .. 124
第4 章 隐马尔可夫模型与序列标注 . 125
4.1 序列标注问题 . 125
4.1.1 序列标注与中文分词 . 126
4.1.2 序列标注与词性标注 . 127
4.1.3 序列标注与命名实体识别 128
4.2 隐马尔可夫模型 .. 129
4.2.1 从马尔可夫假设到隐马尔可夫
模型 129
4.2.2 初始状态概率向量 . 130
4.2.3 状态转移概率矩阵 . 131
4.2.4 发射概率矩阵 .. 132
4.2.5 隐马尔可夫模型的三个基本用法 .. 133
4.3 隐马尔可夫模型的样本生成 133
4.3.1 案例--医疗诊断 . 133
4.3.2 样本生成算法 .. 136
4.4 隐马尔可夫模型的训练 .. 138
4.4.1 转移概率矩阵的估计 . 138
4.4.2 初始状态概率向量的估计 139
4.4.3 发射概率矩阵的估计 . 140
4.4.4 验证样本生成与模型训练 141
4.5 隐马尔可夫模型的预测 .. 142
4.5.1 概率计算的前向算法 . 142
4.5.2 搜索状态序列的维特比算法 .. 143
4.6 隐马尔可夫模型应用于中文分词 . 147
4.6.1 标注集 148
4.6.2 字符映射 149
4.6.3 语料转换 150
4.6.4 训练 151
4.6.5 预测 152
4.6.6 评测 153
4.6.7 误差分析 154
4.7 二阶隐马尔可夫模型* 154
4.7.1 二阶转移概率张量的估计 155
4.7.2 二阶隐马尔可夫模型中的维特比
算法 156
4.7.3 二阶隐马尔可夫模型应用于中文
分词 158
4.8 总结 .. 159
第5 章 感知机分类与序列标注 . 160
5.1 分类问题 160
5.1.1 定义 160
5.1.2 应用 161
5.2 线性分类模型与感知机算法 161
5.2.1 特征向量与样本空间 . 162
5.2.2 决策边界与分离超平面 164
5.2.3 感知机算法 .. 167
5.2.4 损失函数与随机梯度下降* 169
5.2.5 投票感知机和平均感知机 171
5.3 基于感知机的人名性别分类 174
5.3.1 人名性别语料库 . 174
5.3.2 特征提取 174
5.3.3 训练 175
5.3.4 预测 176
5.3.5 评测 177
5.3.6 模型调优 178
5.4 结构化预测问题 .. 180
5.4.1 定义 180
5.4.2 结构化预测与学习的流程 180
5.5 线性模型的结构化感知机算法 .. 180
5.5.1 结构化感知机算法 . 180
5.5.2 结构化感知机与序列标注 182
5.5.3 结构化感知机的维特比解码算法 .. 183
5.6 基于结构化感知机的中文分词 .. 186
5.6.1 特征提取 187
5.6.2 多线程训练 .. 189
5.6.3 特征裁剪与模型压缩* . 190
5.6.4 创建感知机分词器 . 192
5.6.5 准确率与性能 .. 194
5.6.6 模型调整与在线学习* . 195
5.6.7 中文分词特征工程* . 197
5.7 总结 .. 199
第6 章 条件随机场与序列标注 . 200
6.1 机器学习的模型谱系 200
6.1.1 生成式模型与判别式模型 201
6.1.2 有向与无向概率图模型 202
6.2 条件随机场 .. 205
6.2.1 线性链条件随机场 . 205
6.2.2 条件随机场的训练* 207
6.2.3 对比结构化感知机 . 210
6.3 条件随机场工具包 . 212
6.3.1 CRF 的安装 212
6.3.2 CRF 语料格式 213
6.3.3 CRF 特征模板 214
6.3.4 CRF 命令行训练 215
6.3.5 CRF 模型格式* 216
6.3.6 CRF 命令行预测 217
6.3.7 CRF 代码分析* 218
6.4 HanLP 中的CRF API 220
6.4.1 训练分词器 .. 220
6.4.2 标准化评测 .. 220
6.5 总结 .. 221
第7 章 词性标注 . 222
7.1 词性标注概述 . 222
7.1.1 什么是词性 .. 222
7.1.2 词性的用处 .. 223
7.1.3 词性标注 223
7.1.4 词性标注模型 .. 223
7.2 词性标注语料库与标注集 . 224
7.2.1 《人民日报》语料库与PKU 标注集 .. 225
7.2.2 国家语委语料库与863 标注集 . 231
7.2.3 《诛仙》语料库与CTB 标注集 .. 234
7.3 序列标注模型应用于词性标注 .. 236
7.3.1 基于隐马尔可夫模型的词性标注 .. 237
7.3.2 基于感知机的词性标注 238
7.3.3 基于条件随机场的词性标注 .. 240
7.3.4 词性标注评测 .. 241
7.4 自定义词性 .. 242
7.4.1 朴素实现 242
7.4.2 标注语料 243
7.5 总结 .. 244
第8 章 命名实体识别 . 245
8.1 概述 .. 245
8.1.1 命名实体 245
8.1.2 命名实体识别 .. 245
8.2 基于规则的命名实体识别 . 246
8.2.1 基于规则的音译人名识别 247
8.2.2 基于规则的日本人名识别 248
8.2.3 基于规则的数词英文识别 249
8.3 命名实体识别语料库 .. 250
8.3.1 1998 年《人民日报》语料库 . 250
8.3.2 微软命名实体识别语料库 251
8.4 基于层叠隐马尔可夫模型的角色
标注框架 252
8.4.1 基于角色标注的中国人名识别 .. 252
8.4.2 基于角色标注的地名识别 .. 257
8.4.3 基于角色标注的机构名识别 .. 258
8.5 基于序列标注的命名实体识别 .. 260
8.5.1 特征提取 261
8.5.2 基于隐马尔可夫模型序列标注的
命名实体识别 .. 262
8.5.3 基于感知机序列标注的命名实体
识别 264
8.5.4 基于条件随机场序列标注的命名
实体识别 265
8.5.5 命名实体识别标准化评测 265
8.6 自定义领域命名实体识别 . 266
8.6.1 标注领域命名实体识别语料库 .. 267
8.6.2 训练领域模型 .. 267
8.7 总结 .. 268
第9 章 信息抽取 . 270
9.1 新词提取 270
9.1.1 概述 270
9.1.2 基本原理 270
9.1.3 信息熵 271
9.1.4 互信息 272
9.1.5 实现 273
9.2 关键词提取 .. 276
9.2.1 词频统计 277
9.2.2 TF-IDF .. 278
9.2.3 TextRank .. 280
9.3 短语提取 283
9.4 关键句提取 .. 284
9.4.1 BM25 . 284
9.4.2 TextRank .. 285
9.5 总结 .. 287
第 10 章 文本聚类 . 288
10.1 概述 .. 288
10.1.1 聚类 288
10.1.2 聚类的应用 .. 290
10.1.3 文本聚类 290
10.2 文档的特征提取 291
10.2.1 词袋模型 291
10.2.2 词袋中的统计指标 . 293
10.3 k 均值算法 293
10.3.1 基本原理 294
10.3.2 初始质心的选取 . 294
10.3.3 更快的准则函数 . 297
10.3.4 实现 298
10.4 重复二分聚类算法 .. 300
10.4.1 基本原理 300
10.4.2 自动判断聚类个数k .. 301
10.4.3 实现 302
10.5 标准化评测 .. 303
10.5.1 P、R 和F1 值 .. 303
10.5.2 语料库 304
10.5.3 评测试验 305
10.6 总结 .. 305
第 11 章 文本分类 . 306
11.1 文本分类的概念 306
11.2 文本分类语料库 307
11.3 文本分类的特征提取 . 308
11.3.1 分词 309
11.3.2 卡方特征选择 .. 309
11.3.3 词袋向量 312
11.4 朴素贝叶斯分类器 .. 312
11.4.1 朴素贝叶斯法原理 . 312
11.4.2 朴素贝叶斯文本分类器实现 .. 314
11.5 支持向量机分类器 .. 317
11.5.1 线性支持向量机* .. 317
11.5.2 线性支持向量机文本分类器
实现 319
11.6 标准化评测 .. 320
11.6.1 评测指标P、R、F1 320
11.6.2 试验结果 321
11.7 情感分析 321
11.7.1 ChnSentiCorp 情感分析语
料库 322
11.7.2 训练情感分析模型 . 322
11.7.3 拓展试验 323
11.8 总结 .. 323
第 12 章 依存句法分析 . 324
12.1 短语结构树 .. 324
12.1.1 上下文无关文法 . 324
12.1.2 短语结构树 .. 325
12.1.3 宾州树库和中文树库 . 326
12.2 依存句法树 .. 327
12.2.1 依存句法理论 .. 327
12.2.2 中文依存句法树库 . 328
12.2.3 依存句法树的可视化 . 331
12.3 依存句法分析 . 333
12.3.1 基于图的依存句法分析 333
12.3.2 基于转移的依存句法分析 333
12.4 基于转移的依存句法分析 .. 334
12.4.1 Arc-Eager 转移系统 . 334
12.4.2 特征提取 336
12.4.3 Static 和Dynamic Oracle 337
12.4.4 Dynamic Oracle 与感知机在线
学习 . 338
12.4.5 柱搜索 339
12.5 依存句法分析API 340
12.5.1 训练模型 340
12.5.2 标准化评测 .. 341
12.6 案例:基于依存句法树的意见
抽取 .. 342
12.7 总结 .. 344
第 13 章 深度学习与自然语言处理 345
13.1 传统方法的局限 345
13.1.1 数据稀疏 345
13.1.2 特征模板 347
13.1.3 误差传播 348
13.2 深度学习与优势 348
13.2.1 深度学习 348
13.2.2 用稠密向量解决数据稀疏 352
13.2.3 用多层网络自动提取特征表示 .. 352
13.2.4 端到端的设计 .. 353
13.3 word2vec .. 353
13.3.1 语言学上的启发 . 354
13.3.2 CBOW 模型 . 354
13.3.3 训练词向量 .. 355
13.3.4 单词语义相似度 . 357
13.3.5 词语类比 358
13.3.6 短文本相似度 .. 359
13.4 基于神经网络的高性能依存句法
分析器 . 360
13.4.1 Arc-Standard 转移系统 .. 360
13.4.2 特征提取 361
13.4.3 实现与接口 .. 361
13.5 自然语言处理进阶 .. 363
自然语言处理学习资料推荐 . 365