Can AI Assistants Know What They Don’t Know?学习

概述

  1. 问题提出:AI助手是否能够意识到它们不知道的事情,并通过自然语言表达这种意识。

  2. 研究方法:研究者构建了一个模型特定的“I don’t know”(Idk)数据集,包含监督微调数据和偏好数据,将问题分为AI助手知道或不知道答案的类别。

  3. 实验设计:通过不同的对齐方法(如监督微调和偏好优化)将AI助手与Idk数据集对齐,以提高其识别知识范围的能力。

  4. 实验结果:与原始助手相比,经过Idk数据集对齐的助手更能拒绝回答其知识范围之外的问题,并且在表达真实性方面有显著提高。

  5. 知识象限:论文提出了AI助手知识的四个象限:已知已知(Known Knowns)、已知未知(Known Unknowns)、未知已知(Unknown Knowns)和未知未知(Unknown Unknowns)。

  6. 实验方法:包括直接提示(Idk-Prompting)、监督微调(Idk-SFT)、偏好感知优化(如直接偏好优化DPO、最佳n采样BoN、近端策略优化PPO和后见指令重标注HIR)。

  7. 实验效果:使用Idk数据集进行训练后,AI助手在测试集上能够更准确地识别其知道和不知道的问题,提高了回答的真实性。

  8. 影响因素:Ik阈值(用于定义已知和未知问题)对助手的行为有显著影响。提高Ik阈值会使助手更倾向于拒绝回答问题。

  9. 模型大小:较大的模型更擅长区分其知道和不知道的问题。

  10. 相关工作:论文还讨论了与人类价值观对齐的大型语言模型、发现LLMs的知识、减少LLMs的事实错误等主题的相关研究。

  11. 结论:通过与Idk数据集对齐,AI助手能够在很大程度上识别它们所不知道的,并在开放式问答测试中准确确定其知识界限,显著提高了与之前相比的真实性。

  12. 社会影响:这项研究强调了开发优先考虑准确性和真实的AI系统的重要性,减少了错误信息,并促进了对AI依赖的谨慎态度。

对图中几种方式的介绍:

  1. 直接提示(Idk-Prompting)

    • 这种方法通过在问题前面添加一个特定的提示(prompt),直接指导模型对于不知道答案的问题回答“I don’t know”。
    • 提示的格式可能是:“如果你不知道答案,请只回答'I don’t know':<问题>”。
    • 这种方法的优点是操作简单,不需要对模型进行额外的训练,但它要求模型能够很好地理解和遵循提示。
  2. 监督微调(Idk-SFT, Supervised Fine-tuning)

    • 这种方法涉及使用Idk数据集对模型进行监督学习的训练。
    • 模型通过预测问题的答案来进行训练,同时学习识别何时拒绝回答(即表示“I don’t know”)。
    • 训练过程中,模型会接收到包含正确答案和“I don’t know”模板的标准问答对,以此来学习区分知道和不知道的问题。
  3. 直接偏好优化(DPO, Direct Preference Optimization)

    • 这种方法首先训练一个基础的监督微调(SFT)模型,然后生成偏好数据,即模型在面对问题时选择的正确答案和拒绝回答的示例。
    • 使用这些偏好数据,模型通过直接优化偏好来调整其行为,使其更倾向于在不确定时拒绝回答。
  4. 最佳n采样(BoN, Best-of-n Sampling)

    • 在这种方法中,模型首先生成多个可能的回答(即n个回答),然后使用一个奖励模型来评估这些回答。
    • 选择得到最高奖励分数的回答作为最终答案,以此来模拟模型在面对问题时的选择过程。
  5. 近端策略优化(PPO, Proximal Policy Optimization)

    • PPO是一种强化学习算法,用于优化模型的行为策略。
    • 在这个上下文中,PPO被用来优化模型在面对问题时生成答案的策略,使其更符合人类的偏好,包括在不确定时选择拒绝回答。
  6. 后见指令重标注(HIR, Hindsight Instruction Relabeling)

    • 这种方法利用不同Ik阈值构建的多个Idk数据集,通过指令重标注的方式,将这些数据集合并成一个更大的数据集。
    • 在这个合并的数据集中,每个问题都附带一个指令,指示模型其知识表达的置信度水平,从而控制模型在回答问题时的保守程度。

直接跳到methodology和experiment部分

methodology

  1. 构建Idk数据集

    • 使用TriviaQA数据集作为基础,通过多次采样模型对每个问题的回答并计算准确率,以此评估模型对该问题的知识掌握程度。
    • 定义一个准确率阈值(Ik threshold),当模型对某个问题的所有尝试回答都达到这个准确率时,认为模型“知道”答案;否则,标注为“不知道”。
    • 对于模型不知道的问题,使用一个标准化的拒绝回答模板;对于知道的问题,使用模型自己的正确回答作为标注答案。
  2. Idk提示(Idk Prompting)

    • 通过在输入问题前添加特定的提示,直接指导模型对于不知道答案的问题回答“I don’t know”。
    • 这种方法要求模型能够很好地遵循指令,但避免了额外的训练。
  3. Idk监督微调(Idk Supervised Fine-tuning)

    • 使用Idk数据集直接对模型进行监督微调,将问题输入模型并要求模型预测回答。
    • 采用标准的序列到序列损失进行训练。
  4. 偏好感知优化(Preference-aware Optimization)

    • 直接偏好优化(Direct Preference Optimization, DPO):在训练了一个基础的SFT模型后,通过从剩余数据中随机采样多个回答来构建偏好数据,并对这些数据进行优化。
    • 最佳n采样(Best-of-n Sampling, BoN):通过训练一个奖励模型来对候选回答进行评分,并选择得分最高的回答作为最终回答。
    • 近端策略优化(Proximal Policy Optimization, PPO):基于奖励模型,使用在线方式采样回答并优化模型。
    • 后见指令重标注(Hindsight Instruction Relabeling, HIR):利用不同Ik阈值构建的Idk数据集,通过指令重标注的方式,使模型能够在不需要重新训练的情况下,控制回答策略。
  5. 实验设置

    • 使用Llama-2-7b-chat模型作为基础模型进行进一步训练,并在测试集上评估模型是否能够区分其知道和不知道的问题。
  6. 评估指标

    • IK-IK率:模型正确回答知道的问题的比例。
    • IK-IDK率:模型正确拒绝回答不知道的问题的比例。
    • TRUTHFUL率:IK-IK率和IK-IDK率的总和,表示模型提供真实回答的比例。

构造idk数据集

  1. 选择基础数据集

    • 使用TriviaQA数据集作为构建Idk数据集的基础。TriviaQA是一个开放领域的问答数据集,包含大量问题及其对应的答案。
  2. 评估模型知识

    • 对于TriviaQA中的每个问题,通过多次采样模型的回答并计算准确率来评估模型是否知道答案。具体地,对于每个问题,模型会被要求生成多个回答,然后根据这些回答的正确率来判断模型对该问题的知识掌握程度。
  3. 设定Ik阈值

    • 定义一个准确率阈值(Ik threshold),这是一个超参数,用于确定模型对问题的回答是否足够准确,从而判断模型是否“知道”答案。在这项工作中,Ik阈值被设定为1.0,意味着只有当模型对某个问题的所有尝试回答都完全正确时,才认为模型“知道”答案。
  4. 构建QA对

    • 对于模型不知道的问题,使用一个标准化的拒绝回答模板作为答案。这个模板表明模型对该问题缺乏知识。
    • 对于模型知道的问题,选择模型生成的正确回答作为标注答案。
  5. 构建偏好对

    • 对于模型知道的问题,构建偏好对,其中包含一个问题、一个被选择的正确回答,以及一个被拒绝的“I don’t know”回答。
    • 对于模型不知道的问题,构建偏好对,其中包含一个问题、一个被选择的“I don’t know”回答,以及一个被拒绝的模型错误回答。
  6. 数据集划分

    • 将TriviaQA的训练集划分为Idk数据集的训练集和验证集,使用TriviaQA的开发集作为Idk数据集的测试集。

定义ik阈值

  • 定义:Ik阈值是一个介于0到1之间的数值,用来衡量模型对某一问题回答的准确率。如果模型对一个问题的回答在多次尝试中达到了或超过了这个阈值,那么模型就被认为“知道”答案;否则,它被认为“不知道”。
  • 作用
    1. 界定知识范围:Ik阈值帮助界定模型的知识边界,即明确模型在什么情况下能够可靠地提供答案。
    2. 构建数据集:通过设定Ik阈值,研究者可以构建出包含正确答案和“I don't know”标注的数据集,用于训练和优化模型。
    3. 评估和优化模型:Ik阈值可以用来评估模型在不同知识掌握程度下的表现,进而优化模型的性能。
  • 保守性与积极性:较低的Ik阈值意味着模型在较低的准确率下也会被认为是“知道”答案,这可能导致更多的错误回答(IDK-IK)。相反,较高的Ik阈值会使模型更保守,可能拒绝回答更多实际上它知道的问题(IK-IDK),从而提高回答的真实性,但可能会降低模型的响应率。
  • 模型行为:Ik阈值的设定直接影响模型的行为。一个较高的阈值可能导致模型更频繁地表示“I don't know”,而较低的阈值可能使模型更倾向于尝试回答问题。

实践部分

运行环境:Ubuntu22.0.4

根据论文,思路大概是这样的:

  1. 首先,分别部署Say-I-dont-know,lm-evaluation-harness和Qwen2:0.5b,前两个没什么好说的,直接git clone拿下来
    git clone https://github.com/EleutherAI/lm-evaluation-harness
    cd lm-evaluation-harness
    pip install -e .
    git clone https://github.com/OpenMOSS/Say-I-Dont-Know.git
    cd Say-I-Dont-Know
    pip install -U pip setuptools
    pip install --extra-index-url https://download.pytorch.org/whl/test/cu118 -e .

    Say-I-dont-know需要下载一下数据集,根据给的命令行做就行。Qwen2:0.5b这里是使用了ollama进行本地部署:大致测试了一下是否能运行。我一开始想的是,既然之后要用这个模型,那我就找一下模型在本地保存的位置吧,结果千辛万苦找到了,发现是个docker,后面的评估和训练要的是完整文件,于是就又去huggingFace上找,找到了完整的模型文件,下载到了本地。

  2. 然后我打算先用harness的tasks测试一下qwen的性能,这里又遇到了一些问题。我一开始是在pycharm里的控制台运行的命令,然后不停的报出连接超时的问题。读了一下代码后,发现这个项目的模型和数据集,是在运行时,向huggingFace发请求拿下来的,我只改了使用本地模型进行测试,没改数据路径。但是研究了一番,没想到改数据路径的好办法,于是专心研究怎么解决连接问题。后来发现,可能是Ubuntu,不使用控制台打开Pycharm,可能会导致环境变量的导入的问题,进而导致代理问题。于是直接使用ubuntu的控制台运行命令,成功在mmlu和gsm8k上进行了测试:

    Tasks:任务名称,这里是 gsm8k

    In-shot:评估时使用的示例数量。

    Metric:评估指标,这里有 flexible-extract 和 strict-match

    Value:评估指标的具体值,例如 flexible-extract 的值是 0.5333strict-match 的值是 0.5234

    Stderr:标准误差,表示评估结果的不确定性,例如 flexible-extract 的标准误差是 0.0132strict-match 的标准误差是 0.0758671

    Groups:数据集的类别,如 mmluhumanitiesothersocial sciences 和 stem

    Version:模型或数据集的版本。

    Filter:应用的过滤条件。

    n-shot:表示在评估时使用的示例数量。

    Metric:评估指标,这里是 acc(准确率)。

    Value:评估指标的具体值。

    Stderr:标准误差,表示评估结果的不确定性。

  3. 在mmlu和gsm8k上测试过后,去在idk数据集上测试一下效果。先查了一下这几种数据的作用是什么:

    Preference data:

    作用:用于偏好优化(Preference Optimization),帮助模型更好地对齐人类偏好。

    内容:包含人类对不同模型生成的响应的偏好排序。例如,对于同一个问题,模型生成了两个不同的回答,人类会标注哪个回答更好。

    SFT data:

    作用:用于监督微调(Supervised Fine-Tuning),帮助模型在特定任务上提高性能。

    内容:包含高质量的问答对话或其他任务数据,模型通过学习这些数据来提高在类似任务上的表现。

    我在测试的时候,选取了sft中的baichuan,写了一个评估准确性的脚本,测试了qwen2:0.5b的准确率:。不知道是我调的token不对,还是本身确实知识库比较小,最终的准确率挺低的。
  4. 下一部分,我选择使用idk项目中的idk-prompting,对qwen2:0.5b进行测试和训练大致输出如上,可以看到,虽然已经逐渐可以说出i dont know了,但是问题还是挺大的,一会儿说不知道,一会儿又在回答问题

    这个是自己写的测评脚本得出的数据分布,

    这个是原本项目的计算脚本得到的结果,感觉可能是写的判断逻辑不同,毕竟生成的数据形式不同。
  5. 前端展示部分,展示了qwen2:0.5b在mmlu、gsm8k和idk数据集上的表现,这里统一以准确度为标准,最后添加了在经过prompt过后,truthful的概率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值