今天是2023年9月24日,星期日,北京,天气小雨。
我们来继续谈谈一些关于数据处理和行业问答的工作。
我们在之前的文章中讲了许多关于RAG行业文档问答的问题,大模型在文档问题解答方面存在明显问题,因为文档无法在LLM的较小上下文长度内完成。为了解决这个问题,现有的大多数工作都侧重于从文档中检索相关上下文,并将其表示为纯文本。然而,PDF、网页和预发文件等文档天然具有不同的页面、表格和章节等结构。
但是,用纯文本来表示这类结构化文档,与丰富结构的文档的印象不符,所以我们提到了文档智能,为了弥补处理结构化文档的这一缺陷,《PDFTriage: Question Answering over Long, Structured Documents》提出了一种名为PDFTriage的方法,PDFTriage利用PDF的结构化元数据来实现更精确、更准确的文档问题解答方法本文将首先来谈谈这个工作。
做模型就是在做数据,目前已经陆续有一些开放的训练数据集出来,比如refined web, redpajama,中文的wudao, wanjuan等,而随着跨语言的推进,要获得用于训练LLM的多语种大规模数据集。
当前,虽然有包含多种语言文本数据的多语言开源数据集,如mC4、OSCAR、CC100和BigScienceROOT语料库,mC4由于使用了cld3,语言识别能力也较差。BigScienceROOTS只提供了46种语言的少量样本数据,而CC100则没有2018年以后的信息。
《CulturaX: A Cleaned, Enormous, and Multilingual Dataset for Large Language Models in 167 Languages》这一工作发布了一个为LLM开发量身定制的多语言数据集CulturaX,包含167种语言的6.3万亿个token是当前一个较新的工作,本文作为第二个工作进行介绍,其数据处理步骤以及提到的一些工具,值得关注。
一、论文档结构对于大模型问答的重要性:PDFTriage
PDFTriage利用PDF的结构化元数据来实现更精确、更准确的文档问题解答方法。它首先生成文档的结构化元数据表示,提取围绕章节文本、图表标题、页眉和表格的信息。
接下来,在给定查询的情况下,基于LLM的分流法会选择回答查询所需的文档框架,并直接从选定的页面、章节、图或表格中进行检索。最后,在输出生成的答案之前,LLM会对所选上下文和输入的查询进行处理。
该方法使模型能够根据结构或内容检索上下文,实验证明了所提出的PDFTriage增强模型在现有的检索增强LLM失效的几类问题中的有效性。
地址:https://arxiv.org/pdf/2309.08872.pdf
Code:https://huggingface.co/papers/2309.08872
1、实现思路
1)文档元数据生成
将原生数字PDF文档视为用户将与之交互的结构化文档。
首先,使用Adobe Extract API,将PDF转换为类似HTML树,这样能够提取章节、章节标题、页面信息表格和图形,Extract API会生成PDF中元素的分层树,其中包括章节标题、表格、图表、段落等。
然后,可以解析该树来识别章节、章节级别和标题,收集某个页面上的所有文本,或者获取图形和表格周围的文本。
最后将结构化信息映射到TSON类型,并将其用作LLM的初始提示符。
其中,Adobe Extract API可以查看:https://experienceleague.adobe.com/docs/events/adobe-developers-live-recordings/2021/oct2021/parsing-pdf.html
2)大模型精确检索
PDFTriage在该方法中使用了五个不同的函数: fetch_pagesfetch sections、fetch table、 fetch_figure和retrieve。
每个功能都允许PDFTriage系统收集与给定PDF文档相关的精确信息,以标题、副标题、图形、表格和章节段落中的结构化文本数据为中心。
PDFTriage系统在针对每个问题的请求中使用这些函数,综合多条信息以得出最终答案。
3)答案生成
为了初始化PDFTriage问答,使用GPT-3.5,然后,根据用户提示,输入请求,无需其他格式。接下来,PDFTriage会使用 Step2] 中建立的功能来查询文档以获取回答问题所需的相关信息。在每个回合中,PDFTriage在处理检索到的上下文之前使用单个函数收集所需的信息,并在在最后一轮中,模型输出问题的答案。
Prompt输入如下:
You are an expert document question answering system. You answer questions by finding relevant content in the document and answering questions based on that content.
Document: <textual metadata of document>
您是文档问答系统专家。您可以通过在文档中查找相关内容并根据该内容回答问题来回答问题。文档:<文档的文本元数据>
2、实验结论
1)PDFTriage比基于检索的方法产生更好的答案
图3中,表明注释者有一半以上的时间(50.7%)倾向于PDFTriage答案,并且倾向于大块检索方法而不是页面检索方法。
在比较同一问题的不同答案时,PDFTriage的表现大大优于现有的替代方法,在所有问题类型中的排名都高于替代方法。
2)PDFTriage提高了答案质量、准确性、可读性和信息量
通过对PDFTriage、PageRetrieval和ChunkRetrieval答案的五个主要质量进行评分:准确性、信息量、可读性/可理解性和清晰度。
表3显示,在除清晰度以外的所有答案质量方面,PDFTriage答案的得分都高于页面检索和大块检索。特别是,PDFTriage在总体质量和答案准确性方面得分最高。
进一步的,PDFTriage在总结、表格推理、提取和图示等需要跨文档不同部分进行多步骤推理的问题类别中表现更强。此外,PDFTriage在其他更广泛的推理任务(如文本问题和分类)上的表现与页面检索和chunk检索相似。
3)PDFTriage需要更少的检索标记来产生更好的答案
对于使用的PDF文档样本,PDFTriage文本检索的平均标记长度为1568个token。
文档JSON中文本输入的平均元数据长度为4,257个token。
虽然PDFTriage比页面检索(平均3611个token)和Chunk检索(平均3934个token)使用了更多的token,但这些token是从文档中不连续的多个部分检索的。
4)PDFTriage在不同文档长度下的表现一致
在人工标注的PDFTriage”整体质量”答案得分和文档长度之间,我们发现皮尔逊相关系数为-0.015。这表明文档长度对PDFTriage的功效影响微乎其微,从而增强了该方法对长短文档的通用性。
不同文档类型的长度似乎最终对整体性能没有影响。PDFTriage能够查询文档中的特定文本部分,因此无需 摄取上下文过大的文档。它允许PDFTriage将文档的不同部分连接起来,以处理多页问题,如表格推理、跨页任务、数字问题和结构问题,优先处理相关内容,尽量减少无关信息。
不过,这种方法最大的问题在于,在实际开发过程中,获取PDF的结构信息并非易事。
二、再看训练数据集如何清洗:多语种开源训练数据集CulturaX
一般来说,生成高质量数据集的典型数据加工流程可能涉及多个步骤,如FastText、CC-Net、用于BLOOM模型的BigScienceROOTS语料库,用于Fal-con模型的RefinedWeb数据集,以及用于训练LLaMa模型的数据集。
在此类流程中,第一步需要进行语言识别,以便适当地将数据分配给相应的语言。接下来的步骤是采用各种特定数据集的规则和启发式方法,根据特殊字符、短行、坏词等的比例过滤不受欢迎的内容。
数据还可以通过轻量级模型进行过滤,例如通过KenLM语言模型,以避免出现噪声文档。最后,应进行数据去重,以去除相似或重复的信息。这方面的一个重要步骤是在文档层面进行模糊重复数据删除,例如通过MinHash来删除相似文档,从而减少记忆并提高LLM的泛化效果。
CulturaX数据集经过严格的多阶段清理和重复数据删除,以达到最佳的模型训练质量,包括语言识别、基于URL的过滤、基于度量的清理、文档再细化和重复数据删除。
地址:https://arxiv.org/pdf/2309.09400.pdf
数据地址:https://huggingface.co/datasets/uonlp/CulturaX
我们先看数据构建流程,主要包括以下几个步骤:
1、数据集收集
为了开发CulturaX数据集,将mC4和OSCAR这两个最大的多语种数据集结合起来。鉴于mC4和OSCAR数据集的组合,首先执行了一个全面的数据清理程序,以去除数据中的噪声和不良内容,包括语言识别、基于ULR的过滤、基于度量的清理和文档细化。
2、语言检测
在mC4和OSCAR中分别使用了两种不同的语言识别工具,即cld3和FastText。先前的研究表明,cld3比FastText差很多,导致mC4的语言检测错误大大增,为此,第一个数据清理步骤是应用FastText重新预测mC4中文档的语言。预测语言与mC4中提供的语言不同的文档将从数据集中删除。
这样做的目的是为了避免那些让语言度量器cld3和FastText感到困惑的文档,因为它们可能给数据带来噪音。最后,为确保最高质量,删除mC4中发现但FastText不支持的任何语言的数据。
3、基于URL的过滤
剔除已知有毒有害来源的网页,以降低数据的相关风险。特别是,利用图卢兹大学提供的最新UT1URL和域黑名单,为学校管理员的互联网使用监管提供支持。该黑名单涉及不同主题的网站,包括色情、怨言和黑客等,这些网站在法律硕士培训中都应予以摒弃。
黑名单每周更新两到三次,涉及超过370万条记录,由人类和机器人(如搜索引擎、已知地址和索引)贡献,从数据集中删除任何相关URL与黑名单中网站匹配的页面。这一步骤对的数据集很有帮助,因为mC4数据集以前没有使用过黑名单。
此外,尽管OSCAR已经使用该黑名单进行数据清理,但的方法还是纳入了黑名单中的最新信息,而OSCAR的当前版本可能还没有这些信息。
4、基于度量指标的清理
为了提高数据集的质量,借鉴BigScience的ROOTS语料库中用于BLOOM的数据处理流程,进一步利用各种数据集指标的分布来识别和过滤离群文档。
每个指标都为数据集中的每篇文档提供一个奇异值,量化每篇文档的特定属性,如单词数(number_words)、停用此比率(stop-word_ratios)和复杂度分数(perplexity_score)。
对于数据集中的每个指标及其可能的取值范围,将确定一个阈值,把范围划分为两个区域:正常范围和异常范围。异常范围指的是指标值明显偏离正常值的文档,将其归类为离群值/噪音,然后将这些离群值从数据集中移除。
因此,采用了一套全面的数据集度量指标,这些指标将共同用于完善的数据集,指标包括:字数、字符重复率、单词重复率、特殊字符比率、停顿词比率、标记词比率、语言识别可信度、复杂性得分、文档长度(字符数)-行数、短行长度比、短行比率,后四个指标由OS-CAR数据集提出,其他指标则继承自BigScienceROOTS语料库处理OSCAR数据的管道。
对于复杂度得分,按照BigScience ROOTS语料库的方法,使用维基百科的20230501 dumps训练Senten-cePiecetokenizer和KenLM库中提供的5-gram Kneser-Ney语言模型。
基于这些KenLM模型的文档显示出较高的困惑度得分,被认为与维基百科文章有明显差异。
此外,度量指标还可使用tok-enizer来获取文档中的单词/标记词数量。
其中,阈值的确定很重要。
考虑到数据集指标集,一个重要的问题是为每种指标和语言选择适当的阈值,以生成高质量的多语言数据。
在BigScienceROOTS项目中,这一选择过程由13种语言的母语使用者完成。由此产生的阈值被用于其余46种语言。
该项目提供了一个可视化界面,对每种语言的数千份文档进行抽样,使用户能够在调整指标阈值时监控数据统计。
然而,由于需要有经验的母语使用者,这一过程无法轻易扩展到不同的语言,这就产生了巨大的成本。
此外,有限的样本量也妨碍了所选阈值在完整数据集上的代表性。BigScienceROOTS中某些语言的某些选定阈值几乎超出了整个数据集的值范围,导致相应指标失效。
为了解决这些问题,采用了一种变体的四分位数范围法(IQR)来为数据集的过滤指标选择合适的阈值。对于每种指标和语言,都在整个数据集中生成该语言的可能值分布。
具体的,西班牙文和俄文等数据量较大的语言除外,它们仅使用25%的数据来计算这些分布。然后,计算出分布的Q1-th和Q3-th百分位数(Q1<Q3),并用它们作为过滤指标的阈值。
特别是,对于偏好高值的指标(如语言识别可信度),将选择Q1-th百分位数的下限,而偏好低值的指标(如复杂度分数和文档长度)将使用Q3th百分位数的上限。
值得强调的是,与BigScienceROOTS项目中使用的方法相比,使用百分位数进行阈值选择使的方法能够有效地利用每种语言更广泛的数据样本。这将为不同语言的完整数据集带来更可靠的阈值。
具体来说,对于只使用25%的数据样本来计算指标值分布的大型语言,在应用相同的选定过滤阈值时,整个数据集中被丢弃的数据比例与数据样本的比例非常接近。这就强调了的方法所选阈值的代表性。
最后,一旦确定了特定语言的度量阈值,将剔除任何超过度量阈值并进入数据不利范围的文档。
5、文档细化
前面的清理步骤是在数据集层面上完成的,目的是从数据集中删除低质量文档。在这一步中,将进一步清理保留下来的文档,以提高文档质量。
值得注意的是,之前基于度量的过滤步骤在剔除高噪声文档方面发挥了重要作用,这反过来又简化了本步骤中制定有效文档清理规则的过程。
由于mC4和OSCAR中的文档是从网络上抓取的HTML网页中提取的,因此其中很大一部分可能带有抓取和提取错误,包括JavaScript行过长和无关内容。因此,过滤掉这些文档可以大大简化设计规则来清理数据集中文档的工作。
因此,对于每篇文档,都通过一系列操作来去除其中的噪声或无关部分。
首先,删除位于每篇文档末尾的短行,因为这些短行通常包含页脚细节或网站的无用信息。
其次,剔除包含JavaScript(JS)关键词列表中的单词(如”<script”)的行,以避免无关和非语言信息。
在此,如果文档中只有一行包含JS关键字,且该行必须至少包含两种不同类型的JS关键字,就排除删除JS行。采用这种方法是因为包含两行以上JS的文档很可能是数据中的编码教程,应予以保留以提高多样性。此外,某些JS关键字在自然语言中使用,例如”var”。通过重新要求至少两个不同类型的JS关键字,降低了无意中遗漏有用内容和破坏文档结构的风险。
6、数据去重
尽管进行了彻底的数据清理,但由于各种原因(包括信息在网络上的转贴、同一文章的多次引用、模板内容和剽窃),剩余数据集仍可能包含大量重复数据,重复数据导致记忆,并严重阻碍LLM的概括性。
因此,重复数据删除虽然成本高昂,但被认为是保证用于训练LLM的最高质量数据的关键步骤。
为此,利用MinHash和URL对数据集进行了全面的重复数据删除,这种重复数据删除程序对每种语言都是独立进行的。此外,将重复数据删除限制在经过数据清理程序后仍保留10万份以上文档的语言(即51.5%的语言),目的是在数据集中推广小语种。
其中:
在MinHash去重上,对于每种语言的数据集,首先应用MinHashLSH方法来过滤数据集中的相似文档。MinHashLSH是一种近似重复数据删除技术,它基于MinHash,为n-grams和Jac-card相似性提供了多个哈希函数。
位置敏感散列(LSH)通过关注最有可能相似的文档对来提高效率,利用MinHashLSH的Spark实现变体,使用5个词组和0.8的阈值来确定Jaccard相似度的相似文档。
为每种语言的数据集运行Min-HashLSH,尤其是对于英语、俄语、西班牙语和中文等数据量最大的语言,是数据集创建工作中计算成本最高的操作。
在基于URL的去重上,删除所有与数据集中其他文档共享相同URL的文档。这一步是必要的,可以解决相同文章的不同版本链接到相同的URL,但在发布过程中被更新或修改的情况,从而有效绕过近似重复数据删除步骤。
由于抓取错误,CC中某些文章的URL可能只显示其一般域。为了提高准确性,避免删除只包含其普通域名的URL。
在完成所有清理和重复数据删除步骤后,最终数据集由6.3万亿个token组成,涵盖167种语言。表1提供了CulturaX中前42种语言在每个处理阶段后的文档和token数量概览。
可以看出,数据清理流程可以大幅减少每种语言原始mC4和OSCAR数据集中的文档数量。移除的文档总数占初始文档的46.48%,这说明了该方法能够有效过滤多语言数据集中的噪声信息。
总结
本文首先介绍了《PDFTriage: Question Answering over Long, Structured Documents》提出了一种名为PDFTriage的方法,PDFTriage利用PDF的结构化元数据来实现更精确、更准确的文档问题解答方法本文将首先来谈谈这个工作。
其次,本文还介绍了《CulturaX: A Cleaned, Enormous, and Multilingual Dataset for Large Language Models in 167 Languages》这一工作,这个发布了一个为LLM开发量身定制的多语言数据集CulturaX,包含167种语言的6.3万亿个token是当前一个较新的工作,其数据处理步骤以及提到的一些工具,值得关注。
关于行业落地以及数据,这是一个十分有趣的话题。
参考文献
1、https://arxiv.org/pdf/2309.08872.pdf
2、https://arxiv.org/pdf/2309.09400.pdf
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。