Few-shot learning,少样本学习或者小样本学习,指的就是通过提供少量训练样本来让模型学习新的任务。也就是我们在写 Prompt 的时候,可以添加一些样本数据,或者叫示例数据,模型会学习这些样本数据,找出其中的规律,可以帮助模型更好的理解我们让它做的任务。
比如我们需要一个功能,需要根据一篇技术文章或者视频的标题内容,判断出内容所属的类别,比如前端开发,后端开发,移动开发等等。
在 OpenAI 的 Playground 这里可以做点实验,先随便输入一个标题,比如“创建 Vue.js 组件”,当前使用的模型是 text-davinci-003,这是一个比较高级的模型。
先不做配置,直接提交,模型会认为我们是想知道如何创建 Vue.js 组件,所以它可能会给出一些解释,还有一段代码示例。我们在这个 prompt 里面,添加一些指令文本,比如“提取标题分类:”,再提交一下,模型生成的 completion,说这个标题所属的分类是 “Vue.js”,也就是标题内容里面的这个应用框架的名字。
我们需要的是更大一些的类别,比如前端开发,或者后端开发之类的。这样在 prompt 里面只有指令可能是不够的,最好提供点示例数据。指令是“提取标题分类”,下面再添加两个示例,提供的示例数据可以使用特定的模式或者格式,比如一个 title 冒号,然后是标题的内容,另起一行,再添加一个 category,冒号,然后是分类的名字。用同样的模式再添加一条示例数据。
模型学习了样式数据以后,就知道我们想让它做的事情了,如果有想让它提取分类的标题内容,可以使用跟示例数据同样的模式,或者叫格式,需要一个 title 冒号,然后是标题的内容,另起一行再添加一个 category 冒号。
点击提交,模型会在 category 冒号的后面补全内容标题的分类,这回这个分类就是我们想要的分类了。这是模型学习了小样本以后推断出来的。要注意的是,这种学习方式是暂时的,不会改变模型,也就是下回有同样的任务,你仍然需要提供这些示例数据。如果你希望改变模型,让它能够处理这种特定的任务,可以通过微调的方式,创建一个新的模型,这样使用这种微调之后的模型再做这种任务的时候,就不需要再提供示例数据了。