- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
基于LLM+向量库的文档对话经验面
来自:AiGC面试宝典
宁静致远2023年09月28日23:12
一、基于LLM+向量库的文档对话基础面
1.1为什么大模型需要外挂(向量)知识库?
如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调
•思路:构建几十万量级的数据,然后利用这些数据对大模型进行微调,以将额外知识注入大模型
•优点:简单粗暴
•缺点:
i.这几十万量级的数据并不能很好的将额外知识注入大模型;
ii.训练成本昂贵。不仅需要多卡并行,还需要训练很多天;
既然大模型微调不是将外部知识注入大模型的最优方案,那是否有其它可行方案?
1.2.基于LLM+向量库的文档对话思路是怎么样?
1.加载文件
2.读取文本
3.文本分割
4.文本向量化
5.问句向量化
6.在文本向量中匹配出与问句向量最相似的topk个
7.匹配出的文本作为上下文和问题一起添加到prompt中
8.提交给LLM生成回答
版本一
版本一
1.3.基于LLM+向量库的文档对话核心技术是什么?
•基于LLM+向量库的文档对话核心技术:embedding
•思路:将用户知识库内容经过embedding存入向量知识库,然后用户每一次提问也会经过embedding,利
用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户
问题一起作为promt提交给LLM回答
1.4.基于LLM+向量库的文档对话prompt模板如何构建?
已知信息:
{context}
根据上述已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说“根据已
知信息无法回答该问题”或“没有提供足够的相关信息”,不允许在答案中添加编造成分,
答案请使用中文。
问题是:{question}
二、基于LLM+向量库的文档对话优化面
痛点1:文档切分粒度不好把控,既担心噪声太多又担心语义信息丢失
问题描述
问题1:如何让LLM简要、准确回答细粒度知识?
•举例及标答如下:
用户:2023年我国上半年的国内生产总值是多少?
LLM:根据文档,2023年的国民生产总值是593034亿元。
•需求分析:一是简要,不要有其他废话。二是准确,而不是随意编造。
问题2:如何让LLM回答出全面的粗粒度(跨段落)知识?
•举例及标答如下:
用户:根据文档内容,征信中心有几点声明?
LLM:根据文档内容,有三点声明,分别是:一、……;二……;三……。
•需求分析:
要实现语义级别的分割,而不是简单基于html或者pdf的换行符分割。
笔者发现目前的痛点是文档分割不够准确,导致模型有可能只回答了两点,而实际上是因为向量相似度召回的结
果是残缺的。
有人可能会问,那完全可以把切割粒度大一点,比如每10个段落一分。但这样显然不是最优的,因为召回片段太
大,噪声也就越多。LLM本来就有幻觉问题,回答得不会很精准(笔者实测也发现如此)。
所以说,我们的文档切片最好是按照语义切割。
解决方案
思想(原则)
基于LLM的文档对话架构分为两部分,先检索,后推理。重心在检索(推荐系统),推理交给LLM整合即可。
而检索部分要满足三点①尽可能提高召回率,②尽可能减少无关信息;③速度快。
将所有的文本组织成二级索引,第一级索引是[关键信息],第二级是[原始文本],二者一一映射。
检索部分只对关键信息做embedding,参与相似度计算,把召回结果映射的原始文本交给LLM。
•主要架构图如下:
如何构建关键信息?
首先从架构图可以看到,句子、段落、文章都要关键信息,如果为了效率考虑,可以不用对句子构建关键信息。
1.文章的切分及关键信息抽取
•关键信息:为各语义段的关键信息集合,或者是各个子标题语义扩充之后的集合(pdf多级标题识别及提取见
下一篇文章)
•语义切分方法1:利用NLP的篇章分析(discourseparsing)工具,提取出段落之间的主要关系,譬如上述
极端情况2展示的段落之间就有从属关系。把所有包含主从关系的段落合并
文档评论(0)