self-instruct

指令数据定义:

${I_t} \$ 代表要生成的instructions集合,$t$代表task。

$ {(X_{t,i},Y_{t,j})}^{n_t}_{i=1}$代表每个task $t$包括$n_t$个input-output instances。

$M(I_t,X_{t,i})=Y_{t,i}$代表对于模型$M$给定instruction 和 input ,期望其生成对应的output, $i\in {1,…,n_t}$

数据生成

  1. 生成instruction

    针对self-instruct,我们首先初始化一个任务池包含175个tasks,在生成instruction环节,我们随机抽取8个instruction(6个是原始instruction seed 2个采样自新生成的instruction),按照下面的prompt格式来生成

    image-20251027222023036

  2. instance 生成

    给定指令和他们的任务类型,然后独立的为这些instruction生成instances。

    第一种方法是输入优先的方法,首先根据指令提出输入字段,然后生成相应的输出。

    input-first

    image-20251027222028820

    对偏向于一个标签的输入进行评分,特别是对于分类任务(例如,对于语法错误检测,它通常生成语法输入)。因此,self-instruct还提出了一种用于分类任务的输出优先方法,其中self-instruct首先生成可能的类标签,然后根据每个类标签调节输入生成。

    output-first

    image-20251027222035895

数据过滤

为了鼓励多样性,只有当新指令与任何现有指令的 ROUGE-L 相似度小于 0.7 时,才会将新指令添加到任务池中。

模型微调

将指令和实例输入连接起来作为提示,并训练模型以标准监督方式生成实例输出。为了使模型对不同格式具有鲁棒性,我们使用多个模板将指令和实例输入一起编码。例如,指令可以加或不加“Task:”前缀,输入可以加或不加“Input:”前缀,提示末尾可以加或不加“Output:”,中间可以放不同数量的换行符等。

分析

多样性

这段话的意思是,研究人员使用了一个名为 Berkeley Neural Parser (伯克利神经句法分析器) 的工具,来分析他们数据集中 52,445 条指令的语法结构。 他们这样做的目的是为了从每条指令中提取一个核心的“动词 + 名词”组合。 具体提取过程如下:

  • $\textbf{句法分析 (Parse):}$ 用分析器处理每条指令,得到一个语法树。
  • $\textbf{提取动词:} $找到离语法树“根节点”最近的那个动词 (这通常是句子的主要动词)。
  • $\textbf{提取宾语:}$ 找到这个动词的第一个直接名词宾语 (即动作的直接承受者)。

最终结果是: 在 52,445 条指令中,有 26,559 条 (大约一半) 包含了这种清晰的“(主)动词 + (其)直接名词宾语”结构。举个例子:

  • $\textbf{指令:}$ “Create a brief summary of the solar system.’’
  • $\textbf{分析:} $
  • $\textbf{根动词:} $”Create’’ (创建)
  • $\textbf{直接名词宾语:} $”summary’’ (摘要)
  • $\textbf{结果:} $这条指令$\textbf{包含}$该结构。
  • $\textbf{指令:}$”Is the sky blue?’’
  • $\textbf{分析:}$
    • $\textbf{根动词:}$ “Is’’ (是)
    • $\textbf{直接名词宾语:} $(无)
  • $\textbf{结果:}$ 这条指令$\textbf{不包含}$该结构。

image-20251027224956635

同时测试了生成的内容和175个种子instruction的ROUGE-L分数

image-20251027225020807