模型推理与评估¶
模型推理¶
在本次作业中,我们需要将训练好的模型能够在本地正常运行起来。调试可以通过命令行输出观察模型效果。
- 在进行展示时,要求大家以可视化的界面(网页)进行展示与模型的对话,便于实验的测试与验收。推荐使用 Gradio 来进行实现。
- 可以将在训练完的模型从服务器上传输到本地,运行推理来进行 gradio 展示。
模型评估¶
我们将采用以下三方面的指标进行评价模型训练的结果。这些指标旨在高效地指导模型拟合数据分布,同时使人客观地评价模型生成文本的质量。
传统指标(自行评估)¶
设置合理的损失函数。在本次实验中,训练损失函数即为单个词预测的交叉熵损失(cross-entropy loss)的平均。
困惑度¶
- 困惑度(Perlexity)是刻画语言模型预测一个语言文本的能力,表示模型预测某一个句子出现的合理程度。一般用模型预测一个句子中所有词出现的概率来计算。在测试集上,困惑度值越低,说明建模的效果越好。
- 困惑度的计算方式如下:
其中,\(m\)是句子的长度。
Rouge-L¶
- Rouge是通过将模型生成的回答(Y)与参考答案(X)进行比较计算,得到对应的得分。
- Rouge-L利用最长公共子序列进行计算,注意子序列不一定连续,但是有词的顺序。
- Rouge-L的计算方式如下:
其中,\(\beta\)是超参数,表示句子的长度,m和n各是X和Y的长度。
质量评价(验收)¶
- 流畅度:
- 没有乱码
- 例如,不会生成类似看不懂的文本,“のて72[UNK]1904屹”。
- 没有重复内容
- 例如,不会生成类似“2021等2021等2021等2021等2021等”这样的文本。
- 没有空白,即回答为空
- 没有乱码
- 没有截断,即没有生成完整的一句话
- 例如,不会生成类似“今天,我们讲 ”这样的文本。
- 文本:生成有效的最长的文本
- 正确样例如下:
问题是“《倚天屠龙记》有哪些主角?” 答案是“《倚天屠龙记》是金庸先生所著的武侠小说,主要讲述了元朝末年武林中的故事。这部小说的主角包括: 1. 张无忌:男主角,明教教主,拥有屠龙刀和倚天剑,是武林中备受关注的人物。 2. 赵敏:女主角之一,绍敏郡主,喜欢张无忌,敢爱敢恨,为了爱情可以勇往直前。 3. 周芷若:女主角之一,峨嵋派第四代掌门人,张无忌的妻子,与张无忌之间有着深厚的感情纠葛。 4. 小昭:女主角之一,明教护教法王黛绮丝之女,喜欢张无忌,最后成为张无忌的义女。 此外,还有其他重要角色如谢逊、成昆、杨逍、范遥等。这些人物共同构成了《倚天屠龙记》丰富的故事情节。”。
- 正确样例如下:
- 相关度,即回答内容与问题相关
- 例如,不会出现类似样例。即问题是“《倚天屠龙记》有哪些主角?”,答案是“《三国演义》是四大名著之一”。
-
回复内容质量
-
为保证公平比较,在评价时会使用助教准备好的
统一测试集
进行回复生成和质量评估。我们会用现有的语言模型(ChatGPT or ChatGLM)来比较同学生成的回复与给定标准回复的好坏,减少人工主观因素的影响。 -
测试问题分类和样例:
-
人物介绍
- 介绍一下《天龙八部》的主角
-
情节
- 讲一下射雕英雄传中有名的比武的情节
-
人物关系
- 小龙女和杨过的关系和故事
-
其他
- 《射雕英雄传》讲了什么故事?
-
生成速度(验收)¶
- 生成速度正常,评价指标(CPU / GPU 两者满足其一即可)
-
可以在
sample.py
中设置max_new_tokens
-
max_new_tokens=256
- GPU一般2s内输出结果。
- 本地CPU 50s 内出结果即可(双核CPU测试结果)。
-
max_new_tokens=512:
- GPU一般3.5s内输出结果。
- 本地CPU 100s 内出结果即可(双核CPU测试结果)。
-
生成速度提升可以获得适度加分。
服务器资源¶
为了让大家能够顺利完成作业。避免硬件资源限制,我们会为大家提供服务器资源供大家使用。
-
每台服务器有8张24G的显卡。每次程序运行大约需要10G显存,理论上一张显卡最多可以跑2个程序
-
平均11人使用一台服务器。建议尽量平均使用资源
服务器的使用¶
要使用服务器进行开发,需要通过 ssh 连接到服务器上,使用命令行进行操作
- 使用 ssh 连接服务器,所有机器通过端口
12272
访问
mac:ssh <账号>@ip -p 12272
windows:使用 xshell 等支持 ssh 的软件
-
激活 conda 环境。我们在服务器上为大家配置了共享 conda 环境,登入服务器后环境会自动激活。由于环境为服务器上所有同学共享,请大家不要随意通过 pip 安装 package。
-
需要的代码和数据可以放在个人目录下进行
/home/p y<学号>
,不同成员目录禁止相互访问。 -
服务器和本地之间的文件传输可以用
scp
实现。windows 下可以用xftp
。 -
可以通过
CUDA_VISIBLE_DEVICES=x
来约束使用哪一张显卡。例如:CUDA_VISIBLE_DEVICES=4 python main.py
为使用4号显卡来运行程序 -
可以利用
nvidia-smi
查看GPU使用情况 -
账号通过网络学堂作业下发