使用LLM进行领域问答的第4种思路Gorilla

专业领域问答的几种思路

专业领域问答是让LLM回答专业的知识,这些知识一般企业私有的知识。现提供如下思路,总体方案就是:方案1就是让LLM学会这些知识,方案2就是LLM根据用户提供的参考知识回答。

1.训练领域内大语言模型

这个需要自己准备通用数据,领域内数据,指令数据,自己先预训练大语言模型或者直接根据领域内指令数据微调。

优点是:利用LLM学到的知识回答,回答更流畅,方案简洁。

缺点:自己准备好领域内数据,构造领域内的指令数据,全量微调对硬件要求较高。

2.检索到参考知识,然后让大语言模型根据参考知识回答

这个包含不同的实现方式,最简单的实现方式就是通过关键字搜索。

1)根据用户问题中的关键字搜索参考资料,然后让大语言模型回答。例如ES搜索工具,或正则表达式等。

缺点是:需要提取出实体,然后搜索。搜索结果可能不准。搜索结果可能和问题不相关。给LLM提供和问题不相关的参考,会让LLM回答性能下降。不如不提供。

2)使用很火的Embedding形式,借助向量数据库。事先准备好各种参考资料,合理分片,使用各种Embedding模型,把文本转化成向量,存储到向量数据库。当用户提问时,问题先进行向量化,根据问题向量对向量数据库查询。找出参考资料。提供给LLM进行回答。

缺点是:注意问题和参考资料之间的异构性,向量模型要针对性的训练效果会比较好。还有就是向量数据库的粒度,多长的,什么类型的参考资料和问题息息相关。针对问题设计向量数据库的参考资料。问题向量和参考资料的向量的相似度的阈值和应该返回多少个参考资料,这都是超参数。

3)Agent的使用,例如AutoGPT和LangChain中的Agent,学会使用工具,把用户的问题转换成工具的调用,根据工具的搜索结果,返回给LLM作为参考。

缺点是:LLM存在幻想的情况,是不可控的。一般使用工具会涉及到工具的选择和工具的调用参数,例如函数的选择和参数,或API的选择和参数等,可以提供这些工具的描述,让LLM根据问题选择这些合适的工具,然后让LLM根据问题提取合适的参数。由于中间需要多次调用LLM,每一步都需要LLM格式化输出,例如json格式,输出格式和问题的理解,工具的理解都存在不可控问题。链条过长导致回答失败概率较大。

4)Gorilla,直接把问题转换成工具和参数调用。文章来自伯克利大学,Gorilla: Large Language Model Connected with Massive APIs。文章是用的LLaMA-7B模型做的base模型,然后使用huggingface的925个API作为工具。对每个API的构造约了10个问题样本。共构造了11000个{问题,API}对。不管简单问题还是复杂问题,都直接把问题通过LLM变成函数和参数,然后调用后得到的结果作为LLM的参考。

缺点是:把问题直接转成函数和参数,需要事先准备好大量的问题和API样本对。如果问题和API有变更,重新训练模型可能更好。


使用LLM进行领域问答的第4种思路Gorilla
https://johnson7788.github.io/2023/07/05/%E4%BD%BF%E7%94%A8LLM%E8%BF%9B%E8%A1%8C%E9%A2%86%E5%9F%9F%E9%97%AE%E7%AD%94%E7%9A%84%E7%AC%AC4%E7%A7%8D%E6%80%9D%E8%B7%AFGorilla/
作者
Johnson
发布于
2023年7月5日
许可协议