【privateGPT】使用privateGPT训练您自己的LLM

了解如何在不向提供商公开您的私人数据的情况下训练您自己的语言模型

使用OpenAI的ChatGPT等公共人工智能服务的主要担忧之一是将您的私人数据暴露给提供商的风险。对于商业用途,这仍然是考虑采用人工智能技术的公司最大的担忧。

很多时候,你想创建自己的语言模型,根据你的数据集(如销售见解、客户反馈等)进行训练,但同时你不想将所有这些敏感数据暴露给OpenAI等人工智能提供商。因此,理想的方法是在本地训练自己的LLM,而无需将数据上传到云。

如果你的数据是公开的,并且你不介意将它们暴露给ChatGPT,我有另一篇文章展示了如何将ChatGPT与你自己的数据连接起来:

  • Connecting ChatGPT with Your Own Data using LlamaIndex

  • Learn how to create your own chatbot for your business

  • levelup.gitconnected.com

在这篇文章中,我将向您展示如何使用一个名为privateGPT的开源项目来利用LLM,这样它就可以根据您的自定义训练数据回答问题(如ChatGPT),而不会牺牲数据的隐私。

需要注意的是,privateGPT目前只是一个概念验证,尚未做好生产准备。

正在下载私有GPT

要试用privateGPT,您可以使用以下链接转到GitHub:https://github.com/imartinez/privateGPT.

您可以单击“代码|下载ZIP”按钮下载存储库:

或者,如果您的系统上安装了git,请在终端中使用以下命令克隆存储库:

$ git clone https://github.com/imartinez/privateGPT

无论哪种情况,一旦将存储库下载到您的计算机上,privateGPT目录应具有以下文件和文件夹:


安装所需的Python包

privateGPT使用许多Python包。它们封装在requirements.txt文件中:

langchain==0.0.171
pygpt4all==1.1.0
chromadb==0.3.23
llama-cpp-python==0.1.50
urllib3==2.0.2
pdfminer.six==20221105
python-dotenv==1.0.0
unstructured==0.6.6
extract-msg==0.41.1
tabulate==0.9.0
pandoc==2.3
pypandoc==1.11

安装它们最简单的方法是使用pip:

$ cd privateGPT
$ pip install -r requirements.txt

根据我的实验,在执行上述安装时,可能无法安装某些必需的Python包。稍后当您尝试运行intake.py或privateGPT.py文件时,您就会知道这一点。在这种情况下,只需单独安装丢失的软件包即可。

编辑环境文件

example.env文件包含privateGPT使用的几个设置。内容如下:

PERSIST_DIRECTORY=db
MODEL_TYPE=GPT4All
MODEL_PATH=models/ggml-gpt4all-j-v1.3-groovy.bin
EMBEDDINGS_MODEL_NAME=all-MiniLM-L6-v2
MODEL_N_CTX=1000
  • PERSIST_DIRECTORY-加载和处理文档后将保存本地矢量存储的目录
  • MODEL_TYPE-您正在使用的模型的类型。在这里,它被设置为GPT4All(由OpenAI提供的ChatGPT的免费开源替代方案)。
  • MODEL_PATH—LLM所在的路径。在这里,它被设置为models目录,使用的模型是ggml-gpt4all-j-v1.3-groovy.bin(您将在下一节中了解该模型的下载位置)
  • EMBEDDINGS_MODEL_NAME-这是指变压器模型的名称。在这里,它被设置为全MiniLM-L6-v2,它将句子和段落映射到384维的密集向量空间,并可用于聚类或语义搜索等任务。
  • MODEL_N_CTX-嵌入和LLM模型的最大令牌限制

将example.env重命名为.env。

完成此操作后,.env文件将变为隐藏文件。

下载模型

为了使私有GPT工作,它需要预先训练模型(LLM)。由于privateGPT正在使用GPT4All,您可以从以下位置下载LLM:https://gpt4all.io/index.html:

LLM

由于默认环境文件指定了ggml-gpt4all-j-v1.3-groovy.bin LLM,因此下载第一个模型,然后在privateGPT文件夹中创建一个名为models的新文件夹。将ggml-gpt4all-j-v1.3-groovy.bin文件放入models文件夹中:

准备您的数据

如果您查看intect.py文件,您会注意到以下代码片段:

".csv": (CSVLoader, {}),
# ".docx": (Docx2txtLoader, {}),
".doc": (UnstructuredWordDocumentLoader, {}),
".docx": (UnstructuredWordDocumentLoader, {}),
".enex": (EverNoteLoader, {}),
".eml": (UnstructuredEmailLoader, {}),
".epub": (UnstructuredEPubLoader, {}),
".html": (UnstructuredHTMLLoader, {}),
".md": (UnstructuredMarkdownLoader, {}),
".odt": (UnstructuredODTLoader, {}),
".pdf": (PDFMinerLoader, {}),
".ppt": (UnstructuredPowerPointLoader, {}),
".pptx": (UnstructuredPowerPointLoader, {}),
".txt": (TextLoader, {"encoding": "utf8"}),

这意味着privateGPT能够支持以下文档类型:

  • .csv: CSV
  • .doc: Word Document
  • .docx: Word Document
  • .enex: EverNote
  • .eml: Email
  • .epub: EPub
  • .html: HTML File
  • .md: Markdown
  • .odt: Open Document Text
  • .pdf: Portable Document Format (PDF)
  • .ppt : PowerPoint Document
  • .pptx : PowerPoint Document
  • .txt: Text file (UTF-8)

每种类型的文档都由相应的文档加载器指定。例如,您可以使用UnstructuredWordDocumentLoader类来加载.doc和.docx Word文档。

默认情况下,privateGPT附带位于source_documents文件夹中的state_of_the_union.txt文件。我将删除它,并用一份名为Singapore.pdf的文件取而代之。

LLM

This document was created from https://en.wikipedia.org/wiki/Singapore. You can download any page from Wikipedia as a PDF document by clicking Tools | Download as PDF:

LLM

您可以将privateGPT支持的任何文档放入source_documents文件夹。以我为例,我只放了一份文件。

为文档创建嵌入

一旦文档就位,就可以为文档创建嵌入了。

创建嵌入是指为单词、句子或其他文本单元生成向量表示的过程。这些向量表示捕获了有关文本的语义和句法信息,使机器能够更有效地理解和处理自然语言。

在终端中键入以下内容(在privateGPT文件夹中提供了摄取.py文件):

$ python ingest.py

根据您使用的机器和您放入source_documents文件夹中的文档数量,嵌入处理可能需要相当长的时间才能完成。

完成后,您将看到以下内容:

Loading documents from source_documents
Loaded 1 documents from source_documents
Split into 692 chunks of text (max. 500 characters each)
Using embedded DuckDB with persistence: data will be stored in: db

嵌入以Chroma db的形式保存在db文件夹中:

LLM

Chroma是开源嵌入数据库。

提出问题

您现在可以提问了!在“终端”中键入以下命令:

$ python privateGPT.py

加载模型需要一段时间。在此过程中,您将看到以下内容:

Using embedded DuckDB with persistence: data will be stored in: db
gptj_model_load: loading model from 'models/ggml-gpt4all-j-v1.3-groovy.bin' - please wait ...
gptj_model_load: n_vocab = 50400
gptj_model_load: n_ctx = 2048
gptj_model_load: n_embd = 4096
gptj_model_load: n_head = 16
gptj_model_load: n_layer = 28
gptj_model_load: n_rot = 64
gptj_model_load: f16 = 2
gptj_model_load: ggml ctx size = 4505.45 MB
gptj_model_load: memory_size = 896.00 MB, n_mem = 57344
gptj_model_load: ................................... done
gptj_model_load: model size = 3609.38 MB / num tensors = 285Enter a query:

在提示下,你可以输入你的问题。我问:“新加坡的人口是多少?”。私人GPT花了很长时间才得出答案。一旦它找到了答案,它就会给你答案,并引用答案的来源:

LLM

您可以继续询问后续问题:

LLM

总结

虽然privateGPT目前是一个概念验证,但它看起来很有前景,然而,它还没有准备好生产。有几个问题:

  • 推理缓慢。执行文本嵌入需要一段时间,但这是可以接受的,因为这是一次性过程。然而,推理是缓慢的,尤其是在速度较慢的机器上。我用了一台32GB内存的M1 Mac,但还是花了一段时间才找到答案。
  • 内存猪。privateGPT使用大量内存,在问了一两个问题后,我会得到一个内存不足的错误,如下所示:

segmentation fault python privateGPT.py. /Users/weimenglee/miniforge3/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown. warnings.warn(‘resource_tracker: There appear to be %d ‘

在privateGPT的作者解决上述两个问题之前,privateGPT仍然是一个实验,看看如何在不将私人数据暴露给云的情况下训练LLM。

文章链接

【privateGPT】使用privateGPT训练您自己的LLM | 开发者开聊

自我介绍

  • 做一个简单介绍,酒研年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师研究会】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。
  • 企业架构师需要比较广泛的知识面,了解一个企业的整体的业务,应用,技术,数据,治理和合规。之前4年主要负责企业整体的技术规划,标准的建立和项目治理。最近一年主要负责数据,涉及到数据平台,数据战略,数据分析,数据建模,数据治理,还涉及到数据主权,隐私保护和数据经济。 因为需要,比如数据资源入财务报表,另外数据如何估值和货币化需要财务和金融方面的知识,最近在学习财务,金融和法律。打算先备考CPA,然后CFA,如果可能也想学习法律,备战律考。
  • 欢迎爱学习的同学朋友关注,也欢迎大家交流。全网同号【架构师研究会】

欢迎收藏  【全球IT瞭望】,【架构师酒馆】和【开发者开聊】.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/230246.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang拼接字符串性能对比

g o l a n g golang golang的 s t r i n g string string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去。主要有以下几种拼接方式 拼接方式介绍 1.使用 s t r i n g string string自带的运算符 ans ans s2. 使用…

flex布局中滚动条展示内容时部分内容无法显示

这段时间看了一下之前的demo&#xff0c;发现了当时记录了一句 justify-content: center; 会影响滚动条内容展示&#xff0c;觉得还是记录一下 情况复现 这里我简单的写一下demo复现一下这个问题&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en&quo…

python django 生鲜商城管理系统

python django 生鲜商城管理系统,包含用户端和管理端 功能&#xff1a; 用户端&#xff1a;商城主页展示&#xff0c;登录&#xff0c;注册&#xff0c;用户中心&#xff0c;购物车&#xff0c;我的订单&#xff0c;购物车结算 管理端&#xff1a;登录&#xff0c;商品&…

QT上位机开发(绘图软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 稍微复杂一点的软件&#xff0c;一般都是带有绘图功能。绘图的意义&#xff0c;不仅仅是像CAD一样&#xff0c;可以进行模型的设计、比对和调试。它…

学习调整echarts中toolbox位置toolBox工具栏属性

学习调整echarts中toolbox位置toolBox工具栏属性 toolbox工具栏属性介绍示例代码代码参数说明 toolbox工具栏属性介绍 参考网址&#xff1a;https://echarts.apache.org/zh/option.html#tooltip 属性类型说明toolbox.showbooleanboolean 默认值为true&#xff0c;是否显示工具…

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程

随着移动互联网的普及&#xff0c;预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养&#xff0c;预约已经渗透到各个行业。然而&#xff0c;市面上的预约小程序大多功能单一&#xff0c;界面老旧&#xff0c;无法满足商家和用户的个性化需求。今天来给大…

Oracle regexp_replace 手机号脱敏

select 18012345678,regexp_replace(18012345678,(.){4},****,4,1) from dual;

python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理 二维傅里叶变换是一种在图像处理中常用的数学工具&#xff0c;它将图像从空间域&#xff08;我们通常看到的像素排列&#xff09;转换到频率域。这种变换揭示了图像的频率成分&#xff0c;有助于进行各种图像分析和处理&#xff0c;如滤波、图像增强、边缘检测等。 在数学…

第3课 使用FFmpeg获取并播放音频流

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 FFmpeg作为一套庞大的音视频处理开源工具&#xff0c;其源码有太多值得研究的地方。但对于大多数初学者而言&#xff0c;如何快速利用相关的API写出自己想要的东西才是迫切需要…

【PowerMockito:编写单元测试过程中采用when打桩失效的问题】

问题描述 正如上图所示&#xff0c;采用when打桩了&#xff0c;但是&#xff0c;实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常&#xff0c;所以在测试类中需要加入以下代码片段&#xff1a; Beforepublic void setUp() …

AI智能分析网关V4区域人数超员算法模型的应用原理及使用场景

视频AI智能分析技术已经深入到人类生活的各个角落&#xff0c;与社会发展的方方面面紧密相连。从日常生活中的各种场景&#xff0c;如人脸识别、车牌识别&#xff0c;到工业生产中的安全监控&#xff0c;如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

Laravel的知识点

1 、 {{ }}和{!! !!} 的区别 1&#xff09;{{ }} : 未解析直接输出&#xff08; 是在 HTML 中内嵌 PHP 的 Blade 语法标识符&#xff0c;表示包含在该区块内的代码都将使用 PHP 来编译运行&#xff09; 2&#xff09;{!! !!} : 若变量值含有HTML标签将解析成前端代码 2.两种写…

大模型实战营第二期——1. 书生·浦语大模型全链路开源开放体系

文章目录 1. 实战营介绍2. 书生浦语大模型介绍2.1 数据2.2 预训练2.3 微调2.4 评测2.5 部署2.6 智能体(应用) 1. 实战营介绍 github链接&#xff1a;https://github.com/internLM/tutorialInternLM&#xff1a;https://github.com/InternLM书生浦语官网&#xff1a;https://in…

西电期末1017.有序序列插值

一.题目 二.分析与思路 简单题。主要考察简单的排序&#xff0c;最后的插入数据同样不用具体实现&#xff0c;只需在输出时多输出一下即可&#xff0c;注意顺序&#xff01;&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;scanf("%d…

【数据结构】二叉树(一)——树和二叉树的概念及结构

前言: 本篇博客主要了解什么是树&#xff0c;什么是二叉树&#xff0c;以及他们的概念和结构。 文章目录 一、树的概念及结构1.1 树的基本概念1.2 树的相关特征1.3 树的实现 二、二叉树的概念及性质2.1 二叉树的概念2.2 二叉树的性质 一、树的概念及结构 1.1 树的基本概念 树&…

Java技术栈 —— Redis的雪崩、穿透与击穿

Java技术栈 —— Redis的雪崩、穿透与击穿 〇、实验的先导条件&#xff08;NginxJmeter&#xff09;一、Redis缓存雪崩、缓存穿透、缓存击穿1.1 雪崩1.2 穿透1.3 击穿 二、Redis应用场景——高并发2.1 单机部署的高并发问题与解决&#xff08;JVM级别锁&#xff09;2.2 集群部署…

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …

SDH、MSTP、OTN和PTN的关系

在开始之前&#xff0c;先要解释一下TDM的概念。 TDM&#xff0c;就是时分复用&#xff0c;就是将一个标准时长&#xff08;1秒&#xff09;分成若干段小的时间段&#xff08;8000&#xff09;&#xff0c;每一个小时间段&#xff08;1/8000125us&#xff09;传输一路信号。 …

OpenEular23.09(欧拉)操作系统为企业搭建独立的K8S集群环境,详细流程+截图

一.环境&#xff1b; win10&#xff0c;vmware16 pro&#xff0c;openeular23.09&#xff0c;linux内核 6.4.0-10.1.0.20.oe2309.x86_64&#xff0c; docker-engine 2:18.09.0-328&#xff0c;kubernetes 1.25.3&#xff0c;containerd 1.6.22&#xff0c;calico v3.25 集群…

Unity 点击对话系统(含Demo)

点击对话系统 可实现点击物体后自动移动到物体附近&#xff0c;然后弹出对话框进行对话。 基于Unity 简单角色对话UI脚本的编写&#xff08;新版UI组件&#xff09;和Unity 关于点击不同物品移动并触发不同事件的结合体&#xff0c;有兴趣可以看一下之前文章。 下边代码为U…