您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[国金证券]:量化漫谈系列之六:为大模型插上翅膀——ChatGLM部署与Langchain知识库挂载 - 发现报告
当前位置:首页/其他报告/报告详情/

量化漫谈系列之六:为大模型插上翅膀——ChatGLM部署与Langchain知识库挂载

2023-09-09高智威国金证券王***
量化漫谈系列之六:为大模型插上翅膀——ChatGLM部署与Langchain知识库挂载

自去年底ChatGPT发布以来,大模型展现出的能力受到市场的广泛关注,我们基于ChatGPT的系列量化研究也充分说明其在投研领域的重要作用。不过ChatGPT在实际使用中依然存在专业度不够、数据隐私性得不到保证、信息及时性不够等问题。 我们推荐使用Langchain这一开源的大模型框架以提升模型的实际使用体验,该框架应用领域广泛,可以基于本地知识库进行问答,接受多种不同文档形式的输入。其基本原理是将本地的不同文档进行切分后存入向量数据库中,在用户提问时进行相似性搜索,结合最相似性的文档段落放入提示模板中对大语言模型进行提问,从而得到更有专业性的回答结果。此外,Langchain的强大的Chain和Agent模块能够实现任务识别、任务拆解、工具选择&使用、完成任务后的回答整理,对于大模型和知识库的使用起到了锦上添花的作用。 随着ChatGPT推出之后受到的广泛关注,国内外众多互联网、科技类公司也纷纷推出了自己的大语言模型。美国的互联网科技公司在开发出LLaMA模型后,众多高校以该模型为基座训练出了Alpaca和Vicuna等模型。国内有阿里云推出的Qwen,商汤科技、上海AI实验室联合多个高校开发出了InternLM,清华大学与智谱AI训练的ChatGLM等模型都有非常不错的表现。在OpenCompass的中文多维度综合能力测评中,众多国产开源大模型已经展现出了较强的综合实力。 我们选择关注度较高的ChatGLM2-6B模型进行部署,该模型在量化后可在一些消费级显卡上进行推理,同时也有不错的表现。同时搭配Langchain的框架对过往的行业研报、金工研报、宏观及策略研报进行向量化后构建对应的知识库,我们分别针对新知识掌握、多文本总结概括和信息搜集三大应用场景进行测试,发现ChatGLM2整体给出了较高的回 复质量。该流程实现自动化后,可以将我们关心的日常资讯、私有数据、最新研报等内容自动更新加载进入知识库,从而使模型使用更佳高效便捷。 1、大语言模型基于上下文预测进行回答,不能保证回答准确性,由此可能产生误导影响用户判断。 2、Langchain框架效果与挂载知识库质量、提示模板设计、大语言模型能力高度相关,若相关配置不到位,可能会导致回答效果不及预期。 内容目录 一、ChatGPT等通用大语言模型使用现状4 二、Langchain知识库框架介绍6 2.1Langchain知识库原理介绍6 2.2Langchain知识库主要模块介绍及应用案例7 三、主流开源大语言模型对比10 3.1部分大语言模型介绍10 3.2大语言模型评价指标介绍及对比10 3.3大语言模型部署的显卡消耗12 四、ChatGLM2模型+Langchain知识库挂载12 4.1模型部署12 4.2Langchain知识库挂载及应用案例13 总结14 风险提示15 图表目录 图表1:ChatGPT行业打分回答示例4 图表2:ChatGPT分析OPEC新闻对于原油期货价格的影响回答示例4 图表3:ChatGPT金融领域专业知识问答示例5 图表4:ChatGPT最新资讯问答示例5 图表5:Langchain挂载本地知识库框架介绍6 图表6:知识库挂载问答示例17 图表7:知识库挂载问答示例27 图表8:Langchain常用模块7 图表9:主流Embedding模型介绍8 图表10:Langchain主要模块应用案例1-联网搜索8 图表11:向量化研报文本节选8 图表12:Langchain主要模块应用案例2-ReAct信息提取&计算9 图表13:部分大语言模型基本介绍(排名不分先后)10 图表14:SuperCLUE琅琊榜用户匿名测评示例11 图表15:OpenCompass主要模型中文排名11 图表16:OpenCompass中文多维度能力评测12 图表17:OpenCompass英文多维度能力评测12 图表18:模型参数量与显存消耗对应关系12 图表19:ChatGLM2-6B部署部分代码示例13 图表20:ChatGLM2-6B与Langchain挂载应用案例113 图表21:ChatGLM2-6B与Langchain挂载应用案例214 图表22:ChatGLM2-6B与Langchain挂载应用案例314 自去年底ChatGPT发布以来,大语言模型展现出的综合能力吸引了投资者的广泛关注。我们团队在前期的多篇报告中也已经将ChatGPT成功应用在量化策略的构建上,在《Alpha掘金系列之五:如何利用ChatGPT挖掘高频选股因子?》中,我们利用ChatGPT训练语料的丰富性和其强大的归纳整理能力,构建出了比较有效的高频选股因子。 图表1:ChatGPT行业打分回答示例 来源:ChatGPT,《Beta猎手系列之四:如何利用ChatGPT解析卖方策略观点并构建行业轮动策略?》,国金证券研究所 在《Beta猎手系列之四:如何利用ChatGPT解析卖方策略观点并构建行业轮动策略?》中,我们利用ChatGPT的情感识别和分析能力,对于多家卖方策略团队的月度行业观点打分,构建的行业轮动模型取得不错的超额收益。在《CTA金点子系列之一:基于ChatGPT新闻情感分析的原油期货策略》中,我们将OPEC新闻应用在原油期货择时上,该模型的逻辑推理能力能够准确识别新闻事件对于相关标的价格走势的影响。 图表2:ChatGPT分析OPEC新闻对于原油期货价格的影响回答示例 来源:ChatGPT,《CTA金点子系列之一:基于ChatGPT新闻情感分析的原油期货策略》,国金证券研究所 不过在使用过程中,我们发现ChatGPT依然存在一些短版影响我们的使用体验。 专业知识匮乏:ChatGPT作为一个通用的大语言模型,其训练语料涵盖各个领域,但都未能做到足够专业。在进行投研相关知识的问答时,背景知识的缺乏可能会影响模型的输出结果质量,同时也会加大模型使用的门槛。 图表3:ChatGPT金融领域专业知识问答示例 来源:ChatGPT,国金证券研究所 其次,由于ChatGPT的训练数据截至2021年9月,对于之后的新闻事件无法给出相应的回答。且新信息可能产生的原有逻辑变化也无法准确反映到模型的回答中,这对于一些需要结合最新信息进行判断的使用场景而言实用性受限。 图表4:ChatGPT最新资讯问答示例 来源:ChatGPT,国金证券研究所 另外,众多投资者同样比较担心数据隐私泄露的风险。虽然ChatGPT官方明确提出不会将用户的问答数据泄露,但根据美国商业媒体BusinessInsider的报道,微软与 亚马逊的相关人员曾警告员工不要与ChatGPT分享机密信息,“因为你的输入信息可能会被用作ChatGPT进一步迭代的训练数据”。这一问题对于投研领域而言其实更加重要,会在一定程度上削弱投资者对于ChatGPT深度使用的兴趣。 因此,面对以上痛点问题,我们在本篇报告中提供了一整套完备的解决方案。使用ChatGLM等开源大语言模型进行本地化部署,以保证数据安全性。同时使用Langchain框架挂载本地知识库,从而提升模型的专业能力、及时性和便捷性。 2.1Langchain知识库原理介绍 LangChain是一个围绕大语言模型应用而开发的开源框架,可以将LLM模型、向量数据库、交互层Prompt、外部知识、外部工具整合到一起,允许用户围绕大语言模型快速建立管道和应用程序,直接与ChatGPT或Huggingface中的其他LLM相连,从而在一定程度上弥补模型本身的缺陷,提升用户的使用效率。 对于投研实际应用场景而言,最重要的还是其自由挂载本地知识库的能力,Langchain可以很好地支持用户针对本地文档、数据进行总结、问答。在现有的模型、插件中,用户可以通过上传一篇PDF文档的形式令LLM针对这篇文档进行回答,典型的应用包括可以实现与ChatPDF,AskYourPDF插件等。但这类应用同样面临上传操作繁琐、需要每篇逐个上传的问题。而使用Langchain这一框架,我们可以省去上传文档的步骤,直接将批量文本处理好后在本地进行提问,能够大幅提升使用效率。 图表5:Langchain挂载本地知识库框架介绍 来源:Langchain,国金证券研究所 如上图中框架结构,用户在使用前需要先将本地各类文件格式进行读取并简单清洗处理,由于受到LLM最大输入token的限制,我们需要根据文本实际情况进行分段处理,得到向量化之后的数据后将其存入本地向量数据库。后续如有新增文本数据,仅需用同样Embedding模型向量化之后添加到向量数据库中即可。用户在针对某些文档相关问题进行提问时,Langchain会使用向量化之后的提问文本与向量数据库中的文本进行相似性搜索,得到相关性最高的K条文档后,将提问和匹配文档嵌入固定的提示模板中,最后对LLM提问得到回复结果。 通过这一流程的实现可以一方面解决模型回答专业度的问题,同时也能省去微调的操作降低我们的使用成本。如下图所示,某开源框架“闻达”可以支持多个大语言模型进行知识库挂载,再匹配合适的数据集后能得到显著强于原模型的回答效果。 图表6:知识库挂载问答示例1图表7:知识库挂载问答示例2 来源:闻达,国金证券研究所来源:闻达,国金证券研究所 2.2Langchain知识库主要模块介绍及应用案例 作为一个功能齐全的开源框架,Langchain内置的多个模块可以协助我们以简便的方式实现上述的整个流程。我们此处针对上述挂载知识库经常用到的模块进行简要介绍: 模块功能集成API 图表8:Langchain常用模块 Loader加载器 从各种类型的文件源加载数据 CSVLoader,PyPDFLoader,UnstructuredHTMLLoader Splitter对长文本、代码等进行切割 CharacterTextSplitter,CodeTextSplitter,MarkdownHeaderTextSplitter Embedding对切割好的数据向量化HuggingFaceEmbeddings,ModelScopeEmbeddings,OpenAIEmbeddingsVectorDatabase对向量进行存储的数据库Faiss,chroma,pinecone,redis Chain封装好的提示链LLMChain,RouterChain,SequentialChain Agent 代理工具,决定采取哪些行动及行动顺序 ReAct,Plan-and-executeagents Deployment(非Langchain)部署工具Gradio,Streamlit 来源:Langchain,国金证券研究所 对于文档加载这一过程而言,我们可以使用的文档类型及其丰富,常见的CSV,PDF,HTML,docs,txt,json等均可以通过对应的模块进行读取。 由于后续需要进行相似性搜索的步骤,我们需要将长文本进行切割,从而能获取到较短的文本段落。Langchain官方提供了几种不同的分割方式,包括CharacterTextSplitter以特定字符分割,RecursiveCharacterTextSplitter可以以递归的形式根据特定的标记符号进行分割,默认使用[“\n\n”,“\n”,“”,“”]四个标记符号。 然而上述函数对于文本切割的方式更适合英文的文本语法习惯,我们经过不断尝试,发现使用[“。\n”]更适合用来做中文文本的段落分割,且一般而言段落的长度适中,用来做后续的相似性搜索比较合适。 向量化是对文本处理必不可缺的一步,我们推荐直接使用Huggingface中实际验证效果较好的Embedding模型,针对不同语言的文本也可以适当切换使用。常见的 Embedding模型如下: Huggingface路径特点介绍 图表9:主流Embedding模型介绍 Text-embedding-ada-002由OpenAI推出,表现较好,但调用成本较高shibing62