聊天机器人demo库——gradio

介绍:

聊天机器人在自然语言处理 (NLP) 研究中得到广泛研究,并且是 NLP 在工业中的常见用例。由于聊天机器人旨在供客户和最终用户直接使用,因此验证聊天机器人在面对各种输入提示时的行为是否符合预期非常重要。 使用 gradio,您可以轻松构建聊天机器人模型的演示并与测试团队共享,或者使用直观的聊天机器人 GUI 自行测试。

本教程将展示如何采用预训练的聊天机器人模型并使用 Gradio 界面通过 4 个步骤进行部署。我们创建的实时聊天机器人界面看起来像这样(试试看!):

聊天机器人是有状态的,这意味着模型的预测可以根据用户之前与模型的交互方式而改变。因此,在本教程中,我们还将介绍如何在 Gradio 演示中使用状态。

Prerequisites

Make sure you have the gradio Python package already installed. To use a pretrained chatbot model, also install transformers and torch.

第 1 步 — 设置聊天机器人模型

首先,您需要有一个您自己训练过的聊天机器人模型,或者您需要下载一个预训练的模型。在本教程中,我们将使用来自 Hugging Face Hub 的预训练聊天机器人模型 DialoGPT 及其标记器,但您可以将其替换为您自己的模型。 这是从 Hugging Face 转换器加载 DialoGPT 的代码。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-medium")
model = AutoModelForCausalLM.from_pretrained("microsoft/DialoGPT-medium")

第 2 步 - 定义预测函数

接下来,您需要定义一个函数,该函数接收用户输入以及之前的聊天记录以生成响应。 对于我们的预训练模型,它将如下所示:

def predict(input, history=[]):
    # tokenize the new input sentence
    new_user_input_ids = tokenizer.encode(input + tokenizer.eos_token, return_tensors='pt')

    # append the new user input tokens to the chat history
    bot_input_ids = torch.cat([torch.LongTensor(history), new_user_input_ids], dim=-1)

    # generate a response 
    history = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id).tolist()

    # convert the tokens to text, and then split the responses into lines
    response = tokenizer.decode(history[0]).split("<|endoftext|>")
    response = [(response[i], response[i+1]) for i in range(0, len(response)-1, 2)]  # convert to tuples of list
    return response, history

让我们分解一下。该函数有两个参数:

  • 输入:这是用户在对话的特定步骤中(通过 Gradio GUI)输入的内容。
  • history:表示状态,由用户和机器人响应列表组成。要创建一个有状态的 Gradio 演示,我们必须传入一个参数来表示状态,并且我们将此参数的默认值设置为状态的初始值(在这种情况下,空列表,因为这是我们想要的开始时的聊天记录)。

然后,该函数对输入进行标记并将其与对应于先前用户和机器人响应的标记连接起来。然后,将其输入预训练模型以获得预测。最后,我们进行一些清理,以便我们可以从函数中返回两个值:

  • 响应:这是对应于所有用户和机器人响应的字符串元组列表。这将在 Gradio 演示中呈现为输出。
  • 历史变量,它是所有用户和机器人响应的令牌表示。在有状态的 Gradio 演示中,我们必须在函数结束时返回更新的状态。

第三步——创建一个Gradio界面

现在我们已经设置了预测功能,我们可以围绕它创建一个Gradio界面。

在这种情况下,我们的函数接受两个值,一个文本输入和一个状态输入。梯度中对应的输入组件是“文本text”和“状态state”。

该函数还返回两个值。我们将使用专用的“聊天机器人”组件显示响应列表,并使用“状态”输出组件类型作为第二个返回值。

请注意,不显示“状态”输入和输出组件。

import gradio as gr

gr.Interface(fn=predict,
             inputs=["text", "state"],
             outputs=["text", "state"]).launch()

这将产生以下界面,您可以在浏览器中尝试(尝试输入一些简单的问候语,如“Hi!”开始)

 

And you're done! That's all the code you need to build an interface for your chatbot model. Here are some references that you may find useful:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值