基于互信息的中文新词发现算法详解
字数 2078 2025-12-09 06:47:02
基于互信息的中文新词发现算法详解
1. 算法背景与问题定义
- 新词发现问题:中文文本由连续字符序列组成,缺少天然空格分隔。新词指未收录在现有词典中的词汇(如网络用语、专业术语)。传统基于词典的分词方法无法识别新词,需要从大规模语料中自动发现潜在词汇。
- 核心思想:利用信息论中的互信息(Mutual Information, MI) 衡量字符串内部结合紧密程度。若一个候选字符串的互信息显著高于随机组合,则可能为有效词汇。
2. 关键概念:互信息与边界熵
- 互信息(MI):度量两个随机变量的相互依赖程度。对于字符串 \(S = c_1 c_2 ... c_n\)(\(c_i\) 为字符),其互信息定义为:
\[ MI(S) = \log_2 \frac{P(S)}{\prod_{i=1}^{n} P(c_i)} \]
其中 \(P(S)\) 是字符串出现概率,\(P(c_i)\) 是字符出现概率。MI值越高,说明字符间结合越紧密,越可能成词。
- 边界熵(Boundary Entropy):仅用互信息可能误将高频短语(如“的一”)判为新词。引入左边界熵 \(H_l\) 和右边界熵 \(H_r\),度量字符串两侧上下文的多样性:
\[ H_l(S) = -\sum_{c \in C} P(c|S) \log_2 P(c|S) \]
其中 \(P(c|S)\) 是字符 \(c\) 出现在 \(S\) 左侧的概率。右边界熵定义类似。高边界熵表明该字符串可灵活与多种上下文结合,是独立词汇的特征。
3. 算法步骤详解
步骤1:语料预处理与候选生成
- 输入大规模原始文本(如社交媒体语料),进行基础清洗(去除标点、数字等)。
- 滑动窗口扫描文本,生成所有长度在 \(L_{min}\) 到 \(L_{max}\) 之间的子串作为候选(通常 \(L_{min}=2, L_{max}=5\))。
- 过滤低频候选(如频次<5),减少计算量。
步骤2:统计量与概率计算
- 统计每个候选串 \(S\) 的出现频次 \(F(S)\),以及每个字符的频次 \(F(c_i)\)。
- 基于频次估计概率:
\[ P(S) = \frac{F(S)}{N}, \quad P(c_i) = \frac{F(c_i)}{N} \]
其中 \(N\) 为语料总字符数。
- 统计每个候选的左右邻接字符集合,计算条件概率 \(P(c|S)\)。
步骤3:互信息与边界熵计算
- 计算每个候选串的互信息:
\[ MI(S) = \log_2 \frac{P(S)}{\prod_{i=1}^{n} P(c_i)} \]
- 计算左边界熵 \(H_l(S)\) 和右边界熵 \(H_r(S)\):
- 左边界熵:收集所有出现在 \(S\) 左侧的字符 \(c\),计算 \(P(c|S) = \frac{F(cS)}{F(S)}\),代入熵公式。
- 右边界熵同理。
步骤4:过滤与排序
- 设置阈值过滤:
- \(MI(S) \geq \theta_{MI}\)(如≥3),确保内部结合紧密。
- \(H_l(S) \geq \theta_H\) 且 \(H_r(S) \geq \theta_H\)(如≥1.5),确保边界上下文多样。
- 按 \(MI(S) \times H_l(S) \times H_r(S)\) 乘积降序排序,得分高者更可能为新词。
步骤5:后处理与验证
- 去除子串冲突:若长串包含已发现的高分短串,且长串频次接近短串,则保留长串(如“跨境电商”优先于“跨境”)。
- 人工评估或与现有词典比对,输出最终新词列表。
4. 示例说明
- 语料片段:“元宇宙概念火爆”
- 候选“元宇宙”统计:
- 频次 \(F(\text{元宇宙})=50\),总字符数 \(N=10^6\)。
- 字符概率:\(P(\text{元})=0.01, P(\text{宇})=0.005, P(\text{宙})=0.003\)。
- 互信息:
\[ MI = \log_2 \frac{50/10^6}{0.01 \times 0.005 \times 0.003} \approx 12.3 \]
- 左邻接字符:{“入”、“探”…},右邻接字符:{“概”、“的”…},边界熵均较高。
- 得分显著高于阈值,判定为新词。
5. 优缺点分析
- 优点:
- 无监督,无需标注数据。
- 理论基础扎实,能发现紧密结合的字符串。
- 缺点:
- 依赖频次统计,对低频新词不敏感。
- 阈值需调优,可能漏检语义相关但结合度不高的词(如“躺平”)。
- 改进方向:结合上下文嵌入(如BERT)计算语义紧密度,或引入点互信息(PMI) 变体处理稀疏问题。
6. 应用场景
- 社交媒体新词挖掘(如“yyds”)。
- 专业领域术语提取(如生物医学文献)。
- 词典扩充,提升分词系统覆盖率。