分词的评价标准中文分词面临的挑战1. 缺少统一的分词标准认知差异不同人对于“什么是词”的界定存在主观差异实验显示人工分词的认同率仅在0.76左右。领域差异不同专业领域对分词的粒度要求不同导致标准之间存在矛盾甚至不一致。2. 严重的歧义问题一句话往往存在多种合理的切分方式主要分为三类交集型歧义字词组合存在交叉重叠。例如“表面的”可切分为“表面/的”或“表/面的”。组合型歧义同一个词串在不同语境下词性或结构不同。例如“门把手”名词与“把手拿开”动词名词。真歧义脱离上下文完全无法判定唯一意思的句子。例如“乒乓球拍卖完了”球拍/卖完了 vs 球/拍卖完了。3. 新词识别OOV困难动态演变语言不断发展专业领域新词和具有时效性、随意性的日常口语网络用语层出不穷。边界难定现有的无论是基于规则库、统计还是神经网络的方法都很难准确界定未见过的新词边界极易将其错误拆散如前面的 OOV 召回率低的问题从而丧失词汇的真实含义。分词方法概述1.基于词典的最长词汇匹配算法2.基于统计N元组概率语言模型分词隐马尔可夫模型条件随机场3.基于深度神经网络循环神经网络中文分词模型LSTM,LSTMCRF,BiLSTM-CRF,LSTM-CNNs-CRF等Transformer中文分词模型基于词典的最长词汇匹配算法包括前向、后向和双向最大匹配算法1.正向最大匹配算法 (Forward Maximum Matching, FMM)核心思路从左向右扫描。每次从句子的当前起始位置截取长度为 $L$ 的子串。将该子串去词典中查找。如果找到了说明这是一个词将其切分出来然后从这个词的下一个字开始继续截取长度为 $L$ 的子串。如果没找到就把子串的最右边一个字去掉长度减 1再拿去词典中查找。如此循环直到找到词典中的词或者子串长度变为 1单字直接切分。FMM 示例演示句子研究生命的起源从左向右。步骤 1截取前 3 个字研究生。查词典有切分出研究生。剩余句子命的起源。步骤 2从命开始截取 3 个字命的起。查词典无。去掉右边一个字变命的。查词典无。变单字命切分出命。剩余句子的起源。步骤 3从的开始截取 3 个字的起源。查词典无。变的起无。变单字的切分出的。剩余句子起源。步骤 4截取 2 个字因为只剩2个起源。查词典有切分出起源。FMM 最终结果研究生 / 命 / 的 / 起源这里产生了错误分词。2. 逆向最大匹配算法 (Backward Maximum Matching, BMM)核心思路从右向左扫描。每次从句子的当前末尾位置向前截取长度为 $L$ 的子串。将该子串去词典中查找。如果找到了切分出该词并从该词前面的一个字继续向左截取。如果没找到就把子串的最左边一个字去掉长度减 1再查找。循环直到找到词或长度变为 1。最后把结果倒序输出。BMM 示例演示句子研究生命的起源从右向左。步骤 1截取最后 3 个字的起源。查词典无。去掉左边变起源。查词典有切分出起源。剩余待处理研究生命的。步骤 2从的向前截取 3 个字生命的。查词典无。变命的无。变单字的切分出的。剩余待处理研究生命。步骤 3从命向前截取 3 个字究生命。查词典无。变生命。查词典有切分出生命。剩余待处理研究。步骤 4从究向前截取 2 个字研究。查词典有切分出研究。BMM 最终结果研究 / 生命 / 的 / 起源分词正确。(注统计表明汉语中偏正结构较多句子的核心通常在后面因此 BMM 的切分准确率通常略高于 FMM。)3. 双向最大匹配算法 (Bi-directional Maximum Matching, Bi-MM)核心思路将 FMM 和 BMM 的结果结合起来通过一套启发式规则消歧规则来决定最终采用哪个结果。常见的评判规则优先级如下一步步向下比较直到分出胜负词数越少越好比较 FMM 和 BMM 结果的切分词汇数量词数少的通常更合理即分出的词越长越好。单字词越少越好如果词数相同比较两者分出的“单字”数量。单字越少的说明整体词汇意义更连贯保留该结果。默认选逆向如果词数和单字数都完全一样且切分结果不同则默认选择 BMM基于 BMM 统计表现更好的经验。Bi-MM 示例演示FMM 结果研究生 / 命 / 的 / 起源词数4 个单字词数2 个 (命,的)BMM 结果研究 / 生命 / 的 / 起源词数4 个单字词数1 个 (的)决策过程两者的总词数相同都是 4 个进入第二规则BMM 的单字词数1个小于 FMM2个。Bi-MM 最终结果选择 BMM 结果即研究 / 生命 / 的 / 起源。优缺点基于统计的确定性分词算法这里的确定性默认就是 基于词典 DAG 图 N-Gram 语言模型的分词算法。当一个句子 C 存在多种可能的切分方案时如何选择最合理的一个贝叶斯公式转化寻找最合理的切分方案即寻找条件概率 P(S|C$ 最大的方案。通过贝叶斯公式进行推导。化简对于同一个输入句子分母 P(C) 是常数而给定分词结果 S它唯一确定还原为原始句子 C所以 P(C|S) 1。最终目标最大化 P(S|C) 等价于最大化该词序列本身的联合概率 P(S)。问题转化为了如何计算一个词序列的概率为了计算引入了马尔可夫假设N元语法模型。一元模型 (Unigram,)假设词与词之间绝对独立。P(S) 简化为各个词概率的乘积。为了防止连续相乘导致浮点数下溢通常取对数转化为加法。二元模型 (Bigram)一元模型太粗糙二元模型假设每个词的出现依赖于它前面的一个词。公式变为。考虑上下文二元模型能更准确地找出符合人类语言习惯的最大概率路径。计算模型有了但如果穷举所有可能的切分方式计算量会随句子长度呈指数级爆炸。因此引入了图论和动态规划。构建有向无环图 (DAG, 切分图)将句子中的每个字作为节点如果两个节点之间构成词典中的一个词就连一条有向边。边的权重就是该词由 N-Gram 模型算出的概率或对数概率。动态规划寻路 (Viterbi 算法思想)状态定义route[i]表示从第 i 个字符开始到句子末尾的最大概率。状态转移方程route[i] max { logP(wij) route[j1] }。即当前节点的最优解等于“当前词的概率”加上“剩余子串的最优解”的最大值。执行过程从句子的末尾向前逆向遍历记录每一步的最优决策最后从头到尾回溯出最佳分词路径。我们将“有意见分歧”标记为1:有, 2:意, 3:见, 4:分, 5:歧索引 1 到 5终点为 6。我们需要填一张表route[1...6]。初始条件为route[6] 0到达终点没有剩余概率。计算route[5]从字符 5“歧”开始只有一个词“歧”路径概率为 logP(“歧”) route[6] logP(“歧”) 0。这里概率使用log来表示是为了简化概率的计算log把乘法变加法也防止乘法计算数值下溢计算route[4]从字符 4“分”开始有两个选择词“分” route[5]词“分歧” route[6]我们选其中概率最大的记录下选的是哪个词。计算route[1]从字符 1“有”开始这是最关键的一步我们考察所有以“有”开头的词“有” route[2]“有意” route[3]“有意见” route[4]route[1] max(logP(“有”) route[2],logP(“有意”) route[3],logP(“有意见”) route[4])当完成了所有route值的计算现在表里存满了“最优解”。回溯就是把路径“连起来”从起点 1 出发查看你在计算route[1]时选的是哪个词假设选了“有意见”。跳转因为选了“有意见”词跨度是 3 个字下一步直接跳到字符 $134$。继续查看route[4]当初选了哪个词假设选了“分歧”。跳转跨度 2 个字跳到字符 $426$。结束到达 6路径搜索完成。最佳路径有意见 / 分歧。为什么一定要“从后往前”算逆向动态规划相当于在问“如果我站在位置 $i$后面怎么走最顺”。计算完route[1]后就知道了整个句子的最优概率。为什么要记录“决策”在route[i] max{...}这一步如果不记录下当时选了哪个词比如是选了“有意”还是“有意见”回溯时就不知道该往哪跳了。为什么叫“确定性 (Deterministic)”这里的“确定性”并不是指“它的结果一定是对的”而是指它的搜索空间是绝对确定的、由词典严格框死的。候选项是确定的算法第一步是查词典。只要词典里有这个词它才有可能成为分词结果的一部分。如果词典里没有“大兴机场”那么在生成的有向无环图DAG中就绝对不可能出现代表“大兴机场”的节点。切分边界是确定的它是在一组“确定的合法词汇”中利用 N-Gram 统计概率来挑出一条总分最高的路径使用动态规划/Viterbi。它的本质是路线选择。所以这套算法的完整描述应该是“在确定的词典路径空间下基于 N-Gram 统计概率进行消歧的分词算法”。为什么 HMM 和 CRF 不叫“确定性分词”HMM 和 CRF 虽然也是基于统计的但它们在学术体系中通常被归类为“基于序列标注的分词算法 (Sequence Labeling)”。与 N-Gram 的核心区别在于它们的空间是开放的非确定性的HMM/CRF不需要事先查词典画一张图。它们是挨个看句子里的字给每个字打上B词首、M词中、E词尾或S单字的标签。一旦模型能够正确预测出这串标签序列B-E-B-E根据标签我们只需在所有E或S后面加上一刀原本的“分词”任务就自动完成了。所以预测标签序列的过程本身就是确定分词边界的过程。无中生有的能力哪怕是一个字典里从来没出现过的新词比如网友刚造出来的梗只要模型根据上下文的统计特征觉得它是B-M-E它就能把这个词“凭空”切出来。未登录词识别词表大小的硬性限制 在深度学习和 NLP 实践中为了控制模型参数量和计算复杂度通常只会保留最高频的几万个词。那些海量的低频词长尾词无法被纳入词表它们在模型输入时会被统一替换为一个特殊的占位符[UNK](Unknown)。后果一旦变成[UNK]这个词本身包含的语义信息就彻底丢失了。专有名词与时效性 绝大多数人名、地名、机构名命名实体都是低频词。此外互联网每天都在批量制造新词如“绝绝子”、“尊嘟假嘟”旧词表永远跟不上新词产生的速度。统计规律的残酷现实 幻灯片引用了 MIT 的统计数据也是著名的齐普夫定律 Zipfs Law的体现即使你的训练语料达到了惊人的 1000 万词字典大小扩充到 10 万新词出现的比率依然停留在 10% 左右呈现出一条无法降到 0 的长尾曲线。这意味着永远无法通过“穷举”来构建一个完美的词典。既然不能依赖现成的词典那我们能不能从一段完全陌生的生语料中自动把那些“长得像词”的字符串给揪出来这就是基于统计的新词发现。它的核心思想是一个字串如果真的成了一个“词”那么它在统计上必然会表现出两种极端的特质内部抱团外部自由。特质一内部凝固度 (PMI - 点间互信息)直观理解如果 x 和 y 是一个词的两个部分那么它们应该总是“粘”在一起出现。比如“电影”和“院”它们在一起出现的概率应该远远高于它们各自独立出现概率的乘积。数学度量点间互信息 (Pointwise Mutual Information)P(x,y)x 和 y 在语料库中连在一起出现的概率。P(x)P(y)假设 x 和 y 是完全独立的两个字它们碰巧挨在一起的理论概率。结论如果 PMI 的值很高大于某个阈值说明 x 和 y 是“非偶然”地结合在一起它们的凝固度很强极有可能是一个词。相反像“的电影”虽然经常出现但因为“的”和“电”各自出现的频率都很高它们的 PMI 值会很低说明只是碰巧挨着的。特质二自由运用程度 (信息熵 Entropy)直观理解一个真正的词不仅内部要紧密它在句子中应该能灵活运用能够和各种不同的词搭配。反例假设我们通过 PMI 发现“清华大”这个字串凝固度很高。但如果我们去语料库里看“清华大”的后面永远只跟着一个字“学”。这意味着“清华大”本身并不完整它不自由所以不能算作一个词。正例“清华大学”后面可以接“的教授”、“在海淀”、“是一所”它后面接的字五花八门。数学度量左右信息熵信息熵在信息论中代表“混乱度/丰富度”。左邻熵 (Left Entropy)这个字串左边出现的字的丰富程度。右邻熵 (Right Entropy)这个字串右边出现的字的丰富程度。公式。我们取左右邻熵的最小值作为这个词的自由度。结论如果一个字串不仅内部凝固度高而且它的左边和右边都能接各种各样杂七杂八的字左右熵都很大那么我们就非常有信心地认定这是一个独立的新词分词工具jieba 设计了四种分词模式这本质上是为了在准确率 (Precision)和召回率 (Recall)之间做权衡以适配不同的下游任务精确模式力求将句子无歧义地切开适合作为文本分析、特征提取的标准输入。全模式追求极致的召回率把所有可能的词都扫描出来。这会产生大量冗余和歧义一般不直接用于语义理解。搜索引擎模式这是在构建信息检索 (IR) 或 RAG 系统的文档向量化阶段非常关键的模式。它在精确切分的基础上对长词再次进行切分。工程意义如果使用精确模式西安电子科技大学会作为一个整体被存入倒排索引。此时用户如果搜索短语西安可能会因为词不匹配而导致召回失败。搜索引擎模式通过切分出西安、电子等粒度有效提升了长尾查询的召回率。Paddle 模式引入深度学习双向 GRU 网络这弥补了纯词典或传统 HMM 模型在上下文理解上的不足提升了对新词的识别能力。通用分词器的一个致命弱点跨领域性能衰减。在专业领域表现不佳比如在“会计经济法”这一专业领域的测试。可以看到像 jieba、LTP 这样的通用分词器在该领域的未登录词OOV率高达 31% 左右。症结所在通用分词器的内置词典是基于新闻、百科等开放域语料训练的。当它们面对法律文书中的专业法条、特定的法理概念或者是医疗、金融等垂直领域的行话时往往会将其错误拆散。实践指导在构建特定领域的智能系统如法律文档阅读理解或摘要提取时直接开箱即用通用分词器是不可行的。通常必须介入挂载领域专属的业务词典强规则干预或者使用该领域的专业语料对深度学习模型进行微调以压降 OOV 错误对下游任务如知识图谱实体抽取、向量检索造成的级联破坏。思考问题一在大量文本的 NLP 任务中是否可以忽略少量歧义带来的影响回答不能一概而论这完全取决于“下游任务的性质”。可以忽略的情况宏观/统计驱动型任务在诸如文本分类、情感分析、主题模型等任务中少量的分词歧义通常可以被忽略。因为这类任务依赖的是全局特征的统计分布如词袋模型或深层语义向量如 BERT 的 Sentence Embedding。在海量数据的冲刷下个别词切错造成的“噪音”会被模型自身的鲁棒性吸收不会对最终的宏观分类结果产生决定性影响。不可忽略的情况微观/精度驱动型任务在信息抽取实体识别/关系抽取、知识图谱构建、法律文书分析、机器翻译或智能问答QA / RAG中歧义绝对不可忽略。在这些场景下一个实体的边界切分错误例如把法条中的“原告”和后续动词切混或者人名切错会导致特征提取彻底失败进而引发严重的错误级联Error Propagation直接摧毁整个句子的结构树或推理链条。问题二“研表究明”这种汉字乱序会不会影响中文分词回答会产生显著影响且是对不同时代的分词技术进行了一次“降维打击”。问题这句话本身就巧妙地应用了乱序“研表究明”。人类能够顺畅阅读是因为人类大脑具备自上而下的全局预测和脑补纠错能力。但对于机器而言对传统规则/词典分词如最大匹配灾难性打击。词典里有“研究表明”但绝对没有“研表究明”。基于词典的方法会瞬间失效将其切碎成单字“研/表/究/明”导致严重的词义丢失。对传统统计分词如 HMM / N-Gram严重干扰。N-Gram 极度依赖局部的词汇共现频率。汉字乱序破坏了原本的高频转移概率会导致模型算出极低的概率路径从而切出错误的结果。对深度学习模型如 BiLSTM-CRF / Transformer具有一定的抵抗力但仍有影响。带有自注意力机制Self-Attention的深度学习模型由于能够捕获全局字符级的上下文特征它能“看到”这句话里包含了“研、究、表、明”这几个字即使顺序错了其输出的深层语义向量仍然会非常接近正确语序的向量。因此深度学习分词器对这类乱序现象的容错率最高表现最接近人类的认知。问题三可以从哪些方面来对专业领域新词发现任务进行评价回答专业领域的新词发现评价体系应该从“内在指标Intrinsic”和“外在指标Extrinsic”两个维度结合来进行。1. 内在评价关注新词发现算法本身的质量OOV Recall未登录词召回率最核心的指标。模型到底成功找出了多少原本不存在于通用词典中的专业新词。Precision新词准确率模型找出来的“新词”有多少是真正有意义的专业词汇防止模型为了提高召回率把“的地得”和乱码也当成新词切出来即防止过度切分。统计学验证基准即提到的设定阈值来检验提取出的新词的内部凝固度PMI和自由运用程度左右信息熵是否达标。2. 外在评价关注新词对下游工程任务的增益这是工业界最看重的评价方式。不单独评估新词对不对而是看把它加入词库后系统整体性能变好了没有。信息检索/搜索引擎评估将新词引入倒排索引后专业长尾词汇的搜索召回率RecallK是否提升序列标注任务评估将含有新词的分词结果输入到命名实体识别NER或自动摘要抽取模型中观察最终 F1 分数是否提高。如果新词发现做得好下游的实体边界识别往往会得到显著改善。