Keywords: 短语挖掘
AutoPhrase 是一种半监督的短语挖掘算法/工具, 由韩家炜团队提出, 专注于从原始文本中提取语义完整、信息量高的短语; 它的设计目标是:
- 领域无关: 不依赖特定领域知识
- 语言适配强: 支持多语言 (包括中文)
- 低人工成本: 利用远程监督 (distant supervision) 自动构建训练数据
- 轻量级部署: C++ 实现, 效率高, 适合大规模语料处理;
- 可插拔词典: 支持自定义种子短语, 适配特定业务场景;
- 语言扩展性强: 通过编码/解码机制支持非英语语料;
- 论文: [1702.04457] Automated Phrase Mining from Massive Text Corpora
- 代码: shangjingbo1226/AutoPhrase: AutoPhrase: Automated Phrase Mining from Massive Text Corpora
- 解读: AutoPhrase - 知乎
- 使用 n-gram 滑窗从语料中生成所有可能的短语;
- 设置最小支持度 (如频率 ≥ 30) 和最大长度 (如 ≤ 6);
- 构建短语质量评分器
$Q(·)$ , 主要基于以下统计特征: - 对每个候选短语打分, 通过设定阈值来筛选高质量候选短语;
"候选短语"即第 1 步中通过滑窗生成的所有 n-gram 组合;
远程监督使用的语料与第 2 步中生成候选的语料, 两者在概念和功能上是解耦的, 可以将它们视为两个独立的语料, 各自服务不同目标, 不过有时也可根据需求复用同一原始文本;
- 从 Wikipedia 等通用知识库中提取高质量短语作为正样本池;
- 将剩余候选短语视为噪声负样本池;
- 使用集成模型 (如随机森林) 进行降噪训练, 提升分类器鲁棒性;
- 使用的特征除了第 2 步中的之外, 还有其他统计特征, 比如"出现频率", "是否包含停用词", "Cohesion Score", 组合特征等等;
POS-Guided Phrasal Segmentation
- 对语料进行词性标注(POS tagging), 统计高置信短语的 POS 序列, 找出 Top-N 的常见模式;
- 对已有的高质量候选短语统计它们的词性序列模式, 保留命中常见模式的候选;
- 重新计算短语频率和质量, 提升完备性和准确率;
PMI, 即"点互信息" (Pointwise Mutual Information)
作用: 衡量词与词的共现紧密程度
公式:
其中
-
$P(w_1, w_2)$ - 组合短语在语料中出现的概率; -
$P(w_1), P(w_2)$ - 各自单独出现的概率;
- 把多词组合拆成若干相邻或成对的词, 然后对这些词对计算 PMI, 再用某种方式聚合
- 最小值法: 取组合里所有相邻词对 PMI 的最小值, 保证 "最弱的一环" 也达标;
- 均值法: 取所有相邻词对 PMI 的平均值, 反映整体平均黏合度;
- 加权平均: 权重按位置、频率或业务重要性分配, 比如头词和尾词的相关性可以给更高权重;
- 示例
短语: nasi goreng ayam pairwise: PMI(nasi, goreng), PMI(goreng, ayam) multi-PMI = min / mean / weighted_mean 之一
- 在实际语料里, 高阶 PMI 对低频组合不稳定, 所以多用 pairwise 聚合而不是直接三元概率;
-
定义:
更常见的条件式:
-
分母代表这三个词在"假设部分独立"条件下的期望共现概率, 分子是真实三元组概率;
-
缺点是三元共现概率稀疏, 低频组合噪声大, 需要设较高的频次下限;
-
示例
-
这样可以直接复用二元统计逻辑, 并且对 (w1,w2) 先合并成"词块"再与 w3 计算 PMI, 相当于做了一次层次化评估;
KL 散度 (Kullback-Leibler Divergence) 作用: 衡量两个分布之间的差异;
公式(离散型):
- 在 AutoPhrase 中, KL 散度被用来衡量一个候选短语的上下文分布与整个语料的背景分布之间的差异, 从而评估该短语是否具有 "语义独立性";
- 具体来说,
-
$i$ 为候选短语的上下文词 (即这个短语周围出现的词), -
$P(i)$ 为$i$ 在短语上下文中出现的概率, -
$Q(i)$ 为$i$ 在整个语料中的概率;
-
Step 1: 定义上下文窗口
- 定义上下文窗口长度为 1, 即左右各取 1 个词;
... saya suka makan [nasi goreng] enak dan pedas ... ↑ ↑ 左1 右1- 从语料中找到所有 nasi goreng 的出现位置, 并统计它周围的词;
Step 2: 统计上下文词频 (得到 $P(i)$)
- 对所有 nasi goreng 的上下文词进行统计, 比如:
词 出现次数 上下文总次数 $P(i)$ =次数/总数makan 30 1000 0.03 enak 20 1000 0.02
Step 3: 统计语料整体词频 (得到 $Q(i)$)
- 对整个语料进行词频统计, 不考虑短语, 只统计所有词的出现频率:
词 出现次数 语料总次数 $Q(i)$ =次数/总数makan 100 10000 0.01 enak 600 10000 0.06
Step 4: 计算 KL 散度
- 带入公式:
- 这个值越大, 说明 nasi goreng 的上下文分布越 "特殊", 越可能是一个语义独立的短语;
IDF (Inverse Document Frequency, 逆文档频率) 是衡量一个词在整个语料库中 "稀有程度" 的指标, 常用于信息检索、关键词提取、文本分类等任务中; 它的核心思想是:
一个词如果出现在很多文档中, 它的区分能力就低; 如果只出现在少数文档中, 它更可能是有信息价值的关键词;
公式:
其中
-
$t$ : 目标词项 (term) -
$N$ : 语料库中的总文档数 -
$df(t)$ : 包含词$t$ 的文档数量 (document frequency) - 加 1 是为了避免分母为 0 (即词从未出现)
假设语料库中总共有
-
词 "机器学习" 出现在 50 篇文档中:
-
词 "的" 出现在 950 篇文档中:
-
词 "深度学习" 只出现在 10 篇文档中:
越稀有的词, IDF 值越高, 代表它在区分文档时更有价值.