大型语言模型初探 + 实施路线探讨
4月初惊艳于ChatGPT与stable diffusion的模型效果,才发觉自己跟业界最新进展落后的程度很大(还停留在Bert时代),所以对相关内容开始了一顿恶补,并初步进行了动手尝试,下面简要总结下大模型前期的调研与这两天的实践成果。
近期做的尝试主要进行了模型微调与上层应用构建两件事,时间跨度分别为10天与1天。起初模型微调效果不理想,中旬就有点沮丧便放弃了当初的计划(打造个人助理),最近OpenAI上层应用层出不穷,偶然间发现了chatpdf.com,作为打工人,当然要从业务角度出发,更多层面是因为之前组里做过简历解析与Ebot的业务,所以惊叹于大模型在上述两个业务的效果,由此省下的成本,担忧算法调参师慢慢就被市场淘汰,同时也对算法程序员提出了更高的要求。通过对chatpdf的原理分析,进行了简单实现。下面是结合了Ebot知识库(2000多条问答)与清华Chatglm-6B的简单实现:
http://10.191.148.106:8098/
可以尝试提问以下问题:
- 请问商旅的出差制度
- 如何登陆管理员后台
- 如何下载滴滴APP
言归正传,下面将主要跟大家分享下截止4月中旬,汇总的社区开源项目以及自己在模型微调、大模型与业务结合等方面的思考。
每当深度学习算法相关的领域取得突破进展时,必然伴随着 数据、模型(训练+微调)、上层应用(部署交互)三方面的紧密配合,同时大量的创业公司涌现也是围绕这三方面展开。数据方面: ChatGPT的技术报告是组织排序对并以反馈方式展开模型的奖励训练,目前社区组织的高质训练数据基于以调用OpenAI接口产出,所以再无须构造排序对,由于部分开源数据跟项目混合存在,所以会在备注进行添加说明。
开源项目 | 介绍 | 备注 |
---|---|---|
https://github.com/THUDM/ChatGLM-6B | 清华开源双语对话语言模型 | 1.无开源数据 2.实测中文效果最好 |
https://github.com/LianjiaTech/BELLE | 链家开源中文对话大模型 | 1.未实测,效果未知 2.大量高质中文数据(很实在) |
https://github.com/tloen/alpaca-lora https://github.com/LC1332/Chinese-alpaca-lora https://github.com/masa3141/japanese-alpaca-lora https://github.com/22-hours/cabrita |
基于LLaMA语言模型的 羊驼项目汇总 |
1.可基于链家开源数据 直接一键训练 |
https://github.com/karpathy/nanoGPT | 用于快速训练类GPT模型的训练库 | |
https://github.com/Lightning-AI/lit-llama | 基于nanoGPT实现,Apache2.0 license | |
https://github.com/lm-sys/FastChat | Vicuna | 1.记得实测效果很惊艳,生成速度很快 |
https://github.com/InsaneLife/ChineseNLPCorpus | 做实验用的NLP数据预料集 | |
https://github.com/brightmart/nlp_chinese_corpus | ChatYuan的作者整理的语料 | |
https://github.com/binary-husky/chatgpt_academic | 大模型上层应用 | |
https://gpt-index.readthedocs.io/en/latest/index.html | 大模型上层应用 | |
https://github.com/Significant-Gravitas/Auto-GPT | 大模型上层应用 | 上层应用太多,列举不过来 |
模型训练
基于公司鲁班平台的算力及大模型的参数选择、数据来源、数据量、训练时间成本综合衡量,因为训练效果不可知且周期较长,所以当初选择了易于上手的alpaca-lora进行微调。
由于全参数微调成本巨大,目前社区主流微调方式有lora, P-tuing, Adapter等方式。基于https://github.com/masa3141/japanese-alpaca-lora项目加链家开源数据,本人爬虫WikiHow数据, 具体训练参数如下:
- 单卡A100
- BATCH_SIZE 768
- MICOR_BATCH_SIZE 16
- EPOCH 3
- 训练数据: 200多万指令对
整个微调过程持续了10多天,迭代效果感官上还是可以的,但是针对WikiHow的爬虫数据微调效果不理想,复盘发现,WikiHow的回答数据太大,这导致了模型训练回答出现截断的原因。
由于上述过程持续时间过长加之效果不理想,另外大模型经常产出非事实性回答,部署成本巨大严重打消了我的积极性,所以对该过程的探索搁置了一星期,直到chatpdf进入我的视野。
上层应用探索
从公司业务角度出发,在当前算力下,大模型微调成本巨大, 单从这个角度就限制了一般公司在该方面的探索应用。但是我们又看到目前关于大模型的各上层应用层出不穷,所以如何结合开源大模型与公司现有业务是我主要思考的问题。
chatpdf这个应用主要是通过解析PDF,运用OpenAI可以与用户针对PDF进行非常好的交互式回答,体验效果非常好。其主要原理是将PDF分片向量化构建索引,通过对用户的问答进行文档检索,从而为大模型构建回答知识库,解决了token的限制与大模型非事实性回答的问题,从而带来了极其友好的交互体验。
从这一角度出发,我们可以针对任一知识库或是搜索引擎结果,来构建自己的个人助手。基于这一想法,结合企业级的问答知识库,我快速构建了这一简单应用。
实现较为简单,主要利用faiss为知识库构建向量索引,语义模型提取向量,通过召回结果来构建chatglm6B的prompt,通过实验发现如何更好的构造prompt,会极大的影响模型回答结果,这也验证了度厂老板说的那句话。目前对于一些回答结果,模型仍会自组织产出与原召回不一致的回答。
未来探索
- 微调自己的模型这条路最终要走,也非走不可
- 尝试添加搜索引擎,研究auto-gpt的方式,使其更加智能,也期待清华尽早公布chatglm13B
- 目前有很多惊艳的voice-clone开源项目,后续接入voice,打造智能数字人
思考
- 小模型喂大数据导致模型过拟合的话,由于数据逐年递增,这是否意味着以后的模型会越来越大?
- 目前情况下,对于QA类问答,大模型只是起到了基于知识库的排序输出的作用,是否大材小用?以小模型进行该方式训练是否就能起到很好的效果
- NLP同计算机视觉一样,交互方式上变得越来越简易且交互友好,使得一般大众都能简易上手,可以快速构建自己的应用,对于算法程序员来说,挑战越来越大,必须不断学习,提高自己的门槛。(打工人不容易啊!)