Blenderbot的简介

399 阅读6分钟

Blenderbot简介

Blenderbot模型可以通过Hugging Face变换器库获得。Hugging Face是一个Python中的开源库,可以让你利用一些最先进的自然语言处理模型。

前提条件

  • 熟悉自然语言处理(NLP)是关键。
  • 你需要熟悉[机器学习]建模。

Blenderbot模型

Blender聊天机器人模型(BlenderBot 1.0)是在2020年4月30日的论文《[构建开放领域聊天机器人的食谱]》中首次提出的。这是一个深度学习模型,经过训练,可以像对话代理一样进行互动和回应。

最新的版本是BlenderBot 2.0。该模型使用一个标准的基于seq2seq模型转化器的架构来产生反应。这个架构使用Transformers 作为基础,最初由谷歌的研究团队在本文[中]提出。

这个模型有多种用例。我们可以用它来构建聊天机器人、虚拟代理和辅助代理。聊天机器人和代理可以用于商业中,与客户进行互动。

为什么要使用Blenderbot,而不是其他对话式人工智能模型?

对话式代理受到短期记忆的影响,只限于他们所受的训练。BlenderBot模型可以建立长期记忆,以便持续访问。此外,它可以在这样做的同时,在互联网上搜索最新的信息,并就几乎任何话题进行对话。

使用Blenderbot模型构建聊天机器人

当你看一下Blenderbot,你会发现该模型有三个变体;90M、2.7B和9.4B参数模型。然而,有一个模型有4亿个参数。这就是我们在本教程中要利用的那个模型。

安装和导入依赖项

我们需要安装的第一个依赖项是PyTorch。请前往PyTorch的[网站],选择你的偏好。这将根据你选择的偏好,即Python、Pip、Linux等,生成一个安装命令。运行生成的安装命令来安装PyTorch。

!pip3 install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio==0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html

我们要安装的第二个依赖是Hugging face变换器。值得注意的是,transformers 这个依赖关系将自动处理Blenderbot模型的下载。所以,我们不需要单独下载模型。

!pip install transformers

现在我们所有的依赖都已经安装好了。让我们把模型类和标记器导入我们的Colab。标记器将自然文本从一个字符串转换为一连串的标识符,这些标识符映射到每个单词。我们把这些标识符称为标记。然后,这些标记被传递到我们的机器学习模型中。

from transformers import BlenderbotTokenizer, BlenderbotForConditionalGeneration

我们已经导入了两个类,即BlenderbotTokenizer ,和BlenderbotForConditionalGeneration 类。BlenderbotTokenizer 帮助将自然语言转换为标记,而BlenderbotForConditionalGeneration 则持有模型本身,使响应生成。

现在我们需要下载并设置模型和标记器。

tokenizer = BlenderbotTokenizer.from_pretrained("facebook/blenderbot-400M-distill")
model = BlenderbotForConditionalGeneration.from_pretrained("facebook/blenderbot-400M-distill")

这是一个相当大的模型,它可能需要一些时间来下载。我们已经下载了预训练的模型,facebook/blenderbot-400M-distill ,有4亿个参数。

你也可以在这里下载不同的模型。例如,你可以加载具有9000万或20亿参数的模型。

测试Blenderbot模型

最后一步是将一些自然语言传递给模型,像我们在自然语言处理中通常做的那样将其转换为标记,并从聊天机器人那里得到回应。每当你与聊天机器人一起工作时,他们把输入的文本称为utterance 。让我们创建一个新的变量,称为utterance ,并输入我们的字符串。

utterance = "My name is Jackson, and I'm studying Computer Science"

如前所述,机器不理解自然语言;它们只理解数字/符号。因此,让我们对这个utterance 进行标记化。

inputs = tokenizer(utterance, return_tensors = "pt")

tokenizer()接收两个参数,一个是包含我们输入的utterance 变量,另一个是返回PyTorch张量(pt)的return_tensors

在我们的终端运行inputs 命令,输出以下结果。

{'input_ids': tensor([[ 863, 1356,  315, 4798, 3087,   19,  298,  281,  476, 1616, 1471, 2713,
         2984,  276, 2236, 1142,    2]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

上面的结果显示,它生成了一个包含input_idsattention_mask 的字典。这两个值是我们需要传入我们的模型以生成一个响应。我们需要把这个输入传到Blenderbot模型中。

我们用下面的命令来做这件事。

results = model.generate(**inputs)

运行上述命令,就会产生一个输出。

tensor([[   1, 3490,  287, 2273,  304,   19, 4798, 3087,   21,  714,  361,  304,
          538,  287,  361,  517,  304, 5055,  470,   38,    2]])

这就是模型的响应。对我们人类来说,这只是一串数字。让我们把这个结果解码成自然语言,以便我们能够理解它。

tokenizer.decode(results[0])

我们之所以使用[0] ,是因为在我们上面的结果中,你会注意到,输出被存储在两个数组内。我们需要把它提取出来,这样我们就可以把它放在一组数组里。

这是我们的输出。

Nice to meet you, Jackson. What do you want to do when you graduate?

该模型产生了一个响应。而且不只是一个响应。它是一个有意义的响应。令人印象深刻,对吗?

这就是Blenderbot模型的实时工作。我们所做的只是传递我们的语料,并对它们进行标记。然后,该模型接受这些输入并输出一个序列。然后我们对这个输出进行解码,使其成为人类可读的。你可以尝试传入任何你喜欢的输入,看看你会得到什么输出。

这个模型可能会输出一些不正确的反应,而且有时可能会丢失上下文。但请记住,这个模型只在400M的参数上训练过。与其他机器学习模型一样,我们知道,你训练得越多,你的结果就越准确。你可以用2.7B9B 参数来尝试这个模型,看看你会得到什么。

只有一个注意事项,确保你的机器有足够的计算能力来处理那些有大参数的模型。

正如大多数对话代理的情况一样,它们往往会表现出偏见和毒性。他们倾向于放大他们所训练的数据中的种族、宗教和性别偏见。然而,这些问题正在被解决。

与BlenderBot 2.0一样,"安全配方 "已经被实施,以减少其中的一些攻击性反应。

此外,主要的研究论文表明,正如增加参数的数量对提高模型的准确性很重要一样;Blenderbot模型适当地显示知识、同理心和个性,同时仍然保持一致的角色定位。这一点你可以在探索你的输出结果时进行分析。

收尾工作

这是一个相对简单的教程。代码很简单,容易理解。如果你愿意,你可以把这个构建进一步扩展一下。该模型可以被集成到虚拟代理和聊天机器人中,并部署到网站上,以允许客户端的用户对话。