在打造基于大语言模型(LLM)+文档检索的问答系统中,财经研报类文档是最具挑战的场景之一。它包含图文混排、精细定位需求(页码、文件名)、问题措辞高度多样化等一系列复杂性。
下面的内容是大模型辅助整理的:
本项目围绕一个目标:给定一个用户问题,从数百份PDF财经报告中找出相关信息并生成准确答案,并给出其出处(文件名和页码),通过逐步优化 chunk 策略、向量检索和 LLM 提示工程

在train数据集上的得分为0.663,测试集目前为0.29679(排名第三)

更新:加入了文档来源的大模型输出和元数据的比对,切换大模型为Qwen3-32B,目前分数:0.36493(排名第一)

在这里插入图片描述

评分标准分三部分,总分 1:

维度 权重 说明
文件名匹配度 0.25 答案中的文件名是否与参考答案一致
页码匹配度 0.25 答案中页码是否准确
答案内容相似度 0.5 使用字符级 Jaccard 相似度度量回答文本差异

🏁 初始方案:页面粒度chunk(Baseline)
做法:
每一页作为一个chunk

用FAISS构建向量索引

每次检索返回最相似的几页

问题:
粒度太大,LLM难以定位具体内容

过度信息干扰答案质量

无法定位到确切页码和文件名

📉 得分:0.002

🔧 改进一:递归Chunk + 直接向量检索
每页文本递归分块

每个chunk保留其来源元数据 {filename, page_number}

用文本嵌入直接构建向量索引

📈 得分显著提升

🧩 页码匹配精度优化
一个核心挑战是:如何让LLM生成答案时,引用准确的页码?

采取的策略:

从文档解析阶段开始,全程保留元数据:
每一段文本、每张图片都保留 {filename, page_number}

在提示中引导 LLM 输出来源信息

请用如下格式回答:
{“answer”: “…”, “filename”: “…”, “page”: …}
🔁 检索优化策略
多路召回:
双路召回:将检索向量划分为两种策略:全文语义 vs. 精准短句(如问句特征)

重排(Re-ranking)策略:
采用 RRF(Reciprocal Rank Fusion):

多路召回的结果融合排序

提高相关 chunk 的综合得分,提升命中率

🔍 LLM输出页码不准的问题
即使检索相关 chunk 的元数据正确,LLM有时也会:

忽略页码

捏造页码或文件名

输出格式错误(影响JSON解析)

解决:
构建严格提示模板,限制输出格式

增加后处理逻辑,验证输出格式合法性,出错回退使用 chunk 元数据

引入 _safe_parse() 工具,对返回结果进行强健解析

🧱 持续挑战

  1. 格式输出不稳定
    LLM容易输出错 JSON,或 hallucinate 来源信息
    强化提示模板
    后处理校验修复

  2. 问题表达方式高度自由
    用户问法与文档表达方式差距大

优化嵌入模型选择(支持中文财经语料)

其实分数还可以再高,因为现在的文件名是提取的大模型的回答,只用8B的大模型,会有很多错误,比如本来正确的名字输出为繁体,或者汉字输出为字母等,所以这个地方需要大模型+元数据同时判断,还没有用mineru或者其他的文档结构化转换工具,现在分块方法还是太朴素了,也还没用引入多模态(表格解析和图像解析)

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

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

相关文章

LeetCood算法题~水果成篮

水果成篮 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水…

【Lua】题目小练8

-- 题目 1&#xff1a;定义一个类 Person-- 属性&#xff1a;name、age&#xff0c;其中 age 默认是 0&#xff0c;不能小于 0。-- 方法&#xff1a;introduce()&#xff0c;输出 "My name is <name>, I am <age> years old."-- 要求使用封装思想&#x…

SAP PP CK466

原因 作业价格没有维护 解决方案 KP26

如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题 摘要 在使用 PyCharm 进行深度学习项目开发时&#xff0c;常常需要通过 pip install keras 来安装 Keras 库。但有时即便命令执行成功&#xff0c…

人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总

2024年 2024年12月29日 【通知】 1、主站导出文档功能优化升级&#xff0c;新增支持了纯文本WORD导出功能&#xff0c;支持使用WPS软件打开 注&#xff1a;原来的富文本WORD不支持使用WPS打开&#xff0c;只支持系统自带的WORD软件打开&#xff0c;比如Microsoft Office Word 2…

UWB实操:使用UCI CMD测距;UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。

使用UCI CMD测距; UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。根据 FiRa_UCI_Technical_Specification,我们可以分析并组织测距cmd 例如: Fira2.0 1v1 发起 DSTWR 创建测距session:210000052222222200 配置测距session: 2103001F222…

从AUTOSAR角度理解CAN以及CANFD

一、AUTOSAR对CAN和CAN FD的基础定位 CAN&#xff1a;基于传统CAN 2.0B协议&#xff0c;是AUTOSAR早期版本&#xff08;如4.0.3及之前&#xff09;的核心车载通信协议&#xff0c;支持最大8字节 payload&#xff0c;仲裁段波特率通常≤1Mbps&#xff0c;适用于低带宽、高实时性…

第27章:服务部署与容器化

1. 课程引言 在前面的章节中&#xff0c;我们已经完成了电商项目核心服务的开发。然而&#xff0c;开发完成只是项目生命周期的一部分&#xff0c;如何将这些服务高效、可靠地部署到生产环境&#xff0c;是决定项目成败的关键一步。本章将聚焦于服务的部署&#xff0c;重点介绍…

力扣148:排序链表

力扣148:排序链表题目思路代码题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 思路 当我们第一眼看见这道题时心中其实是有思路的&#xff0c;我们不想这是个链表就当它是一个整型数组。那么自然而然就会想到各种各样的排序方法&#xf…

基于k8s环境下的pulsar常用命令(下)

#作者&#xff1a;Unstopabler 文章目录permissionSchemapermission pulsar的权限控制是在namespace级别的 kubectl exec pulsar-toolset-0 -n pulsar – bin/pulsar-admin namespaces grant-permission mytenant/mynamespace –actions produce,consume –role admin10 注…

2.4 组件通信

Props 和 Events&#xff08;父子组件通信&#xff09;Props&#xff1a;父组件向子组件传递数据使用 props。子组件通过声明 props 来接收来自父组件的数据。<!-- 父组件 --> <template><ChildComponent :message"parentMessage" /> </templat…

PCL学习之路-基础知识-(一)

文章目录1.西门子S7系列PLC类型划分(1).大型PLC&#xff1a;S7-400(2).中型PLC&#xff1a;S7-300(3).小型PLC&#xff1a;S7-200系列2.西门子S7外形结构(1).总览&#xff1a;PLC的“器官”分工逻辑3.输出电路(1).小型继电器输出形式(2).大功率晶体管/场效应管输出形式(3).双向…

leetcode654:最大二叉树(递归与单调栈双解法)

文章目录一、 题目描述二、 核心思路&#xff1a;分而治之与递归构造三、代码实现与深度解析四、 关键点与复杂度分析五、拓展解法单调栈解法两种解法对比LeetCode 654. 最大二叉树&#xff0c;【难度&#xff1a;中等&#xff1b;通过率&#xff1a;82.6%】&#xff0c;这道题…

Python 循环语法详解

在编程中&#xff0c;循环是一种非常常见的控制结构。很多时候&#xff0c;我们需要重复做一些事情&#xff0c;比如遍历列表、处理数据、尝试直到成功等。这时候&#xff0c;就离不开循环了。Python 提供了两种主要的循环结构&#xff1a;for 循环 和 while 循环。本篇文章会从…

一个小巧神奇的 USB数据线检测仪

一个小巧的数据线检测仪&#xff0c;检测各种USB数据线是否损坏、通断&#xff0c;TYPE_C、MICRO_B、苹果线、烧录线、网线都可检测。嵌入式开发者的称手工具。 这个是我个人制作的&#xff0c;SMT和连接器比较贵&#xff0c;特别是24PIN的C口连接器&#xff0c;我挂在黄色小鱼…

37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action

在第二部分&#xff08;微服务基础工具与技术&#xff09;中我们讲解了GitHub Action的相关知识&#xff0c;那么在这一节中&#xff0c;我们将为已有的微服务增加GitHub Action的支持。 一、什么是GitHub Action 虽然前面已经介绍过GitHub Action的相关知识&#xff0c;但这里…

ROS2 通过 命令行 发布速度控制指令 控制 麦克娜姆轮

在 ROS2 中&#xff0c;要通过命令行发布速度控制指令来控制麦克娜姆轮机器人&#xff0c;你需要知道机器人所使用的速度控制话题和消息类型。通常麦克娜姆轮机器人使用geometry_msgs/Twist消息类型来接收速度指令。 以下是通过命令行发布速度控制指令的方法&#xff1a; 首先确…

多层Model更新多层ListView

一、总体架构QML (三层 ListView)└─ C 单例 DataCenter (QQmlContext 注册)├─ L1Model (一级节点)│ └─ 内部持有 QList<L2Model*>│ └─ L2Model (二级节点)│ └─ 内部持有 QList<L3Model*>│ └─ L3Model (三级节…

Git基础操作教程

本文目的是掌握Git基础操作教程一、Git简介Git&#xff1a;分布式版本控制系统&#xff0c;使用仓库(Repository)来记录文件的变化最流行的版本控制系统有两种&#xff1a;集中式&#xff08;SVN&#xff09;、分布式&#xff08;Git&#xff09;二、Git操作1.创建仓库仓库(Rep…

Android 之 Kotlin

变量变量的声明Kotlin使用var&#xff0c;val来声明变量&#xff0c;注意&#xff1a;Kotlin不再需要;来结尾var 可变变量&#xff0c;对应java的非final变量var b 1val不可变变量&#xff0c;对应java的final变量val a 1两种变量并未声明类型&#xff0c;这是因为Kotlin存在…