首页 > 其他分享 >一起学大模型 - 动手写一写langchain调用本地大模型(2)

一起学大模型 - 动手写一写langchain调用本地大模型(2)

时间:2024-06-02 10:59:03浏览次数:33  
标签:AutoTokenizer AutoModel 模型 langchain 分词器 学大 model self

文章目录


前言

前一篇文章里,from transformers import GPT2LMHeadModel, GPT2Tokenizer 如果模型替换了,就得更改代码,很麻烦,那有没有更简单的方法呢?


一、自动选择

transformers 库中的 AutoTokenizerAutoModel 可以根据配置文件自动选择适当的分词器 和 大模型,而无需明确指定特定的模型分词器 和模型。这使得代码更加通用和简洁。

1. 使用 AutoTokenizer 和AutoModel的示例

假设你已经将模型和分词器下载到本地目录 /path/to/local/model,你可以使用 AutoTokenizerAutoModel 来加载模型和分词器:

from transformers import AutoTokenizer, AutoModel
import openai
import torch
from langchain.llms import BaseLLM

# 定义 BERT 嵌入模型类,使用 AutoTokenizer 和 AutoModel
class BERTEmbedder:
    def __init__(self, model_path='/path/to/local/model'):
        self.tokenizer = AutoTokenizer.from_pretrained(model_path)
        self.model = AutoModel.from_pretrained(model_path)

    def embed(self, text):
        inputs = self.tokenizer(text, return_tensors='pt')
        with torch.no_grad():
            outputs = self.model(**inputs)
        return outputs.last_hidden_state.mean(dim=1).squeeze().numpy()

# 定义 GPT-3 生成模型类
class GPT3LLM(BaseLLM):
    def __init__(self, temperature=0.7, max_tokens=150):
        self.temperature = temperature
        self.max_tokens = max_tokens

    def generate(self, prompt):
        response = openai.Completion.create(
            engine="text-davinci-003",
            prompt=prompt,
            temperature=self.temperature,
            max_tokens=self.max_tokens
        )
        return response.choices[0].text.strip()

# 使用 LangChain 的 LLMChain
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.embeddings import Embeddings

# 定义一个模板,将 BERT 的嵌入作为 GPT-3 的输入
prompt_template = PromptTemplate(
    template="User input embedding: {embedding}\nGenerate response:",
    input_variables=["embedding"]
)

# 实现一个嵌入模型类,用于在 LLMChain 中使用
class EmbeddingsWrapper(Embeddings):
    def __init__(self, embedder):
        self.embedder = embedder

    def embed(self, text):
        return self.embedder.embed(text)

# 初始化本地 BERT 嵌入模型和 GPT-3 生成模型
bert_embedder = BERTEmbedder(model_path='/path/to/local/model')
gpt3_llm = GPT3LLM()

# 包装 BERT 嵌入模型
embedding_wrapper = EmbeddingsWrapper(bert_embedder)

# 创建 LLMChain
llm_chain = LLMChain(
    prompt_template=prompt_template,
    llm=gpt3_llm,
    embeddings=embedding_wrapper
)

# 用户输入
user_input = "The quick brown fox jumps over the lazy dog."

# 处理用户输入并生成输出
embedding = bert_embedder.embed(user_input)
output = llm_chain.run({"embedding": embedding})
print(f"Output: {output}")

2. 解释

  • AutoTokenizer 和 AutoModel:使用 AutoTokenizer.from_pretrainedAutoModel.from_pretrained,可以自动加载适当的分词器和模型,而不需要明确指定模型类型(例如,BERT、GPT-2等)。
  • model_path:加载本地路径中的模型和分词器。
  • BERTEmbedder 类:利用 AutoTokenizerAutoModel 处理文本并生成嵌入。
  • LLMChain:与之前相同,使用 LangChain 的 LLMChain 来整合 BERT 嵌入和 GPT-3 生成。

通过这种方式,可以更加简洁和通用地加载模型,适应不同的模型配置,而无需修改代码。

二、怎么实现自动选择的呢

AutoTokenizerAutoModeltransformers 库中的自动化工具,它们可以根据模型目录中的配置文件(通常是 config.json 文件)来自动识别并加载适当的模型和分词器。这意味着你在使用它们时,只需提供模型所在的目录路径,它们会根据配置文件确定使用哪个具体的模型类型和分词器。

为了确保 AutoTokenizerAutoModel 能正确加载模型,目录结构应包含必要的文件,例如:


/path/to/local/model/
    ├── config.json
    ├── pytorch_model.bin
    ├── vocab.txt
    └── tokenizer_config.json

  • config.json:模型配置文件,包含模型架构和超参数信息。
  • pytorch_model.bin:预训练的模型权重。
  • vocab.txt:分词器词汇表。
  • tokenizer_config.json:分词器配置文件。

总结

通过这种方式,我们可以使用 AutoTokenizerAutoModel 更加简洁和通用地加载模型,适应不同的模型配置,而无需修改代码。

标签:AutoTokenizer,AutoModel,模型,langchain,分词器,学大,model,self
From: https://blog.csdn.net/kljyrx/article/details/139362030

相关文章

  • LangChain学习圣经:从0到1精通LLM大模型应用开发的基础框架
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Transformer 模型完全解读:代码+注释+讲解
    节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。总结链接如下:重磅消息!《大模型面试......
  • 【图解IO与Netty系列】Reactor模型
    Reactor模型Reactor模型简介三类事件与三类角色Reactor模型整体流程各种Reactor模型单Reactor单线程模型单Reactor多线程模型主从Reactor模型Reactor模型简介Reactor模型是服务器端用于处理高并发网络IO请求的编程模型,与传统的一请求一线程的同步式编程模型不同的......
  • GPT-4o大模型分析文档和识图理解能力(6月最新ChatGPT商业运营网站程序源码)
    6月最新ChatGPT商业运营网站程序源码、支持Midjourney绘画,GPT语音对话+DALL-E3文生图+文档分析+suno-ai音乐生成+支持GPTs文章目录一、如何评价GPT-4o?1、GPT-4o大模型(文档分析)2、GPT-4o大模型(识图理解能力)3、SparkAi系统核心能力二、系统功能模块演示1、AI全模型支持/......
  • AI Dify + 大模型+ Agent 详细教程 从0-1教你构建小助手
    前言Dify是一个易于使用的LLMOps平台,提供了多种应用程序类型和模板,包括AI聊天机器人、代码转换器、SQL生成器、新闻内容编写、创意脚本等。团队使用Dify,可以基于GPT-4等模型快速「开发+部署」AI应用程序并进行可视化操作,还可以将程序对外进行发布。Dify这个名字来......
  • 噪声嵌入提升语言模型微调性能
     在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE:NOISYEMBEDDINGSIMPROVEINSTRUCTIONFINETUNING》的论文提出了一种新颖的方法,通过在训练过程中向嵌入向量添加噪声来提升模型的微调性能。这一发现为LLMs的进一步优化提供了......
  • [书生·浦语大模型实战营]——在茴香豆 Web 版中创建自己领域的知识问答助手
    茴香豆是一个基于LLM的领域知识助手,可以用于解答群聊中的问题。接下来是创建过程。1.打开茴香豆Web版,创建自己的领域库。地址:茴香豆Web版这里类似于注册账号,你输入知识库的名称以及密码,然后它就会创建一个知识库,之后你就可以用名称和密码来管理你的知识库了。2.添加领......
  • 基于n-gram语言模型实现输入单词推荐功能(附源码及语料库)
    一、开发环境1.语言:python2.开源工具:nltk3.语料库:维基百科英文语料库二、环境配置关于pyhton项目对nltk的部署,我看了以下文章。NLTK库安装教程在安装nltk库的过程中,我又遇到了pip更新的问题,看了以下文章。PIP更新​​​​三、实验要求利用n-gram语言模型完成,输入文字......
  • C++生产者消费者模型
    这里模拟了一个队列,5个消费者线程和5个生产者线程来共同使用队列里面的数据处理。包括了阻塞和非阻塞的出队入队方法。注意在添加线程时使用到了std::ref引用,在传参给线程时不能直接传入queue的引用,要使用std::ref才是真正意义上的引用,当直接使用queue编译器是不会通过的,因为其实......
  • 【计算机毕业设计】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模
    谷物识别系统,本系统使用Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对11种谷物图片数据集('大米','小米','燕麦','玉米渣','红豆','绿豆','花生仁','荞麦','黄豆','黑米','黑豆')进行训练......