跳转至

模型推理与评估

模型推理

在本次作业中,我们需要将训练好的模型能够在本地正常运行起来。调试可以通过命令行输出观察模型效果。

  • 在进行展示时,要求大家以可视化的界面(网页)进行展示与模型的对话,便于实验的测试与验收。推荐使用 Gradio 来进行实现。
  • 可以将在训练完的模型从服务器上传输到本地,运行推理来进行 gradio 展示。

模型评估

我们将采用以下三方面的指标进行评价模型训练的结果。这些指标旨在高效地指导模型拟合数据分布,同时使人客观地评价模型生成文本的质量。

传统指标(自行评估)

设置合理的损失函数。在本次实验中,训练损失函数即为单个词预测的交叉熵损失(cross-entropy loss)的平均。

困惑度

  • 困惑度(Perlexity)是刻画语言模型预测一个语言文本的能力,表示模型预测某一个句子出现的合理程度。一般用模型预测一个句子中所有词出现的概率来计算。在测试集上,困惑度值越低,说明建模的效果越好。
  • 困惑度的计算方式如下:
\[ \begin{split} \text{Perlexity(S)} &= p(w_1, w_2, w_3, \cdots, w_m)^{-1/m}\\ &=[p(w_1)p(w_2|w_1)...p(w_m|w_1,...,w_{m-1})]^{(-1/m)} \end{split} \]

其中,\(m\)是句子的长度。

Rouge-L

  • Rouge是通过将模型生成的回答(Y)与参考答案(X)进行比较计算,得到对应的得分。
  • Rouge-L利用最长公共子序列进行计算,注意子序列不一定连续,但是有词的顺序。
  • Rouge-L的计算方式如下:
\[ \text{Rouge-L(lcs)} = \frac{(1+\beta^2)R\_{lcs}P\_{lcs}}{R\_{lcs} + \beta^2P\_{lcs}} \]
\[ R_{(lcs)} = \frac{LCS(X, Y)}{m} \]
\[ P_{(lcs)} = \frac{LCS(X, Y)}{n} \]

其中,\(\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使用情况

  • 账号通过网络学堂作业下发


最后更新: 2023年9月14日
作者:xujz18 (33.58%), think2try (52.55%), dawnzzhang (13.87%)