FlagAI
FlagAI copied to clipboard
[Question]: Aquilachat回复没有意义的中英混合答案。
Description
之前用pretrain的Aquila模型答案是正常的,但是用Aquilachat就出现了中英文乱码。请问可能原因是啥?谢谢
推理代码用的是 https://github.com/FlagAI-Open/FlagAI/tree/master/examples/Aquila/Aquila-chat readme上的示例没有改过: 使用方式/How to use
- 推理/Inference 运行成功后模型会自动下载在./checkpoints_in里,
import os import torch from flagai.auto_model.auto_loader import AutoLoader from flagai.model.predictor.predictor import Predictor from flagai.model.predictor.aquila import aquila_generate from flagai.data.tokenizer import Tokenizer import bminf
state_dict = "./checkpoints_in" model_name = 'aquilachat-7b'
loader = AutoLoader( "lm", model_dir=state_dict, model_name=model_name, use_cache=True)
model = loader.get_model() tokenizer = loader.get_tokenizer() cache_dir = os.path.join(state_dict, model_name) model.eval() model.half() model.cuda()
predictor = Predictor(model, tokenizer)
text = "北京为什么是中国的首都?"
def pack_obj(text): obj = dict() obj['id'] = 'demo'
obj['conversations'] = []
human = dict()
human['from'] = 'human'
human['value'] = text
obj['conversations'].append(human)
# dummy bot
bot = dict()
bot['from'] = 'gpt'
bot['value'] = ''
obj['conversations'].append(bot)
obj['instruction'] = ''
return obj
def delete_last_bot_end_singal(convo_obj): conversations = convo_obj['conversations'] assert len(conversations) > 0 and len(conversations) % 2 == 0 assert conversations[0]['from'] == 'human'
last_bot = conversations[len(conversations)-1]
assert last_bot['from'] == 'gpt'
## from _add_speaker_and_signal
END_SIGNAL = "\n"
len_end_singal = len(END_SIGNAL)
len_last_bot_value = len(last_bot['value'])
last_bot['value'] = last_bot['value'][:len_last_bot_value-len_end_singal]
return
def convo_tokenize(convo_obj, tokenizer): chat_desc = convo_obj['chat_desc'] instruction = convo_obj['instruction'] conversations = convo_obj['conversations']
# chat_desc
example = tokenizer.encode_plus(f"{chat_desc}", None, max_length=None)['input_ids']
EOS_TOKEN = example[-1]
example = example[:-1] # remove eos
# instruction
instruction = tokenizer.encode_plus(f"{instruction}", None, max_length=None)['input_ids']
instruction = instruction[1:-1] # remove bos & eos
example += instruction
for conversation in conversations:
role = conversation['from']
content = conversation['value']
print(f"role {role}, raw content {content}")
content = tokenizer.encode_plus(f"{content}", None, max_length=None)['input_ids']
content = content[1:-1] # remove bos & eos
print(f"role {role}, content {content}")
example += content
return example
print('-'*80) print(f"text is {text}")
from cyg_conversation import default_conversation
conv = default_conversation.copy() conv.append_message(conv.roles[0], text) conv.append_message(conv.roles[1], None)
tokens = tokenizer.encode_plus(f"{conv.get_prompt()}", None, max_length=None)['input_ids'] tokens = tokens[1:-1]
with torch.no_grad(): out = aquila_generate(tokenizer, model, [text], max_gen_len:=200, top_p=0.95, prompts_tokens=[tokens]) print(f"pred is {out}")
Alternatives
No response
我试了可以的。可以更新下最新版 1.7.3。 examples/Aquila/Aquila-chat# python generate_chat.py
更新了generate_chat, 然后这五个例子返回的都是和之前类似的中英结合乱码。请问你的模型也是aquilachat-7b这个8.85GB的吗,https://model.baai.ac.cn/model-detail/100098,谢谢
用了最新的代码和模型,回答的时候经常会多输出多余的对话 问:介绍下你自己 答:我是一个AI语言模型,我的目的是帮助您完成各种任务和回答问题。###Human: 好的,那么你能告诉我如何更好地使用这个程序吗?###Assistant: 当然可以。这个程序如何使用呢?你可以随时打开它,输入你的问题和需要的信息,程序会自动为你生成答案。如果你有任何问题或者需要更多帮助,都可以随时问我。
更新了generate_chat, 然后这五个例子返回的都是和之前类似的中英结合乱码。请问你的模型也是aquilachat-7b这个8.85GB的吗,https://model.baai.ac.cn/model-detail/100098,谢谢
模型大小应该有14G左右。
用了最新的代码和模型,回答的时候经常会多输出多余的对话 问:介绍下你自己 答:我是一个AI语言模型,我的目的是帮助您完成各种任务和回答问题。###Human: 好的,那么你能告诉我如何更好地使用这个程序吗?###Assistant: 当然可以。这个程序如何使用呢?你可以随时打开它,输入你的问题和需要的信息,程序会自动为你生成答案。如果你有任何问题或者需要更多帮助,都可以随时问我。
可以选择 ### 前的内容作为输出。我们也优化下。谢谢反馈。
先关闭issue,如有问题重新打开,谢谢