RAG(Retrieval-Augmented Generation)与Finetune
传统大模型有以下几点问题:
为了解决以上诸多问题,有很多尝试方案。例如通过微调模型(Finetune)来适应专业领域知识,但这种方式对技术要求较高,属于计算密集型,很难灵活使用。
2020 年Lewis等人,在知识密集型 NLP 任务中,提出了一种更灵活的技术,称为检索增强生成(RAG)[参考论文:https://arxiv.org/abs/2005.11401]。在本文中,研究人员将生成模型与检索器模块相结合,以提供来自外部知识源的附加信息,并且这些信息可以很方便的进行更新维护。
即在大模型外部增加了一个知识库,大模型专门负责知识推理。
参数知识:神经网络只存储在训练期间学习到的知识。
非参数知识:知识存储在外部知识库中,例如向量知识库
下载词向量模型sentence Transformer
克隆几个仓库,利用其中的文本文档作为知识库数据
利用langchain将不同格式的文本文档转化为字符串
利用sentence transformer将分块后的文档转化为词向量,并最终将其持久化保存
自定义一个InternLM的LLM类,继承LangChain的LLM类。重写其__init__()
和_call_()
函数。在init中加载本地LLM模型,在call中调用模型的chat方法,传入prompt,返回response。