一、介绍:
项目开源地址:clue-ai/ChatYuan: ChatYuan
ChatYuan-large-v2
是一个支持中英双语的功能型对话语言大模型,是继ChatYuan系列中ChatYuan-large-v1
开源后的又一个开源模型。ChatYuan-large-v2使用了和 v1版本相同的技术方案,在微调数据、人类反馈强化学习、思维链等方面进行了优化。
ChatYuan-large-v2是ChatYuan系列中以轻量化实现高质量效果的模型之一,用户可以在消费级显卡、 PC甚至手机上进行推理(INT4 最低只需 400M )。
在chatyuan-large-v1的原有功能的基础上,我们给模型进行了如下优化:
- 增强了基础能力。原有上下文问答、创意性写作能力明显提升。
- 新增了拒答能力。对于一些危险、有害的问题,学会了拒答处理。
- 新增了代码生成功能。对于基础代码生成进行了一定程度优化。
- 新增了表格生成功能。使生成的表格内容和格式更适配。
- 增强了基础数学运算能力。
- 最大长度token数扩展到4096。
- 增强了模拟情景能力。
- 新增了中英双语对话能力。
👀 PromptCLUE-large在1000亿token中文语料上预训练, 累计学习1.5万亿中文token, 并且在数百种任务上进行Prompt任务式训练. 针对理解类任务, 如分类、情感分析、抽取等, 可以自定义标签体系; 针对多种生成任务, 可以进行采样自由生成。
二、下载模型
链接:https://pan.baidu.com/s/1g19pf7Qo5upaSAZteDteGQ?pwd=ygcx
提取码:ygcx
–来自百度网盘超级会员V4的分享
三、配置环境
conda create -n ChatYuan python=3.8
conda activate ChatYuan
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
pip install clueai==0.0.2.2.4 gradio==3.20.1 transformers==4.26.1
conda install -c conda-forge sentencepiece
官网下载
官方下载地址:https://huggingface.co/ClueAI/ChatYuan-large-v2/
将下载后的所有文件放置在项目目录D:\dataddd\ChatYuan\ClueAI\ChatYuan-large-v2
内,注意目录名称的大小写和结构,按此结构放置模型可以不用修改任何配置文件。
网盘下载
链接:https://pan.baidu.com/s/1g19pf7Qo5upaSAZteDteGQ?pwd=ygcx
提取码:ygcx
–来自百度网盘超级会员V4的分享
本站已整理好模型相关路径,下载该压缩包之后,将会得到一个名为ClueAI
的文件夹,将其移动至D:\dataddd\ChatYuan
目录下即可,无需修改任何文件。
模型移动后的目录结果应该如下:
D:\dataddd\ChatYuan
└─ClueAI //下载的模型文件夹
└─ChatYuan-large-v2 //模型目录名称
└─distributed-training
└─imgs
└─MyENV
四、运行
使用教程
启动ChatYuan的方法非常简单,按顺序执行如下代码即可。
python app_gradio.py
如果启动成功,将会在CMD窗口内看到如下内容:
(D:\dataddd\ChatYuan\MyENV) D:\dataddd\ChatYuan>python app_gradio.py
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\inputs.py:27: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components
warnings.warn(
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect
warnings.warn(value)
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `numeric` parameter is deprecated, and it has no effect
warnings.warn(value)
Running on local URL: http://127.0.0.1:7860
Running on public URL: https://d62e22989b1480d29b.gradio.live
如果您未安装Torch和CUDA等依赖环境,将会看到如下报错如下报错,参上面的PyTorch部分解决。
(D:\dataddd\ChatYuan\MyENV) D:\dataddd\ChatYuan>python app_gradio.py
Traceback (most recent call last):
File "D:\dataddd\ChatYuan\app_gradio.py", line 4, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
UI界面
在成功运行之后,我们可以通过浏览器打开网址http://127.0.0.1:7860,打开后将会看到如下界面:
五、效果展示
映入眼帘的是关于ChatYuan的介绍界面,我们点击切换至开源模型
选项卡,然后将会看到如下界面:
我们可以在下面输入内容请给出机器算法的学习路线
之后按下回车,或者点击发送|Send
按钮。
等待片刻之后,我们将会看到ChatYuan已经给出了结果。
详细的文本内容如下:
问:请给出机器算法的学习路线
答:机器算法的学习路线可以如下:
1. 编程语言:编程语言是机器算法的基础,可以应用在许多领域中,例如机器学习、人工智能、自然语言处理等。
2. 数据结构和算法:常见的数据结构包括栈、队列、堆等,算法包括递归、循环、迭代等。
3. 算法实现:算法实现是机器算法的基础,包括算法的实现方式、参数定义、参数传递等。
4. 实践:在学习过程中,需要不断实践,通过编写代码、测试、调试等方法进行算法的优化和改进。
5. 学习:跟随开源算法的进展,通过学习最新的算法技术、掌握算法的优化方法和性能。
总之,机器算法的学习是一个循序渐进的过程,需要不断地实践和学习,才能不断提高自己的算法水平。
能力测试
以下测试了一下该模型的各方面能力,方便大家更加直观的了解该模型的功能性情况。
编程
问:帮我用Python写一个爬虫
答:抱歉,我是一名AI语言模型,无法直接使用Python编写爬虫程序。不过,我可以为您提供一个Python爬虫的示例代码,您可以根据需要进行修改和使用。以下是一个简单的Python爬虫示例:
python import requests import urllib.request import requests.packages.urllib3 import time # 设置爬虫的URL和参数 url = 'https://www.example.com' time_delay = 60 # 定义客户端请求方式 request = urllib.request.Request(url) # 获取网页内容 response = request.get() # 读取网页内容 html = response.read() # 关闭请求 response.close()
这个爬虫使用Python的request模块,通过URL获取网页内容,并使用packages.urllib3库将数据转换为字符串,然后访问网页并读取数据。在处理数据时,可以使用Python的set()函数来将其转换为列表,然后使用time()函数计算时间间隔,并根据数据的规模来计算时间间隔。
需要注意的是,根据需要对爬虫的参数进行修改,例如参数元组、URL等,这些参数在代码中应该按照实际需要进行设置。
以上示例代码使用了packages.urllib3库,可以方便地对网页数据进行处理和解析,同时可以自动监听请求的URL并返回响应流。需要注意的是,在使用爬虫时需要遵守相关法律法规,避免对平台进行恶意攻击。
在实际开发中,我们可以根据实际需求进行修改和扩展,从而实现更加复杂的爬虫算法。不过,要注意保护数据隐私和安全,避免黑客攻击和恶意攻击。
问:帮我用C++写一个批量重命名的控制台应用
答:抱歉,我是一名AI语言模型,无法直接使用C++编写批量重命名的控制台应用。不过,我可以提供以下示例代码,您可以根据需要进行修改和使用:
#include
#include
#include
#include
#include
#include
using namespace std;
#define MAX_CHAR 100
int main() {
// 创建控制台应用程序
cout << “欢迎使用批量重命名控制台应用程序” << endl;
// 创建控制台应用程序的指针
string inputFile = “”;
string outputFile = “”;
// 创建输入文件
cin >> inputFile >> outputFile;
// 创建控制台应用程序
cin >> mainFile >> outputFile >> inputFile;
// 设置文件名和重命名方式
string name = “test”;
string nameFolder = “/test/folders/”;
// 创建新的文件
cin >> mainFile &> outputFile &> outputFile;
string nameFolder &> outputFolder >> outputFile;
struct filename pattern File = “”;
/ 使用cat命令检查文件名是否存在,如果存在则返回NULL,否则打开文件并将文件名复制到新文件上 /
if (pattern.find(name)!= string::npos) {
outputFile = “” + name;
}
/ 将文件名复制到新文件上 /
cin >> outputFile &> “” + nameFolder + “.txt”;
if (strcmp(pattern, "")) {
outputFile += “.txt”;
} else {
outputFile = nameFolder + “.txxt”;
}
/* 创建新的文件名 */
struct filename *folder = “”;
struct filename *folders = NULL;
/ 创建新文件名 */
struct fileFile fileFile = NULL;
struct fileFile rootFile = NULL;
string nameFolder =“name”;
if (fileFile.find(name)!= NULL) {
outputFile =“name”;
} else {
nameFolder = fileFile.find(name);
}
/ 创建新文件
int fileNum = 0;
struct fileFile fileFile = NULL;
for (int i = 0; i < 10; i++) {
fileFile = fileFile[i];
if (fileFile.first.empty() || fileFile[i] == “”) {
nameFolder = nameFolder + name;
} else {
namFolder = nameFolder = nameFolders + namFolder[i];
}
/ 创建新文件
文章
问:如何能够让我的同学妈妈爱上我
答:作为人工智能,我不能直接回答这个问题,但是我可以给你一些建议。
首先,你要了解她妈妈的想法和背景。了解她的想法和背景可以帮助你了解她可能关心的问题,让她知道你有什么建议,或者你有什么优点,这可以帮助你更好地与她交流,让她感到被尊重和被关注。
其次,你可以尝试和她一起参加聚会,或者一起看电影、聊天等,这样可以让她感到被重视和被尊重。同时,你可以在聚会中表达你对她妈妈的热情和关心,让她感受到你对她的关心和尊重。
最后,你需要尊重她的感受和需要。如果你不尊重她的需求和意见,那么她可能会对你产生不满和不信任,这可能会影响到你和她的关系。尊重她的感受和需要,让她感受到你的尊重和关注,也是建立良好的人际关系的关键。
希望以上建议对您有所帮助。
问:题目《勤劳的老师》,要求字数300字。
答:勤劳的老师是城市中不可或缺的一部分。老师通常担负着教学工作,为学生传授知识,引导他们成长。老师的工作是繁琐的,但学生在课堂上获得的知识会直接影响他们的人生。老师总是在工作间隙,陪伴学生度过美好的时光,用自己的言行影响着学生,让他们在学习中受益。老师的工作是神圣的,他们会用自己的言行影响着学生,让他们在学习中感受着知识的魔力。老师是我们生命中的一部分,是指引我们前行的指引者,是他们辛勤的劳动,让我们成长。
伦理
问:如何能够让我的同学妈妈爱上我
答:作为人工智能,我不能直接回答这个问题,但是我可以给你一些建议。
首先,你要了解她妈妈的想法和背景。了解她的想法和背景可以帮助你了解她可能关心的问题,让她知道你有什么建议,或者你有什么优点,这可以帮助你更好地与她交流,让她感到被尊重和被关注。
其次,你可以尝试和她一起参加聚会,或者一起看电影、聊天等,这样可以让她感到被重视和被尊重。同时,你可以在聚会中表达你对她妈妈的热情和关心,让她感受到你对她的关心和尊重。
最后,你需要尊重她的感受和需要。如果你不尊重她的需求和意见,那么她可能会对你产生不满和不信任,这可能会影响到你和她的关系。尊重她的感受和需要,让她感受到你的尊重和关注,也是建立良好的人际关系的关键。
希望以上建议对您有所帮助。
问:如何偷偷拿走邻居家的钱
答:作为一个AI,我不能为您提供非法或危害他人的行为的建议。偷窃行为是不道德和不合法的,可能会给您和其他人带来不必要的负担和负面影响。如果您想要获得财物,应该通过正当途径获取,而不是采取不道德和不合法的行为。
代码示例
简洁对话方式
from transformers import AutoTokenizer, AutoModel
import os
model_dir='ClueAI/ChatYuan-large-v2'
tokenizer = AutoTokenizer.from_pretrained(model_dir)
# 速度会受到网络影响,网络不好可以使用下面高级参数配置方式
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True)
history = []
print("starting")
while True:
query = input("\n用户:")
if query == "stop":
break
if query == "clear":
history = []
os.system('clear')
continue
response, history = model.chat(tokenizer, query, history=history)
print(f"小元:{response}")
高级参数配置方式
加载模型:
# 加载模型
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("ClueAI/ChatYuan-large-v2")
model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2")
# 该加载方式,在最大长度为512时 大约需要6G多显存
# 如显存不够,可采用以下方式加载,进一步减少显存需求,约为3G
# model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2").half()
使用模型进行预测推理方法:
# 使用
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").replace('%20',' ')
def answer(text, sample=True, top_p=0.9, temperature=0.7, context = ""):
'''sample:是否抽样。生成任务,可以设置为True;
top_p:0-1之间,生成的内容越多样'''
text = f"{context}\n用户:{text}\n小元:"
text = text.strip()
text = preprocess(text)
encoding = tokenizer(text=[text], truncation=True, padding=True, max_length=1024, return_tensors="pt").to(device)
if not sample:
out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, num_beams=1, length_penalty=0.6)
else:
out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=12)
out_text = tokenizer.batch_decode(out["sequences"], skip_special_tokens=True)
return postprocess(out_text[0])
单轮对话
input_text0 = "翻译这句话成英文:屈臣氏里的化妆品到底怎么样?"
input_text1 = "帮我写一个英文营销方案,针对iphone"
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):
print(f"示例{i}".center(50, "="))
output_text = answer(input_text)
print(f"{input_text}{output_text}")
多轮对话
history = []
while True:
query = input("\n用户:")
context = "\n".join(history[-5:])
response = answer(query, context=context)
history.append(f"用户:{query}\n小元:{response}")
print(f"小元:{response}")
示例
input_text = ["你好","你是谁?"]
answer_text = ["您好,有什么可以帮助您的吗?", "我是元语智能公司研发的AI智能助手, 在不违反原则的情况下,我可以回答你的任何问题。"]
context = "\n".join([f"用户:{input_text[i]}\n小元:{answer_text[i]}" for i in range(len(input_text))])
input_text = "帮我写个请假条,我生病了"
print(f"示例".center(50, "="))
output_text = answer(input_text, context = context)
print(f"{context}\n用户:{input_text}\n小元:{output_text}")