本文的目标是搭建一个离线版本的ChatPDF(支持中英文),让你随心地与你想要阅读的PDF对话,借助大语言模型提升获取知识的效率。
除此之外,你还可以:
为了让更多的同学看懂,我会尽量写的小白一点。如果你是有经验的同学,发现我哪里写的不对,若你可以在评论区指出,我会非常感谢!
我的笔记本型号是 Apple的 M2 Max 32G,Windows 和 Linux 的步骤在大体上也是类似的,我会在每一个步骤都链接出所涉技术的官方文档,方便各位同学自行查阅和深入学习。
因为模型比较大,建议先启动下载,再进行后续的步骤。
Chinese-LLaMA-Alpaca-2(中文羊驼)是基于Meta发布的可商用大模型LLaMA2微调的中文大模型,LLaMA2只支持英文,而中文羊驼支持中英文。
本文以Chinese-LLaMA-Alpaca-2-13b大模型为例,如果你的内存或者显存比较小,建议使用7B的,效果应该不会相差太多,官方的下载地址。
以HuggingFace为例,将Files and versions
里面的所有文件都下载,并放置于同一个文件夹下面,命名为chinese-alpaca-2-13b
即可(可随意更改)。
了解机器学习或深度学习的同学应该都知道,无论是NLP还是CV,模型的输入和输出基本上都是N维向量。在实现文档问答(即ChatPDF)的技术中,其中关键的一步就是把用户所提出问题
的向量表示,与向量数据库中文档块
的向量表示进行相似度计算
。因为涉及到搜索对比的问题,所以我们需要用到向量数据库来加快这个过程。如果你现在听不懂那也没有关系,先跟着做就行,后面我会再详细讲解,其实ChatPDF实现的逻辑很简单。
Github上的开源向量数据库(Vector Database)应该挺多的,也有一些提供免费云服务的向量数据库,如Pinecone。但是我们要实现的是一个完全离线版本的ChatPDF,所以在这里我选择了社区影响力最大(23.7k star)的开源向量数据库Milvus,而且它部署也比较简单,使用Docker Compose可以快速部署,部署Milvus的官方教程。
假设你已经安装好了Docker-Compose,请在命令行输入以下命令:
bash代码解读复制代码wget https://github.com/milvus-io/milvus/releases/download/v2.3.2/milvus-standalone-docker-compose.yml -O docker-compose.yml
sudo docker-compose up -d # 最后会开启三个服务,包括milvus-standalone,及其两个依赖:milvus-etcd和milvus-minio
docker port milvus-standalone 19530/tcp # 检查docker暴露的端口
如果你还没有安装,请自行查阅资料安装,网上应该有很多成熟的教程,或者自行看Docker Compose官方的安装教程
llama.cpp的最主要目标是量化LLaMA模型,可以理解为在尽量不削弱模型推理能力的前提下,加速模型的推理速度。目前支持MacOS、Linux和Windows平台。我尝试了几种大模型部署的方式以后,感觉经过llama.cpp量化后,模型的推理速度确实快很多,而且占用的内存也会小很多。说白了,llama.cpp的作用就是让我们以尽可能小的代价使用大模型,毕竟算力珍贵。
请在命令行输入以下命令:
bash代码解读复制代码git clone [email protected]:ggerganov/llama.cpp.git
cd llama.cpp
make
因为llama.cpp是使用C++开发的,所以需要使用make
来构建和编译项目。若您使用的是WIndows系统,需要使用cmake
命令来代替make
,详细的教程点击