语言识别与规则过滤
一句话定位:流水线里最”便宜”也最高性价比的一道粗筛——用轻量分类器定语言、用硬规则砍掉明显低质文本,把数据量先降一个量级,减轻后续昂贵环节(质量过滤、去重)的负担。
1. 语言识别:fastText 分类器 + 阈值
- 用 fastText 语言识别模型对每条文本打分,输出语言标签与置信度。fastText 基于 n-gram 特征的浅层线性模型,速度极快(单机每秒可处理万级以上文本),适合超大规模语料。
- 阈值策略:只保留目标语言且置信度高于阈值(如 0.65/0.8)的文本。阈值是典型权衡:
- 阈值高 → 语言纯度高,但会误杀短文本、多语言混排文本(短文本置信度天然偏低);
- 阈值低 → 保留量大,但混入他语言噪声。
- CCNet 的做法即是”语言识别 + 按语言分桶 + 语言模型困惑度排序”,是业界标准范式。
2. 规则过滤的四个维度
规则过滤不依赖模型,纯启发式、可解释、可并行,主要维度:
- 长度:过短(无信息量,如单句导航文本)或异常过长(拼接/爬取异常)都剔除;
- 符号占比:标点、特殊符号、数字占比过高 → 多为代码残片、表格、乱码、垃圾内容;
- 重复行:文档内重复行/重复段落比例过高 → 模板残留、刷屏内容(这也是”文档内去重”,与 2.4 的跨文档去重互补);
- 停用词密度:正常自然语言有稳定的停用词比例,过低说明不是连贯的自然文本(如关键词堆砌、SEO 垃圾页、列表页)。
3. 瓶颈与优化
该环节是纯 CPU 密集:无 GPU 参与,成本与吞吐取决于 CPU 核数与调度效率。
优化只有两条主线:
- 提高并行度:任务天然可并行(逐条独立、无状态),横向扩 CPU 资源即可近线性加速;
- 批量化:批量读取与批量推理(fastText 批量打分)、减少 per-record 的函数调用与 I/O 开销,避免小文件与小批次带来的调度开销(对应 1.6 小文件问题)。
参考:fastText 官方文档;论文《CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data》