生成式问答机器人
可以通过生成式问答机器人解决一些业务中的问答问题,但是一般采用小模型生成的结果都需要再进行一些润色才能达到更好的效果。
这里问答使用mxmax/Chinese_Chat_T5_Base模型,而润色则使用RichardErkhov/IDEA-CCNL_-_Wenzhong-GPT2-110M-4bits。其中前者擅长NLU(Natural Language Understanding,自然语言理解),而后者擅长NLG(Natural Language Generation,自然语言生成)。当然效果只能说一般般。
下面是相关代码:
from transformers import T5Tokenizer, T5ForConditionalGeneration
t5_tokenizer = T5Tokenizer.from_pretrained('Chinese_Chat_T5_Base',legacy=True)
t5_model = T5ForConditionalGeneration.from_pretrained('Chinese_Chat_T5_Base')
input_prompt = "AI是什么?"
t5_inputs = t5_tokenizer(input_prompt, return_tensors="pt", truncation=True, padding="max_length", max_length=128)
t5_outputs = t5_model.generate(**t5_inputs, max_length=50, num_return_sequences=1)
t5_generated_text = t5_tokenizer.decode(t5_outputs.squeeze(),skip_special_tokens=True)
print(f"T5答案: {t5_generated_text}")
其输出类似如下:
T5答案: AI是一种人工智能技术,它利用算法和统计模型来模拟人类智能,包括学习、推理、感知、感知、决策和自主行 动等。
下面要使用GPT-2对上述结果进行润色了,其实更多只能算是补充其内容:
from transformers import GPT2Tokenizer,GPT2LMHeadModel
hf_model_path = 'Wenzhong-GPT2-110M'
gpt_tokenizer = GPT2Tokenizer.from_pretrained(hf_model_path)
model = GPT2LMHeadModel.from_pretrained(hf_model_path)
model.eval()
gpt_prompt = "{}".format(t5_generated_text)
inputs = gpt_tokenizer(gpt_prompt,return_tensors='pt')
generation_output = model.generate(**inputs,
max_length=150,
repetition_penalty=3.0,
do_sample=True,
top_p = 0.6,
#temperature=0.1,
#num_beams=2,
eos_token_id=50256,
pad_token_id=0,
num_return_sequences = 1)
print(gpt_tokenizer.decode(generation_output[0]).split('<|endoftext|>')[0])
其输出类似如下:
AI是一种人工智能技术,它利用算法和统计模型来模拟人类智能,包括学习、推理、感知、感知、决策和自主行动等。 电子云并不露声 还圣课上的"体量康夫�
不排除是参数量问题,完全就是胡说八道,根本没有理解其意思。
最后是GPT-4的润色效果:
AI是一种人工智能技术,运用算法和统计模型来模拟人类智能,包括学习、推理、感知、决策和自主行动等多个方面。
可以看到效果还可以。