Firefly icon indicating copy to clipboard operation
Firefly copied to clipboard

ChatGLM2-6B推理时胡言乱语现象及可能的解决办法

Open lithiumfleet opened this issue 2 years ago • 4 comments

可能是作者疏忽了, chatglm2需要special token.

解决办法:

将single_chat.py文件中63行user_input_ids = tokenizer(user_input, return_tensors="pt", add_special_tokens=False).input_ids 改为user_input_ids = tokenizer(user_input, return_tensors="pt").input_ids(multi_chat.py同理)

现象:

  1. 模型来源: huggingface上的THUDM/ChatGLM-6B

  2. 复现: python ./Firefly/script/chat/single_chat.py

  3. 错误现象: bad2

  4. 正确现象: good

配置:

  • OS: Ubuntu18.04
  • GPU: Tesla V100S-PCIE-32GB

lithiumfleet avatar Oct 07 '23 07:10 lithiumfleet

十分感谢,我就是出现这个问题,还以为我的ChatGLM2模型参数坏掉了

Benjamin2333 avatar Oct 08 '23 05:10 Benjamin2333

如果这是出错原因的话那岂不是说构造数据的时候模板没对齐?

yucc-leon avatar Oct 13 '23 08:10 yucc-leon

如果这是出错原因的话那岂不是说构造数据的时候模板没对齐?

我没看完所有源码,所以我的说法很可能不对。我猜应该是对齐了,理由是dummy data的格式是和GLM2一致的。

lithiumfleet avatar Oct 13 '23 13:10 lithiumfleet

如果这是出错原因的话那岂不是说构造数据的时候模板没对齐?

我没看完所有源码,所以我的说法很可能不对。我猜应该是对齐了,理由是dummy data的格式是和GLM2一致的。

sorry for the ambiguity.

user_input_ids = tokenizer(user_input, return_tensors="pt", add_special_tokens=False).input_ids 与 user_input_ids = tokenizer(user_input, return_tensors="pt").input_ids 的差别在于生成出的id序列不同,可以打印看一下。通常第二行代码会根据tokenizer的默认配置基于input在首尾处添加特殊的token_id,这类代码对于不同tokenizer设置的效用是不同的。 我说的“没对齐”是指本项目没有完整覆盖chatglm2-6b的所有适配细节。不过还没试过这些代码,不知道有没有其他人遇到过。如果想进一步确认建议你可以加群问一下,获得反馈可能更快些。

yucc-leon avatar Oct 19 '23 02:10 yucc-leon