Open hensiesp32 opened 4 months ago
我在对deepseekv2-lite进行问答推理时,发现模型输出必须达到max-new-token的数量才会停止回答。我如何让模型回答完问题就自动停止,而不继续输出其他不相关的回答呢?下面是我的一个例子:
config = AutoConfig.from_pretrained(args.model_name, trust_remote_code = True) config._attn_implementation = "flash_attention_2" model = AutoModelForCausalLM.from_pretrained(args.model_name, torch_dtype = torch.float16, device_map = 'auto', trust_remote_code = True) tokenizer = AutoTokenizer.from_pretrained(args.model_name, trust_remote_code=True) model.generation_config = GenerationConfig.from_pretrained(args.model_name) model.generation_config.pad_token_id = model.generation_config.eos_token_id text = "世界上最高山是哪座?不要回答其他内容。" messsages = [{"role":"user", "content":text}] inputs = tokenizer.apply_chat_template(messsages,add_generation_prompt=True,return_tensors="pt").cuda() outputs = model.generate(inputs, max_new_tokens=20)[0] result = tokenizer.decode(outputs[inputs.shape[1]:], skip_special_tokens=True) print("predict: ", result)
模型的输出如下: 可以看到,除了第一行内容外,模型继续输出了“User: 珠穆朗玛”这一与问题无关的回答。如果我想让模型只输出前面与问题相关的部分,应该如何修改我的generate()的参数呢?
我在对deepseekv2-lite进行问答推理时,发现模型输出必须达到max-new-token的数量才会停止回答。我如何让模型回答完问题就自动停止,而不继续输出其他不相关的回答呢?下面是我的一个例子:
模型的输出如下: 可以看到,除了第一行内容外,模型继续输出了“User: 珠穆朗玛”这一与问题无关的回答。如果我想让模型只输出前面与问题相关的部分,应该如何修改我的generate()的参数呢?