ChatGpt那么火,怎么用国内开源模型搭建你自己的聊天机器人

举报
码上开花_Lancer 发表于 2023/03/28 11:06:02 2023/03/28
【摘要】 这两天,ChatGPT在社交网络大火,很多小伙伴都在想着体验一下这个新鲜事物。这里主要跟读者们做一个简单的分享,让大家用几分钟的时间对ChatGPT及其背后的AI技术流派有个快速的了解ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布  。ChatGPT是人工智能技术驱动的自

1.背景描述

这两天,ChatGPT在社交网络大火,很多小伙伴都在想着体验一下,但是国内又没有环境,怎么能让大家用几分钟的时间对ChatGPT及其背后的AI技术流派有个快速的了解呢?ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布  。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文 等任务。因为目前国外没有开源GPT3.5,怎么利用国内的类似的大模型搭建属于自己的聊天机器人呢?

本次使用T5模型搭建自己的聊天机器人,下面给大家介绍T5的模型特点。

2.概述


T5是一个统一的模型框架,将各类NLP任务都转化为Text2text任务(即无监督/有监督的文本生成预训练任务),使得这些任务在训练时能够使用相同的目标函数,在测试时使用相同的解码过程。


3.T5模型结构介绍

与Transformer的encoder-decoder结构大致一致:

但主要有以下几点不同:

  • 删除了LayerNorm中的bias
  • 将LayerNorm操作放在了残差连接后
  • 使用了一种相对位置编码的方案
    (顺带一提,上述改动是最原始的T5,后续谷歌又对T5做了优化,即T5.1.1)主要升级:
  • 改进了FFN部分,将relu激活的第一个变换层改为了gelu激活的门控线性单元
  • T5.1.1只让Encoder和Decoder的Embedding层共享,而Decoder最后预测概率分布的Softmax层则用了一个独立的Embedding矩阵(之前是三个层都共享一个Embedding矩阵)在预训练阶段去掉了dropout,只有微调的时候使用dropout

输入输出格式:

类似于显式prompt的形式,人工设计了前缀来提示T5需要解决的任务类型,如图1所示。

translate English to German: + [sequence]:翻译任务
cola sentence: + [sequence]: CoLA语料库,微调BERT模型。
stsb sentence 1:+[sequence]:语义文本相似基准。自然语言推理和蕴涵是类似的问题。
summarize + [sequence]:文本摘要问题。
这样的话,NLP任务就被统一成了:
Prefix + sequence A -> sequence B

一系列的实验
最后作者进行了一系列的实验确定了T5模型的最终结构和训练方式(有钱真好):

模型架构:类似于Transformer的Encoder-decoder;
无监督训练目标:采用span-corruption目标,类似SpanBERT的做法;
预训练策略:采用multi-task预训练方式(即无监督任务和有监督任务一起预训练)

4.接下来我们一起动手实操吧:

一.安装需要的包

# 安装需要的项目和包
!git clone https://github.com/huggingface/transformers.git
!pip install ./transformers
!pip install sentencepiece
Downloading http://repo.myhuaweicloud.com/repository/pypi/packages/42/d8/8a7131e7d0bf237f7bcd3191541a4bf21863c253fe6bee0796900a1a9a29/regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB)
     |████████████████████████████████| 757 kB 64.1 MB/s eta 0:00:01
Requirement already satisfied: packaging>=20.0 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (21.3)
Collecting tokenizers!=0.11.3,<0.14,>=0.11.1
  Downloading http://repo.myhuaweicloud.com/repository/pypi/packages/82/66/7a476341defe398542f93d4188f85dd71c21933c2806cc669fcbcbe8f429/tokenizers-0.13.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB)
     |████████████████████████████████| 7.6 MB 64.9 MB/s eta 0:00:01[K     |█████▍                          | 1.3 MB 64.9 MB/s eta 0:00:01�██████████████▎      | 6.0 MB 64.9 MB/s eta 0:00:01
Requirement already satisfied: pyyaml>=5.1 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (5.1)
Collecting huggingface-hub<1.0,>=0.11.0
  Downloading http://repo.myhuaweicloud.com/repository/pypi/packages/41/76/50cd8ffb78fa5ef9b11e972ee92514aafd99790e838a1eafbde6a28b3962/huggingface_hub-0.12.0-py3-none-any.whl (190 kB)
     |████████████████████████████████| 190 kB 25.0 MB/s eta 0:00:01
Requirement already satisfied: tqdm>=4.27 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (4.64.1)
Requirement already satisfied: importlib-metadata in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (5.0.0)
Requirement already satisfied: filelock in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (3.0.12)
Requirement already satisfied: numpy>=1.17 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from transformers==4.27.0.dev0) (1.19.5)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from huggingface-hub<1.0,>=0.11.0->transformers==4.27.0.dev0) (4.4.0)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from packaging>=20.0->transformers==4.27.0.dev0) (3.0.9)
Requirement already satisfied: zipp>=0.5 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from importlib-metadata->transformers==4.27.0.dev0) (3.10.0)

二.加载模型

from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("ClueAI/ChatYuan-large-v1")
model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v1")

三、搭建问答、写作助手

# 使用
import torch
from transformers import AutoTokenizer
# 修改设置为gpu,推理更快
device = torch.device('cuda')
model.to(device)
def preprocess(text):
  text = text.replace("\n", "\\n").replace("\t", "\\t")
  return text

def postprocess(text):
  return text.replace("\\n", "\n").replace("\\t", "\t")

def answer(text, sample=True, top_p=1, temperature=0.7):
  '''sample:是否抽样。生成任务,可以设置为True;
  top_p:0-1之间,生成的内容越多样'''
  text = preprocess(text)
  encoding = tokenizer(text=[text], truncation=True, padding=True, max_length=768, return_tensors="pt").to(device) 
  if not sample:
    out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=512, num_beams=1, length_penalty=0.6)
  else:
    out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=512, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=3)
  out_text = tokenizer.batch_decode(out["sequences"], skip_special_tokens=True)
  return postprocess(out_text[0])
print("end...")

四、测试效果

input_text= "介绍下华为云"
print(f"示例".center(50, "="))
input_text = "用户:" + input_text + "\n小艺:"
output_text = answer(input_text, sample=True)
print(f"{input_text}{output_text}")

输出效果:

========================示例========================
用户:介绍下华为云
小艺:华为云是全球领先的云计算平台,支持PC、移动端、物联网等不同终端设备,为企业提供云计算、大数据、虚拟化、人工智能等解决方案。华为云通过云计算和人工智能技术,为企业用户提供安全、稳定、可靠的基础服务,如企业级大数据、云计算数据中心、云计算平台建设、网络应用托管等。


input_text0 = "帮我写一篇使用华为云ModelArts的介绍,300字左右"
input_text1 = "你能干什么"
input_text2 = "用英文写一封道歉的邮件,表达因为物流延误,不能如期到达,我们可以赔偿贵公司所有损失"
input_text3 = "写一个文章,题目是未来城市"
input_text4 = "写一个诗歌,关于冬天"
input_text5 = "从南京到上海的路线"
input_text6 = "学前教育专业岗位实习中,在学生方面会存在问题,请提出改进措施。800字"
input_text7 = "根据标题生成文章:标题:屈臣氏里的化妆品到底怎么样?正文:化妆品,要讲究科学运用,合理搭配。屈臣氏起码是正品连锁店。请继续后面的文字。"
input_text8 = "帮我对比几款GPU,列出详细参数对比,并且给出最终结论"
input_list = [input_text0, input_text1,input_text2,input_text3,input_text4,input_text5,input_text6,input_text7,input_text8]
for i, input_text in enumerate(input_list):
  input_text = "用户:" + input_text + "\n小艺:"
  print(f"示例{i}".center(50, "="))
  output_text = answer(input_text)
  print(f"{input_text}{output_text}")
=======================示例0========================
用户:帮我写一篇使用华为云ModelArts的介绍,300字左右
小艺:华为云ModelArts(简称MA)是一个基于云计算的人工智能平台,可以提供图像识别、自然语言理解、图像识别等人工智能技术。它可以帮助用户快速地创建、管理和可视化图像,帮助用户更好地理解、分析、处理和分析图像。Mart可以帮助用户在虚拟现实、增强现实和智能机器人等场景中快速地完成图像识别和文本理解,并利用人工智能技术,帮助他们创建智能机器人模型。MedelArt可以让用户快速获取、分析并使用图像数据,从而提高他们的工作效率、数据准确性和准确性。同时,Mart还可以帮助用户快速、直观地可视化图像。

Mart能够帮助用户在多种场景中实现图像识别,包括在虚拟现实和增强现实场景中。用户可以通过Mart扫描用户的照片,并生成完整的图像。然后,Medder可以将其转换为用户自己设计的动画片段,让用户在观看时能更好地理解图像。此外,Modeller还可以帮助Mart进行图像分析,以帮助用户更快速地理解图像,并更好地理解人物表情。此外Mart还支持用户自定义图像数据的可视化操作,用户可以根据需要创建各种不同的可视化图像数据。
总之,Merart可以帮助用户的
=======================示例1========================
用户:你能干什么
小艺:您好!我是元语AI。我可以回答您的问题、写文章、写作业、翻译,对于一些法律等领域的问题我也可以给你提供信息。
=======================示例2========================
用户:用英文写一封道歉的邮件,表达因为物流延误,不能如期到达,我们可以赔偿贵公司所有损失
小艺:Dear Company,

I am sorry to express our apology for the delay on your logistics arrived or not as scheduled. We all understand that we can make an excuse more than anything but at least compensate for your losses.

We are very grateful for the drop in record of your product, but hope you will cope with our sorrow.
I will expect the company to offer an apologies for all the loss from you.
Thank you. 

Sincerely,
Dear companies
=======================示例3========================
用户:写一个文章,题目是未来城市
小艺:未来城市是由各种科技组成的,每个科技都将拥有自己独特的内涵。在城市中,人们可以充分利用科技,创造舒适、时尚、活力的城市环境,提高生活质量。

未来的城市会以自然为主题,让人们在城市里体验自然的美丽。例如,公园、博物馆、游乐场、图书馆等,人们可以在这些地方享受自然的馈赠。此外,城市还会充分利用科技技术,建造更多的公共设施,让城市变得更加便捷。
_
未来城市也将用科技解决社会问题,提高人们的生存质量,改善城市环境,减少环境污染,让人们的生活更加美好。
总之,未来的城市将是充满活力的,充满希望的,富有创新的精神的。
=======================示例4========================
用户:写一个诗歌,关于冬天
小艺:冬雪 
凝霜 
笼罩 
寒气逼人 
弥漫 
大地 
冰封 
在远方 
我独自 
冷意重重 
风雪 寂寞 
孤独 
在这冬天 
寒冷的夜空 
只有梦......
=======================示例5========================
用户:从南京到上海的路线
小艺:从南京到上海的路线有: 1、从南京乘坐机场大巴,在玄武门站下,换乘地铁1号线; 2、乘坐地铁1号,在南京火车站换乘地铁2号线;
3、乘坐地铁2号,到南京南站换乘地铁3号线;
=======================示例6========================
用户:学前教育专业岗位实习中,在学生方面会存在问题,请提出改进措施。800字
小艺:幼儿师范专业岗位实习中,学生方面会存在一些问题,需要采取适当的改进措施。

首先,要明确实习的目标,明确实习的内容,让学生更清楚地了解学前教育的内容,提高学生对学前教育的认识,增强学生的责任心,增强学生对幼儿园的认识,使学生对学前教育有正确的认识,从而更好的投入到工作中去。
其次,要加强学生的思想教育,提高学生的综合素质,让他们树立正确的人生观,树立正确的价值观,增强他们的责任心,提高他们的职业道德,使他们能够遵纪守法,养成良好的行为习惯。
最后,要通过加强学生自身素质的培养,培养学生的独立思考能力,提高他们的思维水平,让他们对幼儿园的事物有一个正确的认识和判断,从而更好地适应工作岗位。
总之,在学前教育专业的岗位实习过程中,学生需要采取有效的改进措施,不断加强学生的能力,提高学生的学习水平,从而有效地提高学生的社会水平,为国家的教育事业作出贡献。
=======================示例7========================
用户:根据标题生成文章:标题:屈臣氏里的化妆品到底怎么样?正文:化妆品,要讲究科学运用,合理搭配。屈臣氏起码是正品连锁店。请继续后面的文字。
小艺:屈臣氏里的化妆品到底怎么样?艺 苑 家 国 药 妆 店 屈 臣 氏 国药 宝 家 - 屈屈臣臣氏,从屈臣士开业起,已经走过了27个年头。在短短的27年里,屈臣仕的生意蒸蒸日上。从屈屈士的前身——华美堂,到如今的屈臣,这家历史悠久的药妆店,在屈臣世家里屹立多年,让更多爱美的女性实现了美丽梦想。屈臣夫人,是屈臣家最有名的女性“御用”,她是屈臣家族的女中豪杰,也是屈臣家的创始人,她为屈臣家族作出了不可磨灭的贡献。屈屈夫人,从诞生那天起,就以她独特出众的气质,吸引了众多时尚女性的目光,屈屈氏也因她而更加美丽动人。屈礼氏,是中华老字号,是中国传统医药的代名词。屈氏,诞生于中国,并一直延续至今,是传统医药与现代科技完美结合的典范。屈大夫,中国中医世家,也是中国中医界著名的中医专家,其精湛的医术和高尚的医德,被誉为“国医”。屈
=======================示例8========================
用户:帮我对比几款GPU,列出详细参数对比,并且给出最终结论
小艺:

1 :NVIDIA GeForce 4 MX 256GB GTX1060 显卡

2:AMD Radeon Radeus 9000 GT X1060

3:Nvidia Geforce GT 950 GTx 1070

4:Novell NVIDIATX 1280 GT*3

5:AMD Phenom II X4 GT 340 GT显卡


看起来效果还不错哦,大家赶快一起来AI Gallery尝试下吧 ChatGpt那么火,怎么用国内开源模型搭建你自己的聊天机器人



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。