赞
踩
import paddle from GPT2 import GPT2Model # 初始化GPT-2模型 model = GPT2Model( vocab_size=30000, layer_size=32, block_size=1024, embedding_dropout=0.0, embedding_size=2560, num_attention_heads=32, attention_dropout=0.0, residual_dropout=0.0) # 读取CPM-LM模型参数(FP16) state_dict = paddle.load('CPM-LM.pdparams') # FP16 -> FP32 for param in state_dict: state_dict[param] = state_dict[param].astype('float32') # 加载CPM-LM模型参数 model.set_dict(state_dict) # 将模型设置为评估状态 model.eval()
inputs = '''默写古诗:
日照香炉生紫烟,遥看瀑布挂前川。
飞流直下三千尺,'''
outputs = model.predict(inputs, max_len=10, end_word='\n')
print(inputs+outputs)
默写古诗:
日照香炉生紫烟,遥看瀑布挂前川。
飞流直下三千尺,疑是银河落九天。
inputs = '''问题:西游记是谁写的?
答案:'''
outputs = model.predict(inputs, max_len=10, end_word='\n')
print(inputs+outputs)
问题:西游记是谁写的?
答案:吴承恩。
inputs = '''小明决定去吃饭,小红继续写作业
问题:去吃饭的人是谁?
答案:'''
outputs = model.predict(inputs, max_len=10, end_word='\n')
print(inputs+outputs)
小明决定去吃饭,小红继续写作业
问题:去吃饭的人是谁?
答案:小明
inputs = '''默写英文:
狗:dog
猫:'''
outputs = model.predict(inputs, max_len=10, end_word='\n')
print(inputs+outputs)
默写英文:
狗:dog
猫:cat
import paddle import argparse import numpy as np from GPT2 import GPT2Model, GPT2Tokenizer # 参数设置 parser = argparse.ArgumentParser() parser.add_argument("--pretrained_model", type=str, required=True, help="the detection model dir.") args = parser.parse_args() # 初始化GPT-2模型 model = GPT2Model( vocab_size=30000, layer_size=32, block_size=1024, embedding_dropout=0.0, embedding_size=2560, num_attention_heads=32, attention_dropout=0.0, residual_dropout=0.0) print('正在加载模型,耗时需要几分钟,请稍后...') # 读取CPM-LM模型参数(FP16) state_dict = paddle.load(args.pretrained_model) # FP16 -> FP32 for param in state_dict: state_dict[param] = state_dict[param].astype('float32') # 加载CPM-LM模型参数 model.set_dict(state_dict) # 将模型设置为评估状态 model.eval() # 加载编码器 tokenizer = GPT2Tokenizer( 'GPT2/bpe/vocab.json', 'GPT2/bpe/chinese_vocab.model', max_len=512) # 初始化编码器 _ = tokenizer.encode('_') print('模型加载完成.') # 基础预测函数 def predict(text, max_len=10): ids = tokenizer.encode(text) input_id = paddle.to_tensor(np.array(ids).reshape(1, -1).astype('int64')) output, cached_kvs = model(input_id, use_cache=True) nid = int(np.argmax(output[0, -1].numpy())) ids += [nid] out = [nid] for i in range(max_len): input_id = paddle.to_tensor(np.array([nid]).reshape(1, -1).astype('int64')) output, cached_kvs = model(input_id, cached_kvs, use_cache=True) nid = int(np.argmax(output[0, -1].numpy())) ids += [nid] # 若遇到'\n'则结束预测 if nid==3: break out.append(nid) print(tokenizer.decode(out)) # 问答 def ask_question(question, max_len=10): predict('''问题:中国的首都是哪里? 答案:北京。 问题:李白在哪个朝代? 答案:唐朝。 问题:%s 答案:''' % question, max_len) # 古诗默写 def dictation_poetry(front, max_len=10): predict('''默写古诗: 白日依山尽,黄河入海流。 %s,''' % front, max_len) # 主程序 mode = 'q' funs = ask_question print('输入“切换”更换问答和古诗默写模式,输入“exit”退出') while True: if mode == 'q': inputs = input("当前为问答模式,请输入问题:") else: inputs = input("当前为古诗默写模式,请输入古诗的上半句:") if inputs=='切换': if mode == 'q': mode = 'd' funs = dictation_poetry else: mode = 'q' funs = ask_question elif inputs=='exit': break else: funs(inputs)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。