0%

语言识别与规则过滤

语言识别与规则过滤

一句话定位:流水线里最”便宜”也最高性价比的一道粗筛——用轻量分类器定语言、用硬规则砍掉明显低质文本,把数据量先降一个量级,减轻后续昂贵环节(质量过滤、去重)的负担。

1. 语言识别:fastText 分类器 + 阈值

  • fastText 语言识别模型对每条文本打分,输出语言标签与置信度。fastText 基于 n-gram 特征的浅层线性模型,速度极快(单机每秒可处理万级以上文本),适合超大规模语料。
  • 阈值策略:只保留目标语言且置信度高于阈值(如 0.65/0.8)的文本。阈值是典型权衡:
    • 阈值高 → 语言纯度高,但会误杀短文本、多语言混排文本(短文本置信度天然偏低);
    • 阈值低 → 保留量大,但混入他语言噪声。
  • CCNet 的做法即是”语言识别 + 按语言分桶 + 语言模型困惑度排序”,是业界标准范式。

2. 规则过滤的四个维度

规则过滤不依赖模型,纯启发式、可解释、可并行,主要维度:

  • 长度:过短(无信息量,如单句导航文本)或异常过长(拼接/爬取异常)都剔除;
  • 符号占比:标点、特殊符号、数字占比过高 → 多为代码残片、表格、乱码、垃圾内容;
  • 重复行:文档内重复行/重复段落比例过高 → 模板残留、刷屏内容(这也是”文档内去重”,与 2.4 的跨文档去重互补);
  • 停用词密度:正常自然语言有稳定的停用词比例,过低说明不是连贯的自然文本(如关键词堆砌、SEO 垃圾页、列表页)。

3. 瓶颈与优化

该环节是纯 CPU 密集:无 GPU 参与,成本与吞吐取决于 CPU 核数与调度效率。

优化只有两条主线:

  1. 提高并行度:任务天然可并行(逐条独立、无状态),横向扩 CPU 资源即可近线性加速;
  2. 批量化:批量读取与批量推理(fastText 批量打分)、减少 per-record 的函数调用与 I/O 开销,避免小文件与小批次带来的调度开销(对应 1.6 小文件问题)。

参考:fastText 官方文档;论文《CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data》