网页内容提取一直是构建大规模预训练语料库的基础环节。传统方法主要依赖手工设计的启发式规则,例如基于文本密度、标签路径或CSS类名的模式匹配。这些方法虽然计算效率高,但在处理现代网页的复杂结构时面临显著挑战。
以Common Crawl为例,这个每月抓取数十亿网页的开源项目,原始数据以WARC格式存储,包含大量HTML标记、广告代码和导航元素。直接使用这些数据训练语言模型会导致模型学习到大量噪声。我们的实验显示,未经处理的网页数据中,平均只有42%的内容是真正有价值的主体文本。
Trafilatura作为当前主流的开源提取工具,采用基于标签路径和文本特征的规则组合。其核心算法可以概括为:
<script>、<style>等非内容标签这种方法在简单新闻类网页上表现尚可,但遇到以下场景就会失效:
<pre>标签内的代码块经常被错误截断我们在WebMainBench基准测试中发现,传统工具对结构化元素的保留率普遍低于50%,这直接影响了后续语言模型在代码生成、数学推理等任务上的表现。
MinerU-HTML采用完全不同的技术路线:将HTML解析建模为序列标注问题。其工作流程包括:
这种方法的核心优势在于:
<div>标签在不同页面中的语义差异在技术实现上,我们基于Qwen3-0.6B模型进行微调,使用870K人工标注样本训练分类器。标注过程采用三阶段质量控制,确保每个样本都经过至少两位标注员的交叉验证。
我们处理的是Common Crawl 2023年的两个快照(CC-2023-06和CC-2023-14),原始数据规模超过120TB。预处理管道包括:
python复制def process_warc(warc_file):
# 解压缩WARC记录
records = parse_warc(warc_file)
cleaned = []
for record in records:
# 应用MinerU-HTML提取
markdown = mineru_html(record.html)
# 语言检测
lang = detect_language(markdown)
if lang == 'en': # 仅保留英文内容
cleaned.append(markdown)
return cleaned
这个阶段的关键挑战是处理HTML的畸形结构。我们发现约15%的网页存在标签未闭合、编码错误等问题。MinerU-HTML通过以下策略应对:
我们设计了三级评估方案验证提取质量:
微观层面(单文档):
(Len_AICC - Len_TfCC)/max(Len_AICC, Len_TfCC)中观层面(样本集):
宏观层面(下游任务):
评估结果显示,当AICC提取的内容更长时(长度比>0),其在75-98%的比较中被认为质量更好。这证明额外的内容主要是有效信息而非噪声。
为确保语料质量,我们实施严格的五阶段过滤:
经过完整流程,原始7.3T数据被精炼为372B tokens的高质量语料。值得注意的是,我们为TfCC基准应用完全相同的后处理流程,确保下游性能差异仅源于提取方法。
模型的神经网络架构基于Qwen3系列改进,主要创新点包括:
分层注意力机制:
多任务学习目标:
训练时采用课程学习策略,先学习简单新闻网页,逐步过渡到复杂的技术文档。我们在8×A100 GPU上完成训练,耗时约72小时。
对于代码、公式等特殊内容,我们开发了专用处理模块:
代码块提取:
python复制def extract_code(node):
if node.tag in ['pre', 'code']:
# 保留原始缩进
lines = node.text.split('\n')
indent = min([len(l) - len(l.lstrip()) for l in lines if l.strip()])
return '\n'.join([l[indent:] for l in lines])
return None
数学公式处理:
$...$分隔符$$...$$标记表格转换算法:
<table>结构,识别表头/表体code复制| Header 1 | Header 2 |
|----------|----------|
| Cell 1 | Cell 2 |
网页设计趋势持续演进,为此我们实现了以下机制:
这套系统使我们的提取器在技术文档上的准确率从v1.0的82%提升到v2.1的93%。
我们在同等条件下训练1.5B参数的Transformer模型,关键配置:
训练数据使用62B tokens的子集,涵盖四种语料:
在13个标准测试集上的表现如下表所示:
| 任务类别 | AICC | TfCC | FineWeb | RefinedWeb |
|---|---|---|---|---|
| 通用知识 | 47.54 | 45.61 | 46.86 | 44.57 |
| 推理能力 | 59.83 | 59.34 | 60.69 | 59.43 |
| 阅读理解 | 42.37 | 42.02 | 36.68 | 41.10 |
关键发现:
虽然整体表现优异,我们仍观察到一些失败模式:
内容遗漏案例:
<theorem>)格式错误案例:
这些案例为我们指明了下一步改进方向,特别是需要加强客户端渲染内容的处理能力。
基于我们的实践经验,AICC特别适合以下应用:
多模态训练:
<img>的alt文本专业领域建模:
多语言场景:
在实际应用中,我们总结出以下经验:
计算资源优化:
质量监控方案:
扩展开发接口:
python复制class MinerU:
def __init__(self, model_path):
self.model = load_model(model_path)
def extract(self, html, preserve=[], **kwargs):
# preserve参数指定要保留的元素类型
return self.model.predict(html)
这套接口已被集成到HuggingFace的datasets库中,支持一键处理Common Crawl数据。
当前技术路线还有多个值得探索的方向:
即时渲染支持:
多模态扩展:
质量评估创新:
我们已将MinerU-HTML开源,并持续维护WebMainBench评估平台。实践表明,模型驱动的解析方法使HTML到文本的转换质量成为可持续改进的变量,而非固定瓶颈。这对于构建下一代多模态大模型具有重要意义。