QAnything 1.4.1 中的文档解析

2024年初我们开源了QAnything,一个基于检索增强生成式应用(RAG)的本地知识库问答系统。对于本地知识库,QAnything支持多种格式的文档输入,允许用户上传包括PDF、图片、Word、PowerPoint、Excel、TXT,甚至音频等多种格式的数据。用户可以针对知识库进行互动问答,所有答案均能精准溯源,帮助用户确认问答的准确性。

四个月时间中,QAnything于Github的开源项目已经获得了近万颗星星,吸引了开发者社区的广泛关注,同时我们也收到了大量开发者的反馈。从提升整体问答准确性与用户体验角度出发,结合我们对目前RAG领域发展的理解。我们决定对QAnything SaaS平台中有关文档解析的部分技术进行开源,提升QAnything开源的效果。

在这里插入图片描述

在这篇博客中,我们将分享QAnything中文档解析的升级之路,包括我们对文档解析之于RAG的理解和认知,流程的设计思路,具体功能的实现路径,以及最终带来的问答效果的提升。

为什么是文档解析

随着最近半年中,一些长上下文LLM的出现和发展,很多RAG的经典问题(例如文档中的知识定位,也叫“大海捞针”)可以被很轻易的解决。一时针对RAG是否会被长上下文LLM取代的争论四起,一些悲观者甚至发出了“RAG已死”的言论。从目前的发展现状来看,RAG系统相比长上下文LLM最直接的优势普遍被认为还是计算成本,然而成本上的问题会随着时间的推移慢慢变得不是问题。

这么看来,RAG被淘汰是否只是个时间问题了?我们认为,RAG仍有两点优势是短时间内无法被替代的。其一是可以处理格式多样版式各异的文档数据,包括文档中的格式化区块(例如图片、表格、代码等等),并针对这些逻辑区块进行问答;其二是可以很直接的溯源,帮助用户快速从原文中验证答案的可靠性,从而提升整个问答系统的可信度。而这两点优势的发挥,都需要依赖一个强大的文档解析流程。

恰好,我们在文档解析领域具有一定的技术积累,做出过例如文档翻译和有道速读等成功的功能与产品,也于QAnything SaaS平台成功的应用了这项技术。

面向RAG的文档解析

早期的RAG系统或工具,都使用一套简单直接的解析方案。即直接提取文档中的所有文字信息,简单地根据等间距或文字空白对文字内容进行chunk切分,并将这些chunk转换为向量数据库用于语义检索。这样做对于一些简单场景是可行的,但我们在实践过程中发现了如下一些问题:(1)文字chunk语义的不完整(2)多栏文档阅读顺序错乱(3)非纯文本结构的区域格式错乱或直接丢失。

检索是RAG中相当重要的一个环节,一般是基于向量相似度排序来实现参考源的找回。假如文字chunk也即最小检索颗粒度中包括多条语义无关的内容,或者一些完整的语义被切分到不同的chunk中,都会导致语义向量的表示不准确,无法被特定语义的问题匹配到。因此这里的要求是尽量确保切分出的chunk内语义是完整的,同时尽量确保一些基本的连贯语义被切分到了同一个chunk中。

在这里插入图片描述

对于常见的多栏文档,例如IEEE会议论文,传统的OCR识别只能对文本行进行定位与识别,无法按照阅读顺序对文本行进行排序,无法确定正文与非正文内容。这会导致文本内容的顺序错乱,或者包含页眉页脚等非正文的无关信息,从而严重影响RAG系统的检索和问答效果。因此文档解析应具有确定文档阅读顺序的能力。

一些非纯文本结构的区域,例如图片若直接被丢弃则无法在LLM的回答中被带出,而表格则需要转化为LLM可以理解的结构化格式,才能进行针对性的问答。对于图片我们做成链接的形式存储(表格也可以转换为图片以同样的形式存储),如此便可在LLM的对话中被带出,同时可以在问答过程中更高效的溯源。而表格则需要解析为HTML或Markdown的格式,才可以针对表格内容进行提问。

综上所述,**一个面向RAG的文档解析流程应该具备有一定的版式分析能力,以及能解析表格这类具有特定结构的逻辑区域,我们以此来设计QAnything中文档解析的算法流程。**即先通过版式分析对文档中的逻辑区块进行区分与定位,这样做可以(1)确保纯文本部分只包括正文内容,将其以章节这种自然的形式切分确保其语义完整性,还有机会得到章节标题这类高阶的语义信息(2)得到配图和表格这类需要特殊处理的非纯文本区域的类别和位置(3)得到与阅读顺序一致的区域顺序。其后,我们再对非纯文本区域进行更进一步的处理。

在这里插入图片描述

我们**选择Markdown作为文档解析的统一输出格式,**因其设计初衷与面向RAG的文档解析完全一致:只关注内容而非格式。Markdown可以表示标题、正文、表格、超链接等内容,而更复杂的表格可以由内嵌HTML的形式表示。同时Markdown作为一种简洁易用的轻量级标注语言,充斥在互联网世界的各种数据中,其格式可以被市面主流的开源或商用LLM所理解,可以很好的完成基于表格等格式的对话任务。

具体技术点

版式分析

QAnything选择在切分chunk时,不是采用纯文本切分的方式,而是通过对文档的布局结构进行预测得到文字段落、图片、表格等。在QAnything切分chunk时会考虑文档的布局结构,同一语义的文字片段可以被切分到相同的chunk中,对于RAG流程中相关内容的准确召回有着极大的帮助。

在这里插入图片描述

具体的在QAnything中,我们沿用了目标识别的思路来进行文档布局分析,依托在有道文档翻译场景积累的海量数据,训练了一个多场景、高精度的布局分析模型,对文档的布局进行识别。在QAnything中,我们同时引入了一套版面恢复流程,融合版式分析的结果和OCR识别结果,将文档转换成markdown的形式进行输出,方便后续的chunk切分过程。

表格解析

QAnything中,我们发现用户的问答记录集中在对文档表格数据的提问上。为了提高问答系统对表格数据的理解和响应准确性,我们采用了LORE表结构识别模型。LORE模型的核心是逻辑位置回归网络,它将表格单元格的空间位置和逻辑位置结合在一起进行端到端建模和预测。LORE使用基于CNN的关键点分割网络提取视觉特征,通过两个回归头分别预测单元格的空间位置和逻辑位置。最终,LORE可以精确还原出整个表格的行列结构,并输出机器可解析的表示。

在这里插入图片描述

采用了表格解析方案后,QAnything的表格数据问答准确率得到了显著提升,特别是对于复杂的跨行跨列问题,极大增强了系统的实用性。

检索与问答的提升

我们以有道数字人白皮书和Qanything白皮书两个PDF文档为例,分别按照常规PDF解析方式和面向RAG的方式进行解析,最终进行问答对比,以比较两种解析方式的优劣。其中常规PDF解析将PDF文档中的文字直接进行提取,以固定窗口大小切分文字chunk;面向RAG的解析方式利用文档解析后生成的Markdown文档,按照语义章节对文档进行切分。

更新文档解析逻辑后的QAnything优势比较如下:

优势1:语义更加完整更加精准的召回,以得到更准确更加有条理的回答
Q1:QAnything的产品优势有哪些?

旧版回答:

Qanything的产品优势包括成本优势、效率提升、灵活应用、AI赋能和易用至上。具体来说,Qanything利用先进的数字技术,采用高效的数据采集与合成技术,能够快速打造出精准、神态灵动的虚拟形象,从而实现经济高效的个性化虚拟主播创建。同时,Qanything简化了创作流程,用户无需专业技术背景即可快速掌握,支持批量生产内容,显著提升了更新速度和工作效率。用户可以根据具体需要自行选择合成的片段、精确控制动作的起始位置以及插放节奏,赋予了用户充分的创作自主权,灵活适应不同场景的不同需求。此外,Qanything内置的大模型使得自动撰写播报文案成为可能,通过对大数据的学习和分析,能够即时生成各种热点话题的高质量播报文稿。最后,Qanything配备一套友好易用的视频剪辑工具,专为非专业用户设计,将原本复杂的后期处理过程变得极度简化,用户能够轻松完成整套视频制作流程。

新版回答:

QAnything问答系统的优势包括以下几点:
1、支持任意格式的本地知识库: QAnything可以处理多种格式的数据,包括PDF、Word、PPT、TXT、图片、网页链接、数据库等,使用户能够方便地管理和使用各种类型的知识。
2、基于行业专属大模型的自然语言处理技术:QAnything利用OCR技术对各种类型的数据进行结构化处理,并调用大模型的自然语言处理能力,实现对数据的智能化分析和理解,包括实体识别、关系提取、语义分析、总结等。
3、多种功能支持:QAnything提供文件管理、模型训练、模型验证、多轮问答、下载等多种功能,帮助用户实现准确、快速、靠谱的业务知识问答体验。
4、提高信息获取效率:相比以前的FAQ、ES等模式,文档问答技术进一步提高了处理效率和准确性,让用户更快速、更方便地获取所需信息。

总之,QAnything问答系统通过支持任意格式的本地知识库、基于行业专属大模型的自然语言处理技术、多种功能支持和提高信息获取效率等优势,为企业级用户提供了准确、快速、靠谱的业务知识问答体验。

优势2:可以针对表格进行问答,可以对表格中的内容进行精准定位
Q2:数字人部署8G内存可以吗?

(注:参考文档中有如下部分内容

在这里插入图片描述

旧版回答:
根据参考信息中的配置需求,有道数字人的推荐硬件配置环境中没有明确提及内存要求。因此,无法确定数字人部署是否可以使用8GB内存。建议参考有关文档或联系有道数字人的官方支持团队以获取更准确的信息。

新版回答:
根据参考信息中的配置需求,推荐的内存模块为16G+,所以8G内存可能不够满足数字人部署的要求。

Q3:embedding模型中bce-embedding和bce-rerank一起用的话,各项指标是多少?

        (注:参考文档中有如下部分内容

在这里插入图片描述

旧版回答:
bce-embedding和bce-rerank是embedding模型中的两个组件。具体的指标取决于具体的应用场景和任务。一般来说, bce-embedding用于生成语义向量,可以通过先进的embedding方法 来提取文本的深层含义,从而提高搜索结果的相关性和问答匹配度。bce-rerank则用于对搜索结果进行重排序,以进一步提高搜索的准确性和精度。
关于具体的指标,可以根据实际情况进行评估和衡量。常见的指标包括准确率、召回率、F1值等。另外,还可以根据具体任务的需求,如翻译、摘要和问答等,来评估模型的性能和效果。
总之,bce-embedding和bce-rerank的组合可以提高embedding模型在语义搜索和问答系统中的效果,具体的指标取决于具体的应用场景和任务需求。

新版回答:
根据参考信息中的数据,当使用bce-embedding时,各项指标如下:

  • WithoutReranker: 85.91/62.36
  • CohereRerank: 91.25/69.38
  • bge-reranker-large: 91.80/71.13
  • bce-reranker-base_v1: 93.46/77.02
    这些指标表示了使用bce-embedding和bce-rerank模型时的命中率(hit rate)和平均倒排(mean reciprocal rank)的表现为93.46/77.02 。

优势3:可以解析文档中的配图这类非文本信息,并在回答中给出

Q4:交互型数字人的特点是什么?

新版回答:

交互型数字人的产品特点包括:

  1. 多终端支持:支持多种终端设备连接,如PC、平板、手机、大屏幕等,实现线上线下一体化解决方式。
    在这里插入图片描述

在这里插入图片描述

  1. 支持离线模式:可以在线下终端进行批量离线部署,无需考虑宽带、GPU等硬件要求。
  2. 接入AI大脑:支持接入AI问答大模型Anything和子曰大模型,能够从多样化的知识源中提取精准答案,实现业务知识精准回答。
  3. 低运营成本:数字人交互场景即插即用,实施周期短,涉及的审批部门少,自带问答大模型,场景落地快。
    总之,交互型数字人具有多终端支持、离线模式、接入AI大脑和低运营成本等特点。
    在这里插入图片描述

QAnything 开源版已经升级到了1.4.1:

https://github.com/netease-youdao/QAnything/releases/tag/v1.4.1

在这里插入图片描述

访问 https://qanything.ai 可以直接体验商业版qanything.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISCC 2024|Misc

FunZip ISCC{xoMjL8NuYRRb} Number_is_the_key ISCC{Sanoyq6qGIPF} 精装四合一 四张图片尾部都存在多余数据,把多余数据分别提取出来保存成文件,未发现规律。根据提示,预计需要将四部分多余数据进行合并。提取四个部分前16个字节&#xff0…

Linux学习(十二)-- 用户管理与用户组管理、su与exit命令、sudo命令

目录 1. 用户管理 注: 以下命令需root用户执行 1.1 创建用户 1.2 删除用户 1.3 查看用户所属组 1.4 修改用户所属组 2.用户组管理 注: 以下命令需root用户执行 2.1 创建用户组 2.2 删除用户组 拓展: 3. su命令与exit命令 4. sudo…

Python高效数据分析的综合复习指南【时间处理与机器学习】

五、时间处理 一、时间戳-----Timestamp类型 方法1:使用Timestamp创建 pandas.Timestamp(ts_input, freqNone, tzNone, unitNone, yearNone, monthNone, dayNone, hourNone, minuteNone, secondNone, microsecondNone, tzinfoNone, offsetNone) import pandas a…

26计算机操作系统408考研-操作系统进程与线程篇章(三)

操作系统进程与线程篇章 ` 文章目录 操作系统进程与线程篇章前言一、进程概念进程控制块进程创建进程终止进程的阻塞和唤醒进程唤醒进程挂起和激活线程多线程线程实现与线程模型总结互斥和同步并发原理硬件同步信号量机制信号量的应用管程经典同步问题消息传递前言 一、进程概…

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候,我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍,还可能错过重要的机会。 但是现在,有一个神奇的工具——个微管理系统,可以帮助我们轻松应对这个问题 ,实现微信自动回复。 首…

Mujava 工具的简单使用

首先下载openjava.jar和mujava.jar,以及自己手写一个mujava.config指向存放mujava的目录,并将这些文件放在mujava目录下。此时,基本的mujava环境就搭建好了。 分别创建src(存放源码文件)、classes(存放源码…

每日一题 求和

1.题目解析 求和_牛客题霸_牛客网 (nowcoder.com) 这一题,主要描述的就是求满足和为m的子序列,对与子序列的问题可以使用决策树。 2.思路分析 决策树如下图所示: 递归结束条件: 当当前和 sum 等于目标和 m 时,说明找到了一个满…

如何在华为手机上恢复已删除的视频[4种解决方案]

概括 在数字媒体时代,智能手机已成为我们的个人金库,存储以视频形式捕捉的珍贵记忆。然而,意外删除这些珍贵的文件可能会是一次令人心痛的经历。对于华为手机用户来说,由于删除或其他意外导致视频丢失尤其令人痛苦。但不用担心&a…

Python 拼图游戏

拼图游戏(puzzle)是一种常见的益智游戏,玩家通过拖动图块来正确拼接成完整的图片。 由一张原图,分割成图块,拼图块的大小将会根据行列数自动调整,然后随机打乱,玩家通过拖拽图块,最后复原原图。 &#x1f…

idea使用鼠标滚轮进行字体大小缩放

idea使用鼠标滚轮进行字体大小缩放 使用快捷键CtrlAltS进入到设置页面 在左上角搜索框输入“increase”,在左侧的Keymap中右击“Increase Fort Size”,点击“add mouse shortcut”,然后录入我们要设置的快捷键,比如我是点击ctrl鼠…

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

AtCoder Beginner Contest 354 (ABCDEFG题)视频讲解

2024年5月19日补充G题。 A - Exponential Plant Problem Statement Takahashi is growing a plant. Its height at the time of germination is 0 c m 0\,\mathrm{cm} 0cm. Considering the day of germination as day 0 0 0, its height increases by 2 i c m 2^i\,\mat…

看一遍就理解:MVCC原理详解

介绍 MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于实现数据库并发访问控制的机制。它允许多个用户同时读写同一数据项,从而提高了数据库在高并发环境下的性能和响应速度。以下是具体介绍: 基本…

Python代码注释的艺术与智慧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:注释的必要性 二、注释的误区:不是越多越好 过度注释的问题…

服务器端口号怎么看?如何查看服务器端口号呢?有哪些需要注意的?

简单来说,端口号就是计算机与外界通讯交流的出口,每个端口都有不同的编号,也就是“端口号”。它们是唯一的,用于标识不同的服务和应用程序。通过端口号,我们可以知道哪些服务正在运行,以及如何与它们进行通…

【Linux系统编程】进程概念、进程排队、进程标识符、进程状态

目录 什么是进程? 浅谈进程排队 简述进程属性 进程属性之进程标识符 进程操作之进程创建 初识fork fork返回值 原理角度理解fork fork的应用 进程属性之进程状态 再谈进程排队 进程状态 运行状态 阻塞状态 挂起状态 Linux下的进程状态 “R”(运行状…

洗地机哪个牌子最好用?2024洗地机排行榜

随着人们生活水平的提升,智能清洁家电已经成为日常生活中的必需品。如今的清洁家电市场上,洗地机、吸尘器和扫地机器人等设备各有其独特的功能和优势。洗地机结合了扫、拖、吸和自清洁等多种功能,不仅可以处理干湿垃圾,还能高效清…

工业路由器在新能源数字化中的应用:重塑能源行业的未来

随着全球对可再生能源和能源效率的追求日益加强,新能源数字化已成为推动行业发展的关键因素。在这一变革的浪潮中,工业路由器以其卓越的性能和独特的功能,成为新能源数字化不可或缺的核心组件。本文将深入探讨工业路由器在新能源数字化中的应…

使用Golang开发一个用于批量删除文件的命令行程序

核心代码 package cmdimport ("fmt""zdpgo_cobra""zdpgo_file" )func init() {rootCmd.AddCommand(deleteFileCmd)deleteFileCmd.Flags().StringVarP(&dirPath, "dir", "d", ".", "指定要删除的目录&qu…

【C语言】整型提升与char取值范围

整型提升介绍 C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达式中字符、短整型操作数在使用前被转换为普通整型。而这个过程是悄悄发生的。 整型提升的意义: 表达式的整型运算要在CPU…