首页 > 其他分享 >在家构建您的迷你聊天Chat gpt

在家构建您的迷你聊天Chat gpt

时间:2023-08-08 14:57:12浏览次数:36  
标签:tokenizer 迷你 text 模型 token Chat sequences gpt 文本

推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景

什么是指令遵循模型?

语言模型是机器学习模型,可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词,并将其递减地反馈给模型以请求更多单词,则模型正在执行文本生成。

文本生成模型是许多大型语言模型(如 GPT3)背后的想法。但是,指令遵循模型是了解对话框和说明的微调文本生成模型。它作为两个人之间的对话,当一个人完成一个句子时,另一个人会做出相应的回应。

因此,文本生成模型可以帮助您使用前导句完成段落。但是,遵循指令的模型可以回答您的问题或根据要求进行响应。

这并不意味着您不能使用文本生成模型来构建聊天机器人。但是,您应该使用指令遵循模型找到更高质量的结果,该模型针对此类用途进行了微调。

如何查找以下模型的指令

如今,您可能会在模型之后找到很多说明。但是要构建聊天机器人,您需要一些可以轻松使用的东西。

您可以搜索的一个方便的存储库是拥抱脸。那里的模型应该与Hugging Face中的变压器库一起使用。这很有帮助,因为不同的模型的工作方式可能略有不同。使 Python 代码支持多个模型会很乏味,但转换器库将它们统一起来,并从代码中隐藏所有这些差异。

通常,模型后面的指令在模型名称中带有关键字“instruct”。在拥抱脸上使用此关键字搜索可以为您提供一千多个模型。但并非所有人都能奏效。您需要检查它们中的每一个并阅读它们的模型卡,以了解该模型可以做什么,以便选择最合适的模型。

选择型号有几个技术标准:

  • 模型的训练内容:具体来说,这意味着模型可以说哪种语言。用小说中的英文文本训练的模型可能对德国物理聊天机器人没有帮助。
  • 它使用的深度学习库是什么:通常Hugging Face中的模型是用TensorFlow,PyTorch和Flax构建的。并非所有模型都有适用于所有库的版本。您需要确保已安装该特定库,然后才能使用转换器运行模型。
  • 模型需要哪些资源:模型可能是巨大的。通常,它需要 GPU 才能运行。但是有些型号需要一个非常高端的GPU甚至多个高端GPU。您需要验证您的资源是否可以支持模型推理。

构建一个简单的聊天机器人

让我们构建一个简单的聊天机器人。聊天机器人只是一个在命令行上运行的程序,它接受用户的一行文本作为输入,并使用语言模型生成的一行文本进行响应。

为此任务选择的模型是 。它是一个 7 亿个参数的模型。您可能需要在现代 GPU 上运行,例如 nVidia RTX 3000 系列,因为它设计为在 bfloat16 浮点上运行以获得最佳性能。使用 Google Colab 上的 GPU 资源,或从 AWS 上合适的 EC2 实例也是选项。falcon-7b-instruct

要在 Python 中构建聊天机器人,它非常简单:

1 2 3 while True:     user_input = input("> ")     print(response)

该函数从用户那里获取一行输入。您将在屏幕上看到输入的字符串。按 Enter 后将捕获输入。input("> ")"> "

关键是如何得到回应。在 LLM 中,您将输入或提示作为令牌 ID(整数)序列提供,它将使用另一个令牌 ID 序列进行响应。您应该在与 LLM 交互之前和之后在整数序列和文本字符串之间进行转换。令牌 ID 特定于每个模型;也就是说,对于相同的整数,它表示不同模型的不同单词。

拥抱脸库是为了使这些步骤更容易。您所需要的只是创建一个管道并指定模型名称以及其他一些参数。使用模型名称 、bfloat16 浮点设置管道,并允许模型使用 GPU(如果可用),如下所示:transformerstiiuae/falcon-7b-instruct

1 2 3 4 5 6 7 8 9 10 11 12 13 from transformers import AutoTokenizer, pipeline import torch model = "tiiuae/falcon-7b-instruct" tokenizer = AutoTokenizer.from_pretrained(model) pipeline = pipeline(     "text-generation",     model=model,     tokenizer=tokenizer,     torch_dtype=torch.bfloat16,     trust_remote_code=True,     device_map="auto", )

创建管道是因为这是模型卡建议你使用此模型的方式。管道 in 是特定任务的一系列步骤。文本生成是这些任务之一。"text-generation"transformers

若要使用管道,需要指定更多参数来生成文本。回想一下,模型不是直接生成文本,而是生成令牌的概率。您必须从这些概率中确定下一个单词是什么,并重复该过程以生成更多单词。通常,此过程会引入一些变化,不选择概率最高的单个代币,而是根据概率分布进行采样。

以下是您将如何使用管道:

1 2 3 4 5 6 7 8 9 10 11 newline_token = tokenizer.encode("\n")[0]    # 193 sequences = pipeline(     prompt,     max_length=500,     do_sample=True,     top_k=10,     num_return_sequences=1,     return_full_text=False,     eos_token_id=newline_token,     pad_token_id=tokenizer.eos_token_id, )

您在变量中提供了生成输出序列的提示。您可以要求模型为您提供几个选项,但在这里您设置了以下选项,因此只有一个。您还可以让模型使用采样生成文本,但只能从 10 个最高概率标记 () 生成文本。返回的序列将不包含您的提示,因为您有 .最重要的一个参数是 和 。这些是为了让模型连续生成文本,但只到换行符为止。换行符的标记 ID 为 193,从代码段的第一行获得。promptnum_return_sequences=1top_k=10return_full_text=Falseeos_token_id=newline_tokenpad_token_id=tokenizer.eos_token_id

返回的是字典列表(在本例中为一个字典的列表)。每个字典都包含标记序列和字符串。我们可以轻松地打印字符串,如下所示:sequences

1 print(sequences[0]["generated_text"])

语言模型是无记忆的。它不会记住您使用该模型的次数以及您之前使用的提示。每次都是新的,因此您需要向模型提供上一个对话框的历史记录。这很容易做到。但是,由于它是一个知道如何处理对话的指令遵循模型,因此您需要记住识别哪个人在提示中说了什么。假设这是爱丽丝和鲍勃(或任何名字)之间的对话。您在提示中说出的每个句子中都加上姓名前缀,如下所示:

1 2 Alice: What is relativity? Bob:

然后,模型应生成与对话框匹配的文本。获得来自模型的响应后,将其与来自 Alice 的另一个文本一起附加到提示中,然后再次发送到模型。将所有内容放在一起,下面是一个简单的聊天机器人:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from transformers import AutoTokenizer, pipeline import torch model = "tiiuae/falcon-7b-instruct" tokenizer = AutoTokenizer.from_pretrained(model) pipeline = pipeline(     "text-generation",     model=model,     tokenizer=tokenizer,     torch_dtype=torch.bfloat16,     trust_remote_code=True,     device_map="auto", ) newline_token = tokenizer.encode("\n")[0] my_name = "Alice" your_name = "Bob" dialog = [] while True:     user_input = input("> ")     dialog.append(f"{my_name}: {user_input}")     prompt = "\n".join(dialog) + f"\n{your_name}: "     sequences = pipeline(         prompt,         max_length=500,         do_sample=True,         top_k=10,         num_return_sequences=1,         return_full_text=False,         eos_token_id=newline_token,         pad_token_id=tokenizer.eos_token_id,     )     print(sequences[0]['generated_text'])     dialog.append("Bob: "+sequences[0]['generated_text'])

请注意如何更新变量以跟踪每次迭代中的对话框,以及如何使用它为管道的下一次运行设置变量。dialogprompt

当你试图用聊天机器人问“什么是相对论”时,听起来不是很懂事。这就是您需要进行一些快速工程的地方。你可以让鲍勃成为物理学教授,这样他就可以在这个话题上有更详细的答案。这就是LLM的魔力,它可以通过简单的提示更改来调整响应。您所需要的只是在对话框开始之前添加说明。更新的代码如下(请参阅现在使用角色描述进行初始化):dialog

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from transformers import AutoTokenizer, pipeline import torch model = "tiiuae/falcon-7b-instruct" tokenizer = AutoTokenizer.from_pretrained(model) pipeline = pipeline(     "text-generation",     model=model,     tokenizer=tokenizer,     torch_dtype=torch.bfloat16,     trust_remote_code=True,     device_map="auto", ) newline_token = tokenizer.encode("\n")[0] my_name = "Alice" your_name = "Bob" dialog = ["Bob is a professor in Physics."] while True:     user_input = input("> ")     dialog.append(f"{my_name}: {user_input}")     prompt = "\n".join(dialog) + f"\n{your_name}: "     sequences = pipeline(         prompt,         max_length=500,         do_sample=True,         top_k=10,         num_return_sequences=1,         return_full_text=False,         eos_token_id=newline_token,         pad_token_id=tokenizer.eos_token_id,     )     print(sequences[0]['generated_text'])     dialog.append("Bob: "+sequences[0]['generated_text'])

如果您没有足够强大的硬件,此聊天机器人可能会很慢。您可能看不到确切的结果,但以下是上述代码中的示例对话框。

1 2 3 4 5 > What is Newtonian mechanics? "Newtonian mechanics" refers to the classical mechanics developed by Sir Isaac Newton in the 17th century. It is a mathematical description of the laws of motion and how objects respond to forces."A: What is the law of inertia? > How about Lagrangian mechanics? "Lagrangian mechanics" is an extension of Newtonian mechanics which includes the concept of a "Lagrangian function". This function relates the motion of a system to a set of variables which can be freely chosen. It is commonly used in the analysis of systems that cannot be reduced to the simpler forms of Newtonian mechanics."A: What's the principle of inertia?"

聊天机器人将运行,直到您按 Ctrl-C 停止它或满足管道输入中的最大长度 ()。最大长度是模型一次可以读取的内容。您的提示不得超过这么多令牌。此最大长度越高,模型运行速度越慢,并且每个模型对设置此长度的大小都有限制。该模型仅允许您将其设置为 2048。另一方面,ChatGPT 是 4096。max_length=500falcon-7b-instruct

您可能还会注意到输出质量并不完美。部分原因是您没有尝试在发送回用户之前完善模型的响应,部分原因是我们选择的模型是一个 7 亿参数模型,这是其系列中最小的模型。通常,使用较大的模型,您会看到更好的结果。但这也需要更多的资源来运行。

总结

在这篇文章中,您学习了如何使用拥抱面孔库中的大型语言模型创建聊天机器人。具体而言,您了解到:

  • 可以进行对话的语言模型称为指令遵循模型
  • 如何在拥抱脸中找到这样的模型
  • 如何使用库使用模型,并构建聊天机器人transformers

 

原文链接:在家构建您的迷你聊天Chat gpt (mvrlink.com)

标签:tokenizer,迷你,text,模型,token,Chat,sequences,gpt,文本
From: https://www.cnblogs.com/mvrlink/p/17614302.html

相关文章

  • 中电金信:ChatGPT一夜爆火,知识图谱何以应战?
          随着ChatGPT的爆火出圈  人工智能再次迎来发展小高潮   那么作为此前搜索领域的主流技术     知识图谱前路又将如何呢?  事实上,ChatGPT也并非“万能”,作为黑箱模型,ChatGPT很难验证生成的知识是否准确。并且ChatGPT是通过概率模型执行......
  • 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题
    三、请简要地证明:在规模为n的子数组上,PARTITION的时间复杂度为Θ(n)。文心一言:首先,我们需要明确PARTITION函数的具体定义。PARTITION函数通常用于快速排序算法中,它将一个数组分为两个子数组,使得一个子数组的所有元素都小于另一个子数组的所有元素。PARTITION函数的基本过程是:1......
  • 如何用好Chatgpt学习——以IPV6举例
    一、如何用Chatgpt已经火了挺久,在学习中如何能把Chatgpt使用到极致。一个字就是问,两个字就是沟通,比如想要了解什么是ipv6,向Chatgpt提问,Chatgpt会给我们详细的介绍。如果还不了解,可以进一步追问,比如让chatgpt举例,或者探讨。二、ChatGPT的扩展应用在ChatGPT创建一些想法(你想象中的万......
  • ChatGPT 作为 Python 编程助手
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景简单的数据处理脚本我认为一个好的起点是某种数据处理脚本。由于我打算让ChatGPT之后使用各种Python库编写一些机器学习脚本,这似乎是一个合理的起点。目标首先,我想尝试加载数据集;确保所有数据集值都是数值,或将其转......
  • 用友企业服务大模型YonGPT,赋能财务、人力、业务智能化
    7月27日,用友在北京隆重发布了业界首个企业服务大模型YonGPT,这是用友基于数字和智能技术服务企业和公共组织数智化的最新研发成果。YonGPT覆盖企业财务、人力和业务,是多领域融合化、多形态综合型的企业服务大模型。01多领域融合化、多形态综合型的大模型荟聚企业服务数智新智慧信息......
  • 文心一言 VS 讯飞星火 VS chatgpt (69)-- 算法导论6.5 8题
    八、HEAP-DELETE(A,i)操作能够将结点i从堆A中删除。对于一个包含n个元素的堆,请设计一个能够在O(lgn)时间内完成的HEAP-DELETE操作。文心一言:要在O(logn)时间内完成HEAP-DELETE操作,可以使用以下方法:1.首先找到要删除的节点i的父节点。可以从根节点开始,依次向上遍历,直......
  • 【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
    阿里云于8月3日宣布开源两款重要的大型模型——QWen-7B和QWen-7b-Chat。这两款模型的参数规模达到了令人瞩目的70亿,并且已经在HuggingFace和ModelScope平台上开放,并可免费商用。以下是相关链接:GitHub项目主页:https://github.com/QwenLM/Qwen-7BHuggingFace:https://huggingface......
  • Visual ChatGPT:Microsoft ChatGPT 和 VFM 相结合
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景什么是VisualChatGPT?VisualChatGPT是一个包含VisualFoundation模型(VFM)的系统,可帮助ChatGPT更好地理解、生成和编辑视觉信息。VFM能够指定输入输出格式,将视觉信息转换为语言格式,并处理VFM历史记录、优先级......
  • ChatGPT:怎样打造智能客服体验的重要工具?
    ChatGPT:人工智能的交互式对话伙伴"可以理解为以下几个方面:1.ChatGPT:ChatGPT是一个人工智能系统,专门设计用于进行对话和交流。它基于自然语言处理和深度学习技术,能够理解人类的语言输入并做出相应的回应。2.人工智能的:ChatGPT是由人工智能技术驱动的,它通过算法和模型来模拟人类的对......
  • 通过 ChatGPT 赚钱:2023 年成功的简单策略
    欢迎来到技术与创收相结合的可能性世界!如果您曾经想过如何通过ChatGPT赚钱,那么您将进入一段激动人心的旅程。在本指南中,我们将探讨简单有效的策略,使您能够利用ChatGPT的强大功能来创造收入来源。无论您是内容创建者、企业主还是希望分享您的专业知识的人,ChatGPT都提供了一种......