ChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践

个人使用感受

1.中英翻译超越了翻译软件,变成本地翻译最好软件了,回答英文时 有时单词之间没有空格

2.中文对话能基本理解意图,回答时会出现搜索式回答.相关内容,照抄网页相关内容原封不动显示出来,不精简提炼

3.不会做数学,简单2+3都不会 ,不然会更加强大

ChatYuan元语AI


元语智能开发团队训练了一个类似ChatGPT的功能型对话大模型ChatYuan.

类似ChatGPT模型, 中文开源版,功能型对话大语言模型.

功能有:支持训练端到端文本生成文本生成情感分析句子相似度零样本分类命名实体识别翻译自然语言推理问答文本纠错文本摘要FAQ问答文本分类

安装步奏

下载模型的是一个精简版,相对网站上运行的,毕竟个人台式机运行不了太大的模型.

电脑上必须有pytorch环境,

1.安装依赖

pip install "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple zhconv

2.运行代码,它就会自动下载模型到本地

# -*- coding: utf-8 -*-
"""
Created on Thu Feb  9 18:35:43 2023

@author: Administrator
"""

# -*- coding: utf-8 -*-
"""
Created on Thu Feb  9 18:13:31 2023

@author: Administrator
"""

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
# 修改colab笔记本设置为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])


while True:
    value = input('请输入问题(退出:exit):')
    if value.lower() =='exit':
        break;
    question = "用户:" + value + "?\n小元:"
    output_text = answer(question)
    result =  "\n小元:" +output_text+"\n"
    print(result)

它下载的模型 
http://www.modelscope.cn/api/v1/models/ClueAI/ChatYuan-large/repo?Revision=v1.0.0&FilePath=pytorch_model.binChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践http://xn--ghqu6tnb8117a

Revisionv1.0.0
大小2.92G
下载地址http://www.modelscope.cn/api/v1/models/ClueAI/ChatYuan-large/repo?Revision=v1.0.0&FilePath=pytorch_model.bin
保存路径 C:\Users\Administrator\.cache\modelscope\hub\temp\tmpx7_4oqem\tmp8v4l1jmm

在线网址

https://github.com/clue-ai/ChatYuanChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践https://github.com/clue-ai/ChatYuan

ModelScope 魔搭社区ChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践https://modelscope.cn/models/ClueAI/ChatYuan-large/summary

问答例子

问题: 他在去年的比赛中赢得了冠军,这让他更加自信了。翻译成英文

小元:He finished in last year's match, which he confided about.

问题: We waited at the train station for two hours, only to find out that our train had been canceled.翻译成中文

小元:我们在火车站等着两个小时,才得知我们的火车已经被取消了。

问题: 我的弟弟今年3岁了,姐姐的年龄是弟弟的2倍,当弟弟79岁时,姐姐将是多少岁?推理一下

小元:姐姐的年龄是弟弟的2倍,当弟弟79岁时,姐姐将是79(+2)岁。

问题: 小明45元卖出一顶帽子,收到一张100元假钞,找零55元,帽子进货价15元一顶,如果小明不知道他收到的是一张假钞,请问小明亏了多少钱?推理

小元:小明45元卖出一顶帽子,收到一张100元假钞,找零55元,帽子进货价15元一顶,如果小明不知道他收到的是一张假钞,请问小明亏了多少钱?推理:小明没有收到假钞的损失=45+55=55元,假设进货价为15元,则小明的损失为:15*55=14元

问题: 翻译成英文:我爱吃苹果但是不爱吃香蕉

小元:I like apples but not bananas

问题: 列出一些生活中问题,列出

小元:1、怎样才能使自己健康?2、怎样才能使自己的身体变强壮?3、怎样才能降低患癌的几率?4、怎样才能使自己的生活过得更好?5、怎样才能使身体变得更健康?6、怎样才能使自身的健康更强壮?7、怎样才能使身体健康更持久?8、怎样才能保持身体健康?9、怎样才能让自己成为一个对社会有用的人?10、怎样才能获得财富?11、怎样才能拥有快乐的生活?12、怎样才能活得更有意义?13、怎样才能有更健康的身体?14、怎样才能在竞争激烈的社会中生存?15、怎样才能得到别人的帮助?16、怎样才能不让自己的亲人和朋友受苦?17、怎样才能让自己的亲人和朋友开心?18、怎样才能远离病痛?19、怎样才能减少或减少疾病的发生?20、怎样才能避免患精神病?21、怎样才能健康地活到80岁?22、怎样才能长寿?23、怎样才能延长寿命?24、怎样才能提高生活质量?25、怎样才能过上幸福的生活?26、怎样才能快乐地享受生活?27、怎样才能走出精神的抑郁?28、怎样才能摆脱忧郁的困扰?29、怎样才能享受成功的喜悦?30、怎样才能面对生活的挑战?31、怎样才能取得成功?32、怎样才能克服情绪的烦恼?33、怎样才能把家庭和事业搞好?34、怎样才能战胜

请输入问题(退出:exit):今年2023年了

小元:对啊

请输入问题(退出:exit):今年2099年了

小元:是呀,我还以为你说的是2007年呢

请输入问题(退出:exit):当前的日期是?

小元:2018年9月2日

请输入问题(退出:exit):你会做数学题吗?

小元:会啊,但是感觉不太会。

请输入问题(退出:exit):1+1=

小元:在理论上,1+1=2,但是,在数学上,1-1=2是不可证明的。

请输入问题(退出:exit):圆周率小数点后10位

小元:圆周率小数点后第10位的系数是多少呢?对于我们来说,应该知道圆周率为小数位数的百分之几了,如果圆周率达到百分之几那么等于多少呢,圆周

请输入问题(退出:exit):鸡和兔放在一起,一共有20个头和50只脚,问鸡和兔各几只?

小元:兔:20头,50只脚,鸡:20脚,50头


请输入问题(退出:exit):numbers由几个字母组成

小元:答:numbers由九个字母组成,其中前三个字母是数字(num),后两个字母是字母(m)。


请输入问题(退出:exit):作一首诗,关于青年、社会、孤独、挣钱、工作。

小元:青春如梦, 生活如棋, 孤独如影, 挣钱如命。孤独如棋 生活似棋,生活似影, 我行我素,我行我活。工作如诗,工作如影。我行我不素,我只做自己。挣钱如梦 生活像棋,人生似棋。

请输入问题(退出:exit):评价一下iphene8手机

小元:说个自己用过的吧。iphene8的屏幕为6.45英寸,相比iPhon8的6.52英寸稍大,当然屏幕大小不同,但屏幕尺寸大小与iPhoenx8一样大。iPhenix8的后壳是塑料的,这个塑料材质对于后盖来说是比较硬的那种。由于是塑料材质,所以后盖的厚度比iPhix8轻薄很多,因此iPhanix8后盖厚度是6.1mm,比iphenx5的7mm要薄。iPHene8和iPenix5在外观上没有太大的区别,只是在屏体上有所不同。iMH系列在屏幕方面做得也是相当出色。i

请输入问题(退出:exit):写一篇日记,今天阴,开车出去买东西

小元:今天阴,我开车出去买东西。天空阴沉沉的,天空中没有一丝阳光,我开着车,一路上,我的心情非常糟糕,心里感到非常沮丧。

我买了一些东西,包括一些水果和一些蔬菜等,但这些东西都太贵了,所以我没有买下。
_
我回到家,妈妈告诉我,今天天气很好,我开车去了超市,买了好多东西,我很开心,我很高兴能够去超市购物。
……

请输入问题(退出:exit):下一次经济危机时间

小元:这个问题很难回答,因为经济危机的发生时间是不确定的,并且没有一个确切的时间表。但可以肯定的是,经济危机发生的时间不可能像1929年那样的短到一天之内。

请输入问题(退出:exit):出10条作文的题目

小元:第一:我认识你,你认识我。第二:我今天遇到你,我想和你一起上一个自习。第三:我昨天又遇到你了,今天我要和你一起上课。第四:我想给你写一封信。第五:我想告诉你我的故事,我想告诉你我的过去。第六:我想和你一起去看电影。第七:我想去看一场电影。第八:我想去一个地方。第九:我想和你说一个秘密。第十:我想陪你去酒吧。

请输入问题(退出:exit):你评价一下整天看小说的人

小元:看小说的人,其实是一个人内心有无限可能的人,他们可以把自己内心真正想说的话表达出来,在人与人交往的过程中,他们会根据真实情况做出适当反应,而这些反应是和小说里的内容有差别的。而小说,是完全虚构的,它所表达的,是人的内心对这个世界的想象,所以小说中的人物,都是自己想象出来的。所以,小说的作者是被作者自己想象和赋予了各种可能性,这种可能性就是小说中没有的东西。所以小说中的人,都是通过自己的想象,

请输入问题(退出:exit):三角形面积公式有哪些

小元:三角形面积公式:

1、三角形的面积为:
a = b = c = d

2、三角形的面积公式是:
(1)三角形面积=a * b * c

(2)三角形面积的计算公式是
a=b * r

3、三角形的三角形面积是计算三角形内角和的公式:

请输入问题(退出:exit):圆周率小数点后10位是几

小元:小数点后10位是3

PS:“圆周率精确到小数点后10位是3.1415926535


用户:西红柿炒鸡蛋怎么做

小元:1.准备材料:西红柿、鸡蛋;2.西红柿去皮、切块、切碎;3.热锅,倒入适量油,油热后,倒入鸡蛋快速翻炒;4.待鸡蛋液凝固后,加入西红柿翻炒;5.加入盐、生抽翻炒;6.加入少许水,盖上锅盖焖煮;7.煮至汤汁收干,出锅即可。


用户:用python写一个键盘记录器的代码

小元:function keystone(){
if (keystOne > 0) {
keystOut = keys[keystONE];
keys.append(keystMeta + keyspace[keyspade][keyname]) if (type(keys) == str or keynum >= 8) % 16 = 0 ;
} if keypath =="None" else keywords['Keywords']['keyword'] = input(
'Text:'+ inpUT(keyword) +
'
'); 
keyword = re.sub(grep, '\\1', keywrapper) 
if type(1, str)!= 'text':
args = [keyword]; s = sys.argv[0]; print(s); if len(arg) > 1


用户:用python写一个推箱子小游戏

小元:# 定义推箱子的游戏代码
class Terrain(object):

def __init__(self, *args, **kwarg):
super(Terrai Integer, self).__insert__(1)
sellow = argv[1]
scroll = sellow.scrown()
stop = 0
for i in range(0, len(arg) – 1):
sys.stdout.write('Starting Game')
if i < len:
slices.append(screopen(stop, i))
else:
print('All items are pushed by scroll')

界面版

 ChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践

 

# -*- coding: utf-8 -*-
"""
Created on Sat Feb 18 22:04:25 2023

@author: Administrator
"""

import tkinter as tk

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
# 修改colab笔记本设置为gpu,推理更快
device = torch.device('cuda')
model.to(device)
def preprocess(text):
  text = text.replace("\n", "\\n").replace("\t", "\\t")
  return text


_output_scores_=True

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=10240, return_tensors="pt").to(device) 
  if not sample:
    out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=10240, num_beams=1, length_penalty=0.6)
  else:
    out = model.generate(**encoding,
                         return_dict_in_generate=True,
                         output_scores=_output_scores_, 
                         max_new_tokens=10240,
                         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])


# 创建主窗口
root = tk.Tk()
root.title("ChatYuan元语AI:小元")
root.geometry("800x600+{}+{}".format(root.winfo_screenwidth() // 2 - 400, root.winfo_screenheight() // 2 - 350))

# 创建输入框和滚动条
input_frame = tk.Frame(root)
input_label = tk.Label(input_frame, text="用户:")
input_text = tk.Text(input_frame, height=10, width=87,padx=6, pady=6)
input_scrollbar = tk.Scrollbar(input_frame)
input_text.config(yscrollcommand=input_scrollbar.set)
input_scrollbar.config(command=input_text.yview)
input_label.pack(side="left")
input_text.pack(side="left",pady=10)
input_scrollbar.pack(side="right", fill="y")
input_frame.pack()

# 创建按钮
button_frame = tk.Frame(root)
def show_text():
    
    #清空 Tkinter Text 组件中的文本
    output_text.delete('1.0', 'end')
    
    question = "用户:" + input_text.get("1.0", "end-1c")  + "\n小元:"
    output_answer = answer(question)
    result =  output_answer
    #第一部分是 "end",表示要添加到输出文本框的末尾;第二部分是 input_text.get("1.0", "end-1c") + "\n",表示要添加的文本内容,即输入文本框中的所有文本,加上一个换行符。这是用来获取输入文本框中的所有文本的语句。"1.0" 表示从第一行第一个字符开始获取文本,"end-1c" 表示获取到文本框的结尾,减去一个字符,也就是最后的换行符。这样可以确保获取到的文本不包括结尾的换行符,以免在添加到输出文本框时出现多余的空行。
    output_text.insert("end", result)
    
button = tk.Button(button_frame, text="回答", command=show_text,width=6, height=3)
button.pack(pady=10)
button_frame.pack()



# 创建输出框和滚动条
output_frame = tk.Frame(root)
output_label = tk.Label(output_frame, text="小元:")
output_text = tk.Text(output_frame, height=26, width=87,padx=6, pady=6)
output_scrollbar = tk.Scrollbar(output_frame)
output_text.config(yscrollcommand=output_scrollbar.set)
output_scrollbar.config(command=output_text.yview)
output_label.pack(side="left",pady=10)
output_text.pack(side="left",pady=10)
output_scrollbar.pack(side="right", fill="y")
output_frame.pack()



def copy():
    global text
    text.event_generate("<<Copy>>")

def cut():
    global text
    text.event_generate("<<Cut>>")

def paste():
    global text
    text.event_generate("<<Paste>>")




# 创建右键菜单
menu = tk.Menu(root, tearoff=0)
menu.add_command(label="复制", command=copy)
menu.add_command(label="剪切", command=cut)
menu.add_command(label="粘贴", command=paste)

# 绑定鼠标右键(第一个文本框)
def show_menu1(event):
    global text
    text = input_text
    menu.post(event.x_root, event.y_root)

input_text.bind("<Button-3>", show_menu1)

# 绑定鼠标右键(第二个文本框)
def show_menu2(event):
    global text
    text = output_text
    menu.post(event.x_root, event.y_root)

output_text.bind("<Button-3>", show_menu2)


root.lift()
# 运行主循环
root.mainloop()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月4日 下午4:22
下一篇 2023年3月4日 下午4:23

相关推荐