Licensed-Pile项目中的Wiki数据处理技术解析
在Licensed-Pile项目中,我们构建了一个全面的Wiki数据处理流程,用于收集、清理和转换来自多个来源的Wiki内容。本文将详细介绍这一技术实现方案。
数据来源与采集策略
项目整合了三种主要的数据来源:
- 互联网档案馆(IA)转储:通过wikiteam工具收集的历史Wiki数据,约32.5万个Wiki站点
- 官方Wiki转储:来自Wikimedia基金会(Wikipedia等)和Fandom等平台的官方数据
- 实时抓取数据:使用wikiteam工具对活跃Wiki站点进行的最新抓取
数据采集采用了分层策略:
- 对于已关闭的Wiki站点,从互联网档案馆获取最新转储
- 对于活跃Wiki站点,优先使用官方转储(如可用)
- 对于内容较旧的存档,通过实时抓取进行更新
数据处理管道
1. 数据收集与提取
收集过程面临多项技术挑战:
- 互联网档案馆元数据下载耗时约40小时(串行)
- 最终数据集规模达4.4TB(压缩),解压后13TB
- 处理多种转储格式和压缩方法
- 优化目录结构以加速存在性检查
2. 文本转换与清理
核心转换流程使用wtf_wikipedia库将Wiki标记转换为纯文本:
- 实现多进程并行处理(4核CPU可达700文档/秒)
- 通过Node.js服务封装处理逻辑
- 使用HAproxy实现负载均衡
针对数学公式的特殊处理:
- 转换
<math>
标签为LaTeX格式 - 处理161,459个数学模板,成功率99.4%
- 特殊处理嵌套模板(如mset和abs)
3. HTML标记清理
处理未闭合的HTML标记(特别是div和font标签):
- 采用保守策略仅移除特定标签
- 单文件处理115,201个标签
- 保留代码示例中的有效标记
技术挑战与解决方案
-
性能优化:
- 采用分片目录结构加速文件操作
- 实现多级并行(进程级和服务级)
- 批量处理元数据查询
-
特殊内容处理:
- 数学公式的精确转换
- 处理模板嵌套和参数化模板
- 保留代码示例同时清理无关标记
-
质量控制:
- 移除参考文献等非自然文本部分
- 处理极长文档(V8字符串长度限制)
- 识别并处理空文档
成果与统计
当前处理成果包括:
- MediaWiki数据(含讨论页)约140亿token
- 64M文档处理耗时约4小时15分钟(AMD Ryzen 9 7950X)
- 错误率极低(36个解析错误文档)
未来改进方向
-
增强数学公式处理:
- 实现基于语法的完整转换
- 支持更多特殊模板类型
-
完善实时抓取:
- 整合wikiindex来源
- 改进实体链接一致性
-
优化文本清理:
- 更精确的HTML标记处理
- 改进代码示例保留机制
Licensed-Pile项目的Wiki数据处理流程展示了大规模异构数据整合的技术方案,为构建高质量训练数据集提供了可靠基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考