中文分词是自然语言处理(NLP)领域中的基础任务之一,它将一段连续的中文字符切分为词汇单元,为后续的情感分析、机器翻译等任务提供输入。在传统方法中,基于规则的分词方法受限于语言多样性,而统计方法中的隐马尔可夫模型(HMM)或最大熵模型则对长距离依赖表现不足。
今天,我们来结合深度学习的强大表达能力与条件随机场(CRF)的全局最优解码特性,实现一个 BiLSTM+CRF 中文分词模型。这个模型不仅能捕获上下文特征,还能对输出序列进行合理约束,从而提高分词的准确性。
接下来,我们将从理论出发,逐步拆解 BiLSTM 和 CRF 的关键原理,并通过实战代码实现,从零开始构建一个中文分词器!
1. 序列标注任务和分类任务
1.1 分类任务
定义: 分类任务是对单个输入进行类别预测的任务,目的是将输入样本归类到一个已知的类别中。
输入: 单个样本,如一段文本、一张图片或一个特征向量。
输出: 单个类别标签。
示例:
图片分类(输入一张图片,输出类别“猫”或“狗”)。
情感分析(输入一段话,输出“正面”或“负面”)。
目标: 最大化输入属于正确类别的概率。
1.2 序列标注任务
定义: 序列标注是对输入序列中的每个元素进行标注的任务,目的是预测与输入序列等长的标签序列。
输入: 一个序列(如句子、音频帧、DNA 序列)。
输出: 一个与输入序列等长的标签序列。
示例:
中文分词(标注每个字属于词的开始、中间、结束,或单字成词)。
命名实体识别(标注每个词是否为人名、地名、机构名等)。
词性标注(标注每个词的词性,如名词、动词等)。
目标: 最大化整个序列标注的联合概率。
本次实战的中文分词就属于序列标注任务。