【AIGC】基于大语言模型构建多语种聊天机器人(基于Bloom大语言模型)

简介: 【5月更文挑战第8天】基于大语言模型Bloom构建多语种聊天机器人

[toc]


ChatGPT 是多语言的,但是,它不会产生与用英语查询它相同的高性能。同时,对于非英语人士来说,这可能也是障碍,原因有二:

  • 有效提示词
    当英语不是你的第一语言时,生成完全表达你意思的切中要害的问题可能很困难,而且 ChatGPT 或其他语言模型对你的要求感到困惑的情况并不少见,至少在他们的第一个答案中是这样。
  • 跨语言结果不可靠
    当试图用你的母语与LLM交谈时,你可能会遇到尴尬的措辞,错误或解释习语和其他日常表达的困难。

如果我们能从头开始生成一个多语言的LLM,那就太好了。我们也可以决定在已经存在的基于英语的模型上构建,而无需微调或重新训练它们,而是使用一个聪明的解决方法:我们可以使用一个过滤函数,该函数能够将用户的母语查询翻译成英语,将其提供给 LLM 并检索响应,最终将从英语回译为原始语言。 想尝试吗?让我们使用一些 python 来构建它!

1.导入依赖库

要构建多语言聊天机器人,您需要多个依赖项,可以通过 pip 安装这些依赖项:

python3 -m pip install transformers==4.39.3 \
langdetect==1.0.9 \
deep-translator==1.11.4 \
torch==2.1.2 \
gradio==4.28.3

让我们看看这些包有什么作用:

  • transformers 是 Hugging Face 的一个软件包,可帮助您与 HF Hub (GitHub) 上的模型进行交互
  • langdetect 是一个用于自动语言检测 (Github) 的软件包
  • deep-translator 是一个基于多个翻译服务 (GitHub) 的句子翻译包
  • torch 是一个用于在 python (GitHub) 中管理张量和动态神经网络的包
  • gradio 是一个包,旨在简化 Python 和其他语言 (GitHub) 的应用程序界面开发

2.后端架构设计及实现

我们需要构建一个如下所示的后端架构

让我们定义一个 Translation 类,帮助我们检测原始语言并对其进行翻译:

from langdetect import detect
from deep_translator import GoogleTranslator

class Translation:
    def __init__(self, text, destination):
        self.text = text
        self.destination = destination
        try:
            self.original = detect(self.text) # detect original
        except Exception as e:
            self.original = "auto" # if it does not work, default to "auto"
    def translatef(self):
        translator = GoogleTranslator(source=self.original, target=self.destination) # use Google Translate, one of the fastest translators available
        translation = translator.translate(self.text)
        return translation

正如你所看到的,这个类将我们想要翻译的text(文本)和我们想要翻译的语言(destination)作为参数。

现在让我们加载我们想要用于我们目的的 LLM:我们将从 Bigscience 的 Bloom-1.7B 开始,这是一个中等大小的 LLM,非常适合 16GB RAM、2 核 CPU 硬件。

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

model = AutoModelForCausalLM.from_pretrained("bigscience/bloom-1b7") # import the model
tokenizer = AutoTokenizer.from_pretrained("bigscience/bloom-1b7") # load the tokenizer

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=2048, repetition_penalty=1.2, temperature=0.4) # prepare the inference pipeline

我们定义了生成token的最大数量(2048),将重复惩罚设置为1.2,以避免模型一遍又一遍地重复同样的事情,并且我们将温度(生成响应的“creativity”)保持在相当低的水平。

现在,让我们创建一个函数,它能够从聊天中获取消息,将其翻译成英语(除非它已经是英语),将其作为提示提供给 Bloom,检索英语响应并将其反向翻译成原始语言:

def reply(message, history):
    txt = Translation(message, "en")
    if txt.original == "en":
        response = pipe(message)
        return response[0]["generated_text"]
    else:
        translation = txt.translatef()
        response = pipe(translation)
        t = Translation(response[0]["generated_text"], txt.original)
        res = t.translatef()
        return res

我们已经拥有了后端架构所需的一切,是时候构建前端接口了!

3.构建接口

使用 Gradio,构建用户界面就像一行代码一样简单:

demo = gr.ChatInterface(fn=reply, title="Multilingual-Bloom Bot")

现在,我们可以使用以下命令启动应用程序:

demo.launch()

我们将整个脚本保存在一个名为 chat.py 的文件中,为了使聊天机器人运行,我们转到终端并键入:

python3 chat.py

小结

本节我们学习了开源项目 bloom-multiligual-chatbot,这是一个多语言聊天机器人,我们使用bloom-1b7作为我们的AI基础模型,通过Gradio构建我们的web应用程序,通过本节的学习,相信读者对AI及聊天机器人架构及实践会有一个更加深入的了解。

github地址:https://github.com/AstraBert/bloom-multilingual-chatbot/

小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!

目录
相关文章
|
18天前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
2月前
|
人工智能 自然语言处理 机器人
用Python构建你的第一个聊天机器人
【10月更文挑战第7天】在这篇文章中,我们将一起探索如何利用Python编程语言和AI技术,一步步打造一个基础的聊天机器人。无论你是编程新手还是有一定经验的开发者,都能通过这个指南获得启发,并实现一个简单的对话系统。文章将引导你理解聊天机器人的工作原理,教你如何收集和处理用户输入,以及如何设计机器人的响应逻辑。通过动手实践,你不仅能够学习到编程技能,还能深入理解人工智能在语言处理方面的应用。
64 0
|
4月前
|
前端开发 JavaScript 机器人
从零开始构建一个聊天机器人
【8月更文挑战第7天】构建聊天机器人是一个涉及多个步骤和技术的复杂过程。从前期准备到实际部署,每一步都需要仔细规划和执行。通过不断学习和实践,你可以逐步掌握构建聊天机器人的技巧和方法,为企业创造更大的价值。
|
4月前
|
Apache UED 数据安全/隐私保护
揭秘开发效率提升秘籍:如何通过Apache Wicket组件重用技巧大翻新用户体验
【8月更文挑战第31天】张先生在开发基于Apache Wicket的企业应用时,发现重复的UI组件增加了维护难度并影响加载速度。为优化体验,他提出并通过面板和组件重用策略解决了这一问题。例如,通过创建`ReusableLoginPanel`类封装登录逻辑,使得其他页面可以轻松复用此功能,从而减少代码冗余、提高开发效率及页面加载速度。这一策略还增强了应用的可维护性和扩展性,展示了良好组件设计的重要性。
57 0
|
4月前
|
人工智能 自然语言处理 机器人
掌握未来沟通的艺术:运用TensorFlow与自然语言处理(NLP)技术,从零开始构建你的专属智能对话机器人,让机器理解你的一言一行
【8月更文挑战第31天】本文详细介绍如何利用TensorFlow与自然语言处理技术开发对话机器人。从准备问答数据集开始,通过预处理、构建Seq2Seq模型、训练及预测等步骤,最终实现了一个简易的聊天机器人。示例代码涵盖数据加载、模型搭建及对话功能,适合希望在实际项目中应用AI技术的开发者参考。
49 0
|
5月前
|
数据采集 自然语言处理 算法
AIGC使用问题之GPT-3的数据集是如何构建的
AIGC使用问题之GPT-3的数据集是如何构建的
|
5月前
|
监控 算法 物联网
LLaMA-Factory:大语言模型微调框架 | AIGC
LLaMA-Factory 是一个国内北航开源的低代码大模型训练框架,专为大型语言模型(LLMs)的微调而设计【7月更文挑战第5天】
465 9
|
5月前
|
物联网 PyTorch 算法框架/工具
介绍一个大语言模型的微调框架Swift | AIGC
介绍一个大语言模型的微调框架Swift 【7月更文挑战第4天】
450 3
|
4月前
|
机器学习/深度学习 自然语言处理 索引
AIGC:LLM大型语言模型是怎么交流的? ———分词
AIGC:LLM大型语言模型是怎么交流的? ———分词
|
6月前
|
人工智能 自然语言处理 机器人
【AIGC】大型语言模型在人工智能规划领域模型生成中的探索
【AIGC】大型语言模型在人工智能规划领域模型生成中的探索
103 6