文档去重
文档去重
文档去重是在针对预训练语料中非常重要的一个步骤,重复的文档在预训练过程中会降低模型的性能。文档去重的方法其实有很多,比如模糊去重,SimHash,MinHash,KSentence,KShingle等算法去重,通过计算计算最长子串去重也同样适用。
这里我们不过多赘述相关算法的定义与推理,详情可以观看该博客。
我们直接给出多种去重算法的对比结论:
算法 | 优缺点 |
---|---|
KShingle | Jaccard similarity不适合较长的文本,文档的特征集合比较大,会遇到时间和空间的双重瓶颈。 |
MinHash | MinHash利用hash加随机的方式减少文档特征集合的大小,有损但是近似Jaccard similarity的估计,同时与LSH算法结合能够大大提高效率。 |
SimHash | SimHash文本较长的情况,准确率较高,针对短文本的准确率不能保证。 |
KSentence | KSentence准确率较高,召回率低于MinHash与SimHash,算法实现简单,效率高同时也可以并行化,但是对抄袭后部分修改的文本识别度较低。 |
这里我们主推MinHash也是参考LLaMA与Falcon的操作,同时我们实现了SimHash与MinHash的组合去重,能够得到更好的效果,但是带来的牺牲可能就是时间的问题。
代码实现
文本清洗(规则)
文档解析
文档格式
文档格式
文档的类型多种多样,为了保证其统一性,方便后续处理。首先,肯定是需要对不同的格式的文档进行读取与存储操作,如txt,json,docx,pdf等格式。针对不同格式的文档可以使用不同的包进行读取操作:
数据格式 | 涉及库 |
---|---|
txt | - |
xlsx | pandas |
docx | python-docx,pandoc |
PyPDF2,pdfplumber,ocrmypdf |
其中doc可以转换至docx,xls转换至xlsx等进行读取,较为复杂的格式为PDF,较为完美的读取PDF格式的文本内容,能过过滤掉页眉页脚等影响文本连续性的内容,同时防止读取乱码,缺失与重复;同时,PDF的读取还会涉及单双栏文档的问题,根据我们测试的结果来看,使用paddleOCR读取是效果最好的,但是也还是不能避免少量问题。但是,wps有官方转docx的工具,adobe有解析PDF,提取内容的API供访问。
储存格式
存储成什么格式没有什么固定的要求,也没有好坏之分,为的是方便后续的进一步处理与使用。储存的格式一定要有这几点:
- 唯一性
- 有效文本统一性
唯一性是指每一个文档需要相互独立,能够通过一定的方式找到,比如构建唯一ID,在查找时较为方便。
有效文本统一性是指不同的来源的文档,在进行存储读取时,要统一格式,比如文档的主体文本,都使用text字典进行保存,其他的信息都使用meta字典建立新字典保存,这样虽然不同来源不同格式的文档解析出的信息不同,需要存储的信息也不同,但是我们存储读取文件的代码并不需要更新。
文档分类
文档分类
文档分类在针对训练数据分类中大体分为两类,质量分类与内容分类。质量分类指针对文档的格式,以及是否有乱码进行分类,内容分类则是对内容是否有意义,或者内容的倾向进行分类。
我们想为你做文档分类一些例子,从而让你快速上手,找到适合你文档分类的方法。下面我们将会使用fasttext方法训练一个文本格式二分类模型用于剔除含有乱码的文档;以及我们将会使用零样本分类的方法,给予一个内容分类的例子;当然文本聚类我们也将分别给予kmeans聚类,层次聚类等例子。我们无法告诉你哪种方法适合你,只能给予你建议与参考。
自定义fasttext分类
fasttext是Facebook于2016年开源的一个词向量计算和文本分类工具,在学术上没有太大的创新,主要的优点就是快,在处理大规模数据分类时,能够做到近似深度神经网络的效果。这里我们就简要说明fasttext的原理
Lumix-Document
LLM大语言模型所需要的文本处理
好久不见
好久没有冒泡,分享一些图片以及聊聊天
Weekend(23/02/28)
周末分享
22/11 summary
2022年进入了最后一个月份,做一个小小的总结