[English|中文]
轻量级中文语料清洗工具包。
本项目旨在开发一个以中文内容为基础的高质量垂直领域书籍数据集,主要针对使用MinerU将PDF
转为markdown
后的文本清洗过程。根据大语言模型预训练相关论文(C4
,Dolma
,RedPajama
),书籍数据是质量较高的数据集,并且对下游任务的影响较大。而大多数书籍都以PDF
扫描件为主,借助MinerU工具可以将PDF
转换成markdown
文件,但比较缺乏对书籍类markdown
文档进行清洗的管道。
同时本项目还借鉴了CCnet
、RedPajama
的数据质量评分表,衍生出适用于中文文本的质量评估指标。我们期望能够为LLM
提供更加丰富且针对性强的知识来源,从而提升其在特定领域的理解和生成能力。
- 使用MinerU对
PDF
进行OCR
转换为markdown
格式,保留PDF
中的公式,过滤无关内容(如出版信息、目录、修订说明等),并使用布隆过滤器进行精确的文档级内容去重。 - 基于数据质量量化表,从3个方面衡量数据(与领域无关):
- LLM评价(困惑度等)
- NLP特征(文本词的平均长度、文本唯一词出现的比例、停用词占比等)
- 机器学习(训练
n-gram
模型进行重要性采样、minhash
去重等)
- 调用
GPT-4 API
结合数据质量量化表、相关论文提到的高质量数据集特征(如多样性、无偏性、准确性、逻辑性)和专业领域的相关要求,整合提示词,将数据按0-5分成共6个等级。(考虑到经济性,这个步骤只会使用少量的数据集进行标定,并同时使用人工校准。) - 根据
GPT-4
与人工校对得到的高质量标定数据集训练only-decoder
(如Qwen2
)分类模型(使用only-decoder
模型主要为了避免分词器最大长度以及模型架构带来的计算限制),以实现对后期大量的新样本进行标定。 - 根据
Qwen2
分类模型的得分和数据质量量化表选取训练数据,从不同角度测评筛选出的高质量文本能否高效的提升模型在专业领域的适应性(消融实验)。- 不同的模型的表现;
- 不同的质量分数阈值对领域适应性的影响;
- 权衡模型专业领域的适应性与通用能力。
请注意:上述技术路线并非最终版本,随着项目推进可能会在细节上有调整。
[24/11/10]完成LLM
文本质量评分管道的搭建,优化文本特征计算管道
我们完成了利用LLM文本质量评分管道的搭建,主要支持ChatGLM4
、Qwen
、ChatGPT4
的API
调用以及开源模型Qwen2.5
的调用,同时优化了文本特征计算管道。关于文本质量评分的Prompt
,参照了HuggingFaceFW/fineweb-edu、BAAI/IndustryCorpus2和opencsg/chinese-fineweb-edu-v2的质量评分Prompt
,并将提示词分为了更倾向于领域知识的domain
类,以及用于通用文本的general
类。遵循一贯的作风,所有管道均支持多进程推理。
[24/10/21] 完成文本特征计算管道搭建,优化markdown
文件清洗管道
距离上次更新已经过去了1个月,在这1个月中我们完成了特征计算管道搭建,优化了对markdown
文件的清洗管道。同时,我们还在HuggingFace
上上传了两个分类模型:Qwen2.5-med-book-main-classification和fasttext-med-en-zh-identification。其中,Qwen2.5-med-book-main-classification用于将MinerU转换后的markdown
本文进行正文与非正文的分类,相较于通用LLM
模型,速度加快10倍,并且对医疗类文本正文与非正文的分类精度更高。fasttext-med-en-zh-identification用于判断文本属于英文还是中文,并给出置信度。具体的数据集构建流程和模型训练细节可以在对应模型HuggingFace
的Model card
中查看。
本次更新是一次较为重要的更新,除了显性工作(数据的评分管道搭建),我们还对之前的代码进行了很多优化,包括但不仅限于尽可能遵循HuggingFace
的代码风格、保证代码一致性、生产环境测试等一系列隐性工作。并且几乎所有功能模块都支持多进程加速,为了edcp
库的易用性,我们编写了用户文档,来帮助其他研究者了解和使用edcp
库。
[24/09/20] 我们更新了对markdown
文件的粗清洗管道
展开日志
非常高兴迎来edcp
库的第一次功能更新,本次更新的是对markdown
文件的粗清洗管道。
具体的,当我们使用MinerU将PDF
转换为markdown
文件时,会产生很多非正文内容,包括书本简介、出版社信息编写规范等,所以我们尝试使用LLM
来进行清洗。
因为内容主要以中文为主,所以我们使用了不久前刚发布的Qwen2.5系列。根据实验,必须使用7B参数量以上的模型才能保证过滤质量,推荐使用14B以上参数量的模型。
我们同时提供了VLLM
框架和Transformers
框架批推理流程,实测使用VLLM
框架比Transformers
框架推理速度快2倍。如果没有VLLM
框架也不用太过沮丧,因为我们还提供了并行推理,在显存足够的情况下也能进行一定加速。
文件树:
└── edcp
├── mdclean
├── __init__.py
└── LLMFilter.py
└── VLLMFilter.py
└── charreplace.py
└── pipelines.py
└── template.py
└── utils.py
└── md_pipe_demo.py
各个文件的主要作用如下:
LLMFilter.py
:Transformers框架批推理流程。VLLMFilter.py
:VLLM框架批推理流程。charreplace.py
:需要对文本进行替换操作的正则表达式与字符库。pipelines.py
:处理流程入口。template.py
:LLM过滤提示词模板。utils.py
:一些常用的工具函数。
Important
此步骤为必需。
git clone https://github.com/ytzfhqs/EDCP
cd EDCP
pip install requirements.txt -r
Tip
具体用法请参阅用户文档。