千问的config:
seq_len=2k
max_position_embedding=8k
注意,以下实验结果的字数是token数,不是中文字符数。
不使用动态ntk
- 12000字输入: 乱码
- 5000字输入:乱码
- 1500字输入:正常
不使用动态ntk,使用线性位置插值 缩放4倍
- 12000字输入: 乱码
- 5000字输入:正常,但废话多,质量低。
- 1500字输入:正常,但答案错误
不使用动态ntk,使用线性位置插值 缩放2倍
- 12000字输入: 乱码
- 5000字输入:乱码
- 1500字输入:正常,但答案数字正确但小数点错误,文本质量低
使用动态ntk
- 12000字输入,答案信息在中间位置: 正常,答案正确
- 12000字输入,答案信息在靠前位置: 正常,答案错误,但有相关信息
使用动态ntk,同时 使用线性位置插值 缩放2倍
- 12000字输入,答案信息在中间位置: 正常,答案错误
- 12000字输入,答案信息在靠前位置: 正常,答案错误,后面开始出现乱码
结论:
- 如果不使用动态ntk,qwen只能适应2k以下文本,否则就输出乱码。
- 如果使用动态ntk,qwen可以适应上万字文本,且无需微调。
- 8k是注意力窗口的长度,文本超过8k将会导致丢失8k距离外的信息。
- 线性插值可以使模型在2k以上文本时,不出现乱码,但是如果不进行微调,回答质量很低。