0%

文档去重

文档去重是在针对预训练语料中非常重要的一个步骤,重复的文档在预训练过程中会降低模型的性能。文档去重的方法其实有很多,比如模糊去重SimHashMinHashKSentenceKShingle等算法去重,通过计算计算最长子串去重也同样适用。


这里我们不过多赘述相关算法的定义与推理,详情可以观看该博客

我们直接给出多种去重算法的对比结论:

算法 优缺点
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
pdf 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的原理