由于操作过于频繁,请点击下方按钮进行验证!

让开源版ChatGPT基于你的本地文档做精准问答

国际金属加工网 2023年11月28日

1.基本介绍   

相信很多读者已经体验过ChatGPT的强大能力了。ChatGPT可以做日常问答、帮助总结文章中心思想、帮助你写文章等。看起来ChatGPT像是一个百事通,熟练掌握所有领域知识,然而事实并非如此。

首先ChatGPT的知识是陈旧不更新的,如果你想让ChatGPT详细介绍一下某个新出现的产品,那它只能信口开河了。

互联网上茫茫的知识,ChatGPT不可能都深入学习过。对于一些专业的、小众的知识(比如某个小众产品的手册)ChatGPT也许只是知道其名称,而不知道其细节。那么ChatGPT只能给出空泛而没有太多参考意义的回答。

怎样能让ChatGPT成为某个领域的专家,能够代替我们的客服小姐姐、技术支持小哥哥来做一些繁重的问答工作呢?这就是本文要介绍的方案:一种利用 ChatGLM-6B +  text2vec-large-chinese + LangChain 实现的基于本地知识的问答应用。

ChatGLM-6B是清华大学开源的中英双语对话语言模型,这里用ChatGLM来代替ChatGPT, 这样就不用花心思去注册OpenAI账号、翻墙等繁琐的事情了。(当然还有很多其他的性能更好的语言模型,如果大家感兴趣我们后面再单独介绍)

text2vec-large-chinese是一个文本转特征向量的Embedding模型,用于建立本地文本搜索库,以及通过语义搜索文本。

LangChain是一个基于大语言模型的开源的应用开发框架,目前支持Python和TypeScript两种编程语言。它赋予LLM两大核心能力:数据感知,将语言模型与其他数据源相连接;代理能力,允许语言模型与其环境互动。LangChain的主要应用场景包括个人助手、基于文档的问答、聊天机器人、查询表格数据、代码分析等。

2.实现原理  

本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。

3.系统搭建  

3.1 硬件需求  

ChatGLM-6B 模型硬件需求

GPU: 显存>13GB

Embedding 模型硬件需求:

GPU: 显存>3GB(可选)

3.2 软件需求  

本项目已在 Python 3.8,CUDA 11.7 环境下完成测试。

3.3 安装环境  

1. 环境检查

# 首先,确信你的机器安装了 Python 3.8 及以上版本

$ python --versio

Python 3.8.13

# 如果低于这个版本,可使用conda安装环境

$ conda create -p /your_path/env_name python=3.8

# 激活环境

$ source activate /your_path/env_name

# 关闭环境

$ source deactivate /your_path/env_name

# 删除环境

$ conda env remove -p  /your_path/env_name

2.项目依赖

# 拉取仓库

$ git clone (暂不可见)/imClumsyPanda/langchain-ChatGLM.git

# 安装依赖

$ pip install -r requirements.txt

*注:使用 langchain.document_loaders.UnstructuredFileLoader 进行非结构化文件接入时,可能需要依据文档进行其他依赖包的安装,请参考 langchain 文档

3.4 设置模型默认参数  

在开始执行 Web UI 或命令行交互前,请先检查 configs/model_config.py中的各项模型参数设计是否符合需求。

3.5 执行脚本体验 Web UI 或命令行交互  

执行 webui.py脚本体验 Web 交互

$ python webui.py

*注:如未将模型下载至本地,请执行前检查$HOME/.cache/huggingface/文件夹剩余空间,至少15G

执行后效果如下图所示:

微信图片_20231128113144.jpg

Web UI 可以实现如下功能:

运行前自动读取configs/model_config.py中LLM及Embedding模型枚举及默认模型设置运行模型,如需重新加载模型,可在界面重新选择后点击重新加载模型进行模型加载;

可手动调节保留对话历史长度,可根据显存大小自行调节

添加上传文件功能,通过下拉框选择已上传的文件,点击加载文件按钮,过程中可随时更换加载的文件或执行 knowledge_based_chatglm.py 脚本体验命令行交互

$ python knowledge_based_chatglm.py

4.实验效果对比  

4.1 实验任务  

以问题“chatglm-6b 的局限性具体体现在哪里,如何实现改进”为例

4.2 未使用 langchain 接入本地文档时的回答 

ChatGLM-6B 是一个基于 GPT-3 的聊天机器人,它的局限性主要体现在以下几个方面:

1. 语言模型的精度:GPT-3 是一种大型的语言模型,它的精度比较高,但是仍然有一些局限性。例如,它可能无法准确地理解某些方言、口音或者复杂的句子结构。

2. 知识图谱的完整性:GPT-3 可以生成一些知识图谱,但是其完整性和准确性可能不够。例如,它可能无法准确地理解某些领域的专业知识和术语。

3. 对话生成的连贯性:GPT-3 可以生成一些连贯的对话,但是其生成的对话可能不够自然。例如,它可能会生成一些虚假的、不连贯的对话或者误解用户的意图。

为了改进 ChatGLM-6B,可以考虑以下几个方面:

1.提高语言模型的精度:可以通过增加训练数据、使用更好的语言模型架构、优化模型训练过程等方式来提高语言模型的精度。

2.增强知识图谱的完整性:可以通过增加知识图谱的维度、使用更好的知识图谱构建方法、优化知识图谱的匹配算法等方式来增强知识图谱的完整性。

3.提高对话生成的连贯性:可以通过增加对话生成模型的上下文信息、使用更好的上下文信息提取方法、优化对话生成模型的算法等方式来提高对话生成的连贯性。

4.引入更多的人类反馈:人类反馈可以帮助 ChatGLM-6B 更好地理解用户的意图和需求,从而提高对话生成的质量和准确性。可以通过引入更多的人类客服、使用人类反馈收集器等方式来引入更多的人类反馈。

评价:答案看似很合理,实则没有任何指导性。

4.3 使用 langchain 接入 ChatGLM-6B 项目的 README.md 文件后 ChatGLM 的回答 

 ChatGLM-6B 是一个基于深度学习的自然语言处理模型,它在回答问题方面表现出色。但是,它也有一些局限性,具体如下:

1. 语言理解有限:ChatGLM-6B 只学习了中文自然语言,对于其他语言可能会存在理解上的局限性。

2. 知识储备不足:ChatGLM-6B 的训练数据集只包含了中文语料,因此它可能无法回答一些非中文的问题或者某些特定领域的问题。

3. 数据量有限:ChatGLM-6B 的训练数据集只有几百万条记录,因此它可能无法回答一些非常具体或者复杂的问题。

为了改进 ChatGLM-6B,可以考虑以下几个方面:

1. 学习更多的语言知识:可以学习其他语言的自然语言处理技术,扩大语言理解的范围。

2. 扩大知识储备:可以收集更多的中文语料,或者使用其他语言的数据集来扩充知识储备。

3. 增加数据量:可以使用更大的数据集来训练 ChatGLM-6B,提高模型的表现。

4. 引入更多的评估指标:可以引入更多的评估指标来评估模型的表现,从而发现 ChatGLM-6B 存在的不足和局限性。

5. 改进模型架构:可以改进 ChatGLM-6B 的模型架构,提高模型的性能和表现。例如,可以使用更大的神经网络或者改进的卷积神经网络结构。

评价:针对文档内容做了详细回复,对于读者具有指导意义。

5.总结  

1. 文档的格式目前支持txt、docx、md、pdf


2. 系统只是一个具备核心功能的demo演示系统,没有权限控制,离产品化还有一段距离。想要集成到自己系统中的粉丝需要定制。

(AI开源杂货酷)

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容,以保证您的权益!联系电话:010-58612588 或 Email:editor@mmsonline.com.cn。

网友评论 匿名:

分享到