基于LLM的垂直领域问答方案
基于LLM的垂直领域问答方案
- 垂直领域问答
- 传统的方案
- 基于LLM的方案
- RAG(Retrieval-Augmented Generation)
- 基于知识体系
- 综合对比
垂直领域问答
特点:
- 问答内容通常不存在于通用语料
- 回答内容对准确性要求较高,召回要求相对较低(可以转人工处理)
- 扩展性和可控性(可以根据需求,增、删、改特定问题的回答内容、或以特定形式进行回复处理、如进入剧本、非文本回复等)
- 需要确切的评价方式
传统的方案
方案: 通过文本匹配知识库问题,找到最终答案。
方案如图:
相似度计算方式: 目前较为常用的是基于神经网络的文本转向量
,用向量相似度代表文本相似度。
基于LLM的方案
简介: 利用LLM的生成能力,直接生成回复。
前提条件: 需要使用事先准备的QA数据,对LLM进行fine-tune
缺点:
1.fine-tune的困难(算力需求、数据需求)
2.fine-tune带来的模型泛用性下降或消失
3.生成答案不完全可控(不正常回复 bad 误导性回复 worse)
4.不易调整(增加一条新知识、撤掉某条旧知识、某条知识答案要修改)
5.不易评价效果(所有字正确?大部分字正确?有时候个别字错误就会导致语义完全不同,有用的方法:BELU、Rouge)
RAG(Retrieval-Augmented Generation)
简介: 下面是常见的实现流程图,简单来说就是:段落召回+阅读理解
核心步骤:
- 知识文档切分
- 根据query召回相关段落context
- context+query组成LLM的输入
提示词如下:
prompt = “”“基于以下已知信息,简洁和专业的来回答用户的问题。 如果无法从中得到答案,请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”,不允许在答案中添加编造成分,答案请使用中文。
已知内容:
{context}
问题:
{question}”“”
注意: 召回部分
可以根据情况做,不必完全依赖向量化
;随着LLM能力的增强,可以接受的prompt长度越来越长(claude-100k等),对于段落召回的要求会越来越低,所以内容都可以放在输入里。只要LLM的能力够强,不做fine-tune也能直接完成这个流程。
缺点:
- 对基础LLM的能力要求比较高
- 受召回算法限制,如果召回时正确答案已经被舍弃,LLM无法挽回
- 生成结果不完全可控
基于知识体系
简介: 将知识梳理成一个树状的体系,叶节点即为原有的QA对,通过这样的体系最后定位到具体的某一个问题上,找到答案。
如图:
举例:
-
对于每一层级知识体系,设计prompt让LLM做选择题,通过正则解析答案。
如:
prompt = “”“你是一个保险公司问答机器人,请根据用户输入的问题,判断该问题属于下列的哪类问题,输出类别序号:
1.个人保单业务相关问题
2.金管家操作问题
3.保险相关名词解释问题
用户问题:
{question}”“” -
通过多次重复这一过程,在“知识树”上进行多次选择,找到最终对应的问题,答案并不是生成的,而是
根据序号找到对应问题,再给出知识库中问题的标准回答
。 -
在后面的子节点上,分类不一定是交由大模型去进行判断,可用交由小模型进行判断,从而提高效率。
在RAG的生成答案的评价指标上,没有太好的办法,首先,不相同的句子,其结果都有可能是对的,而相同的句子,可能因为关键的某个字,是/否,就会导致意思完全不同。所以评价是比较困难的。