前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChatGLM实战:Langchain-ChatGLM中间件的深度学习

ChatGLM实战:Langchain-ChatGLM中间件的深度学习

作者头像
MavenTalker
发布2023-09-06 12:39:39
7450
发布2023-09-06 12:39:39
举报
文章被收录于专栏:歪脖贰点零

作者简介:赵辉,区块链技术专家,精通各种联盟链、公链的底层原理,拥有丰富的区块链应用开发经验。

在之前对 ChatGLM 的搭建部署和测试使用过程中,我对 ChatGLM 和 Langchain 的能力有了初步了解。尽管这些工具已经具备了一定的通用性,但由于本地知识库的效果不理想,我仍然觉得需要为自己定制属于自己的模型和应用。因此,我决定学会基于 Langchain 和模型进行编程,从现在开始着重学习 Langchain 的基础知识和编码,为后续打造自己的贾维斯做知识储备。

目前,基于langchain的中文教程还是比较零散的,这里找到了两个网站教程https://www.langchain.com,https://python.langchain.com.cn/docs/。

学习langchain的第一步,是加载模型,官网给出的示例,都是基于openai,但由于openai属于海外服务,在境内使用有一定的限制,最终还是选择 ChatGLM.

Langchain官网没有关于ChatGLM的教程,那么就从百度或者Github找到相似示例,这里我们可以参考上次搭建的langchain-ChatGLM的源码去着手,分析是怎么加载自己的原型的。

源码分析

用pycharm打开langchain-ChatGLM的工程,回忆之前配置模型的文件是configs/model_config.py文件,根据变量llm_model_dict进行搜索,在models/loader/loader.py 中找到比较接近的代码,代码片段如下:

代码语言:javascript
复制
tokenizer = AutoTokenizer.from_pretrained(self.model_name)

而AutoTokenizer是在transformers中的,参见代码头部引用的依赖:

代码语言:javascript
复制
 from transformers import (AutoConfig, AutoModel, AutoModelForCausalLM, AutoTokenizer, LlamaTokenizer)

引用huggingface

找到接近的代码,那么就得想下如何编写自己的模型加载代码。直接拷贝工程中的代码不现实,代码量多,其他模块引用复杂,不适合初学者理解学习,那么就得从其他地方下手。这里想到transformers出自huggingface,而且之前chatglm-6b-32k也下载自huggingface。那么应该能从huggingface找到线索,打开huggingface网页,搜索chatglm-6b-32k,得到如下页面:

果然找到了对应的模型加载和使用的代码,对源码进行稍微修改保存到chatglm.py,引用本地下载好的模型,得到代码如下:

代码语言:javascript
复制
from transformers import AutoTokenizer, AutoModel
model_path = "/root/prj/ChatGLM-6B/THUDM/chatglm2-6b-32k"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
while True:
        test_text = input("Kun Peng:")
        if test_text == "exit":
                break;
        response, history = model.chat(tokenizer, test_text, history=history)
        print("AI: " + response)

运行效果如下:

代码解读

创建分词器

代码语言:javascript
复制
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

上述代码是根据模型创建分词器,

  1. 第一个参数可以以多个形式载入。
  • 一个字符串,预定义分词器的模型标识,托管在 huggingface.co 的模型仓库中。有效的模型标识可以位于根级别,如 bert-base-uncased,或位于用户或组织名称的命名空间下,如 THUDM/chatglm2-6b-32k。
  • 一个包含分词器所需词汇文件的目录路径,例如使用 save_pretrained() 方法保存的目录,例如:/root/prj/ChatGLM-6B/THUDM/chatglm2-6b-32k。
  • 仅当分词器只需要一个词汇文件(如 Bert 或 XLNet)时,为单个保存的词汇文件的路径或 URL,例如:./my_model_directory/vocab.txt。(不适用于所有派生类)
  1. 第二个参数trust_remote_code是否允许在其自己的建模文件中使用在Hub上定义的自定义模型。您信任且已阅读了代码的存储库将此选项设置为True,因为它将在您的本地计算机上执行Hub上存在的代码。

实例化模型

代码语言:javascript
复制
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()

上述代码是初始化模型,AutoModel这是一个通用的模型类,当使用 from_pretrained() 类方法或 from_config() 类方法创建时,它将作为库中基础模型类之一进行实例化。

  • 第一个参数除了模型标志,模型路径外, 还支持指向 TensorFlow 索引检查点文件的路径或 URL(例如,./tf_model/model.ckpt.index)。在这种情况下,from_tf 应设置为 True,并且应该提供一个配置对象作为 config 参数。使用提供的转换脚本将 TensorFlow 检查点转换为 PyTorch 模型并加载 PyTorch 模型后加载路径较慢。
  • 第二个参数与AutoTokenizer.from_pretrained的解析相同。
  • 而后面接的.half().cuda()的意思是将模型转成半精度的模型。

进入评估模式

模型默认使用 model.eval() 进入评估模式(因此,例如,dropout 模块会被停用)。要训练模型,应该首先使用 model.train() 将其设置回训练模式。

触发对话
代码语言:javascript
复制
response, history = model.chat(tokenizer, "你好", history=[])

上述代码即为第一次发起对话的语句,因此history中没有数据, response则为模型的回复。history为历史对话信息,如果要实现上下文关联,则需要在下次对话时用history的返回结果填充,代码如下:

代码语言:javascript
复制
response, history = model.chat(tokenizer, test_text, history=history)

扩展——情感分析模型

除了模型通用对话模型,还有一些分类模型,可以用transformers来实现,比如情感分析模型。在huggingface中,找到情感分析模型,用transformers的pipeline加载后,即可使用,代码如下:

代码语言:javascript
复制
from transformers import pipeline
import sys

classifier = pipeline('sentiment-analysis')
while True:
        test_text = input("Please input:")
        if test_text == "exit":
                break;
        res = classifier(test_text)
        print(res)

运行结果如下图,可以看出分析结果还是比较准确的。情感分类任务,通常为输入一段句子或一段话,返回该段话正向/负向的情感属性,在用户评价,观点抽取,意图识别中往往起到重要作用。

后续将继续输出ChatGLM 开发学习相关的内容,请继续关注。

—扩 展 阅 读—

WPS Office AI实战总结,智能化办公时代已来

ChatGLM实战:基于LangChain构建自己的私有知识库

ChatGLM-6B大模型微调实战总结

快速部署ChatGLM-6B大模型实战总结

走访数十位企业中高层后,这些事你必须得明白

正在发生或即将发生的AI大模型应用

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MavenTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码分析
  • 引用huggingface
  • 代码解读
    • 创建分词器
      • 实例化模型
        • 进入评估模式
          • 触发对话
      • 扩展——情感分析模型
      相关产品与服务
      腾讯云区块链服务平台 TBaaS
      腾讯云区块链服务平台(Tencent Blockchain as a Service,简称TBaaS)致力于打造全球领先的企业级区块链技术平台,帮助客户、开发者及合作伙伴轻松创建和管理可托管、可扩展的区块链网络,助力产业协同发展。TBaaS 支持长安链·ChainMaker、Hyperledger Fabric等区块链底层平台,简化部署、运维及开发流程,实现业务快速上链,提升链上治理效率。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档