广告行业中那些趣事系列69:使用LLM+prompt进行数据标注任务实践

导读:本文是“数据拾光者”专栏的第六十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从理论到实际介绍了使用LLM+prompt进行数据标注任务的几种方式,对于希望将LLM用于线上实际业务尤其是数据标注任务的小伙伴可能有帮助。

欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
知乎专栏:数据拾光者
公众号:数据拾光者

摘要:本篇从理论到实际介绍了使用LLM+prompt进行数据标注任务的几种方式。首先介绍了背景,使用LLM可以辅助我们对数据进行打标,从而节约人力,提升标注质量;然后分别介绍了prompt工程优化技巧的炼丹式、LLM+Snorkel的工具式和智能式Agent三种方式;最后在实际工作中利用prompt帮助我们对广告文案数据进行打标,并且取得了不错的线上效果。对于希望将LLM用于线上实际业务尤其是数据标注任务的小伙伴可能有帮助。

下面主要按照如下思维导图进行学习分享:

2af40595477dcc65004c15f1080819fe.jpeg

1.背景介绍

本篇整理了使用LLM+prompt进行数据打标的三种不同的方式,包括prompt工程优化技巧、LLM+snorkel和Agent智能式。之前写过的一篇文章使用LLM进行蒸馏属于其中的prompt工程优化技巧,这篇进行一定程度的扩展。

随着chatgpt大火,这一类大语言模型LLM因为效果好和应用范围广在学术界和工业界受到越来越多的关注。我们团队也打算将chatgpt应用到实际的业务场景中,其中一个很有价值的方向就是数据标注。比如像文本分类、关键词抽取等任务,构建模型时都依赖人工标注数据,而标注数据数量的多少和质量的好坏会直接影响模型的效果。我们之前主要是在线上采样一些数据提交给专门的标注团队进行标注,现在chatgpt出来之后我们希望能将打标这个任务交给LLM来做,这样就可以用极少的成本来打标数据。

有些小伙伴可能会想,既然chatgpt在文本分类和关键词任抽取任务上已经效果很好了,为啥不直接应用到线上任务呢?一个原因是对于一些线上性能要求很高的场景,chatgpt这一类大语言模型可能很难满足线上延时要求;还有一个很重要的原因是请求chatgpt接口是根据token付费的,直接接入业务成本太高了。所以一个比较靠谱的方案是,用chatgpt帮我们打标数据,然后用打标的数据使用常规的方法比如BERT、fasttext来训练模型。这样对于线上任务性能来说并不会有太大的影响,还能利用chatgpt的能力来帮助我们提升效果。

2.使用LLM标注的三大范式

2.1 炼丹式:prompt工程优化技巧

prompt工程优化技巧这一类方式目标是通过各种prompt优化技巧来提升测试集打标效果,这里主要包括一致性Self-Consistency、COT(Chain-of-Thought)、Few shot prompt等技术。

2.1.1 使用LLM进行蒸馏论文详解

本篇主要介绍WWW 2023论文《What do LLMs Know about Financial Markets? A Case Study on Reddit Market Sentiment Analysis》[1]中提出通过LLM模型来标注数据从而将知识蒸馏到生产中的小模型上。

2.1.2 论文摘要

在金融市场情感分析任务中,由于需要了解金融市场和相关行业术语,对于人工标注要求极高,获取高质量的标注样本是一项很有挑战的任务。而高质量的标注数据会直接影响金融市场情感模型效果的好坏。在这种情况下作者提出利用chatgpt这一类LLM模型涌现的知识能力来标注数据,然后将标注的数据使用到生产中的小模型上。通过manual few-shot COT+ self-consistency的prompt组合技来获取弱标签数据,然后通过蒸馏的方式将LLM模型学习到的知识迁移到生产中用到的小模型,可以提升分类效果,同时保持现有生产模型的性能。

2.1.3 技术框架

论文整体框架如下图所示:

7a14cb0d5d56e18bf38463e1d1233ce4.jpeg

图1 整体框架图

第一步:利用LLM打标数据获得弱标签数据weakly labeled data。

论文中LLM模型使用的是GPT-3或者PaLM模型。随着LLM模型效果越来越好,可以使用效果更好chatgpt、gpt4或者其他更好的LLM模型。使用基于上下文学习的打标方法,主要包括以下几部分:

任务描述;使用思维链COT注入领域知识;通过多次生成得到不同推理路径的打标结果。

第二步:在弱标签数据上使用生产小模型训练分类器。

使用LLM对多次打标的样本数据获取弱标签得到标注数据集,通过知识蒸馏技术将知识迁移到BERT和T5这一类小模型上训练分类器。

第三步:线上构建端到端模型应用到生产任务中。

2.1.4 用LLM标注的原因

因为社交媒体中的金融情感分析任务使用有监督学习模型需要一定数量的标注数据,而这些标注数据需要了解金融市场和相关行业术语,所以对人工标注要求极高,获取高质量的标注样本是一项很有挑战的任务。为了降低标注难度,节约标注人力,希望利用LLM模型涌现的知识能力来打标数据,通过知识蒸馏技术将LLM模型学习到的知识迁移到生产中的小模型,从而提升线上效果的同时,还能保持生产的性能。

2.1.5 基于LLM进行上下文学习

论文作者经过优化实践,提出了一套prompt组合技:manual few-shot COT + self-consistency相结合:

(1)manual few-shot COT

在prompt工程中,通过few-shot方法,对于每类标签人工采样一些示例,使用思维链COT技术。COT最初的设计目的是通过显式指示模型生成中间推理步骤来提高LLM的多步推理能力,使用 COT 技术使 LLM 总结金融相关论点 ,从而隐含地迫使模型回忆相关的金融领域知识。即总结对股票涨跌的观点,然后再给出最终答案。prompt设计如下所示:

d33e1b6447340c2e2af11f0e91611ac1.jpeg

图2 prompt设计

上图中各部分介绍:

[1]任务描述:模拟任务设置并使LLM模型熟悉目标领域。比如:我正在考虑投资点什么,下面是我所拥有的信息。输入一条信息,我会对股价上涨、下跌和不确定发表看法;

[2]一个完整的示例:通过一个或多个输入输出示例说明任务[3]输入文本信息。比如:$DKNG 管理层太贪婪了,Draftking 只是在一个新的热门行业中攫取大量现金吗?该股在过去 6 个月内下跌了 57%,今天盘前又下跌了 16%。Draftkings 管理层印制了新股票来补偿自己,相当于年收入的 50% 左右。

[4]推理流程。比如:$DKNG 股票在过去 6 个月中下跌。 管理层印制新股票来补偿自己,这将损害公司。

[5]结论。比如:我认为公司的股价应该下跌

(2)self-consistency

因为LLM在生成打标结果时存在一定的随机性,同时用户经常在帖子中引用多个可能相互冲突的论点,可能产生不同的推理路径,所以论文会对样本进行多次重复打标得到弱标签数据。

2.1.6 实验设置

论文作者对金融主体的情感分析任务进行了一定的改造,转化成了预测股票涨跌的任务。如果情绪是积极的,则股票要涨;如果情绪是消极的,则股票要跌;如果情绪是中立的,则股票涨跌不确定。对任务的改造主要原因是让任务更加具体可理解一些,这样更有利于设计prompt。

数据集方面主要有三个:

FiQA News:带有新闻标题的FiQA-News

FiQA Post:带有 Twitter和 Stocktwits 微博的 FiQA-Post

Reddit:使用由专有主题分类器标记为与金融相关的 Reddit 帖子

数据集相关信息如下图所示:

a66e1fbab8ed87b1b37fa161850ebd36.jpeg

图3 数据集信息

对照组baseline模型主要有两类:

· 第一类是字符集的T5模型Charformer (CF),分别使用FiQA News和FiQA Post数据集进行微调;

· 第二类是两种广泛使用的现有市场情绪模型:FinBERT-HKUST 和 FinBERTProsusAI。

实验组有两个:

第一个是PaLM × 8,使用大语言模型PaLM-540B,使用思维链COT,8代表self-consistency中sample的次数,也就是重复预测8次;

第二个是CF-Distilled PaLM,将PaLM作为老师模型蒸馏到学生模型CF中。

2.1.7 实验结果分析

(1) 整体实验

下面是整体实验结果:

849581b103e81f192405259d1c9d1f30.jpeg

图4 整体实验结果

从上面的实验结果可以看出:

(1)在三个数据集上PaLM × 8效果都是最好的,说明大语言模型PaLM不仅效果好,而且应用范围也很广;

(2)使用CF在FiQA Post数据集进行微调之后的模型在FiQA News和FiQA Post两个数据集上效果很好,说明用业务相关数据集微调预训练模型是有效的。但是在Reddit上效果很差,不具有迁移性;

(3)CF-Distilled PaLM整体来看虽然不如PaLM × 8,但相比于对照组也提升很多。使用Reddit数据集蒸馏模型,在FiQA News和FiQA Post两个数据集上效果也不错,说明可以很好的迁移。

(2) 大语言模型上下文学习消融实验

论文还对大语言模型上下文学习进行了消融实验,下图对比了PaLM大语言模型参数量、是否使用COT和self-consistency中sample的次数对效果的影响:

2128c2bd2d9a164ac1387a12367c0786.jpeg

图5 上下文学习消融实验

从上图中可以得到如下结论:

使用参数量更大的PaLM模型明显可以提升分类效果;使用COT技术可以明显提升分类效果;随着self-consistency中sample的次数不断增加,分类效果提升明显,但是增加到一定次数之后(论文中是8)模型效果不会一直提升,相反可能还会有轻微下降。

(3) 蒸馏方式实验

论文中作者将PaLM蒸馏到Charformer模型上时,使用了两种蒸馏方式获取弱标签:

classification(CLS):通过投票法将每个样本出现次数最多的标签作为hard label;regression(RGR) loss:每个样本会sample多次,将多次打标结果的标签分布作为soft label,通过regression loss(MSE)来学习。比如对于一条样本来说,重复生成8次分类结果,其中positive为5,negtive为1,neural为2,那么将5/8、1/8、2/8作为soft label去训练模型。

作者使用PaLM模型生成打标结果时会重复生成8次,实验对比了一致性大于等于5的样本时使用两种不同的蒸馏方式对分类效果的影响。作者将一致性次数小于5的样本数据丢弃了,主要原因是认为这部分样本的置信度比较低,准确性也比较低。下面是实验结果数据:

87cfcc022b9ab734b3838dd8f9545c6e.jpeg

图6 蒸馏消融实验

从上图中可以发现:

一致性越高,可以使用的样本越少。当设置一致性阈值为8次时,可使用的样本仅为6240;而设置一致性阈值为5次时可以使用的样本为17456;使用CLS方式时,一致性越高的样本分类效果越好,其中使用8次预测一致的样本分类效果最好;使用RGR方式时,一致性越低,可以使用更多的样本,分类效果最好,其中使用5次预测一致的样本分类效果最好。

下面画出了两种蒸馏方式效果最好时CLS-8和RGR-5的PR曲线(CLS使用一致性为8次的样本、RGR使用一致性为5次的样本):

ee41c93c8b701944569f237bb3dd4e4c.jpeg

图7 CLS-8和RGR-5的PR曲线

论文作者最后选择使用RGR方式进行蒸馏,主要原因是RGR可以使用更多更难的数据用于训练模型,可以提升模型的泛化能力。还有个原因就是RGR的PR曲线更加平滑一些。线上部署时可以根据p来选择r,这个也比较适合咱们的业务场景,比如模型评估是根据p为0.8时设置阈值来查看r。

(4) 错误分析

论文作者使用CF-Distilled PaLM在Reddit数据集上绘制了混淆矩阵:

a1e6b3bad0f2636445f12ce6d258873d.jpeg

图8 CF-Distilled PaLM在Reddit上的混淆矩阵

从混淆矩阵中可以看出模型对于Negative和Positive两个标签之间识别效果较好,主要容易将这两个标签和Neutral进行混淆。

2.2 工具式:LLM+Snorkel

这一范式主要参考的是Snorkel论文:《Language Models in the Loop: Incorporating Prompting into Weak Supervision》

2.2.1 Snorkel的框架及使用步骤

这里看下Snorkel的框架及使用步骤:

030fed1d7f9eddcff111ad9289287731.jpeg

图9 Snorkel的框架图

使用Snorkel的步骤如下:

(1) 定义多种多样的Label Function(将sample映射到label的函数,简称LF)获得弱标签weak labels;

a)基于规则的LF,LF可以是一段正则表达式、基于词库的匹配、或对模型预测结果的组合;

b)LF的输出为任务label集合中的某一个,或abstain(置信度不足时,放弃标注)

类似我们之前构建octs里的enlarge策略

(2) 使用Label Model,对weak labels进行去噪,得到estimated label;

(3) 使用estimated label,以有监督学习的方式训练任务模型。

2.2.2 引入LLM的Snorkel

引入LLM的Snorkel,整体流程不变,只不过增加了通过prompt工程从多维度来构建Label Function。

a37898361291f4e06f535fa06072714e.jpeg

图10 通过prompt工程从多维度来构建Label Function

引入LLM的Snorkel整体框架如下图所示:

9d5a05e9edb20f64472f67058bd6d24f.jpeg

图11 引入LLM的Snorkel整体框架

2.2.3 工具式概括

LLM+Snorkel工具式主要是利用当前比较流行好用的snorkel标注,其中将LLM用于构建label function来帮助我们打标,所以核心还是工具的使用。利用优秀的LLM模型,构建复杂或者简单的prompt来打标,再利用打标框架从而完成打标任务。

2.3 智能式:Agent

2.3.1 智能式概括

智能式主要参考的是openai使用GPT-4来进行内容审核数据的文章:《Using GPT-4 for content moderation》。Agent式可以理解构建更加复杂智能的prompt来进行打标,里面包括使用prompt工程优化中的炼丹技巧、标签定义、任务边界设置等等全部通过prompt来表达。

2.3.2 智能式的一个简单例子

关于智能式的一个例子可以参考下面我们实际工作中使用chatgpt+prompt来给小说广告文案打标的示例,里面非常详细。

03 使用chatgpt标注广告文案数据

3.1 整体广告文案打标流程

6acba6b81cdc337bd8fbc4705365c665.jpeg

图12 广告文案打标流程图

3.2 prompt设计

prompt_text = """
你是一名专业数据标注员,你的任务是对给定的每句话打上分类标签。

请一步步思考,仔细推理,同时注意以下4点:
1、以上两类标签均只是列举,你可以随时新增标签,但不要新增相似的
2、所有标签要含义具体明确,字数4个左右,尽量避免太宽泛的2个字。
3、手法套路类标签可不打(输出“无”)或只打一个,内容类标签可不打(输出“无”)或最多两个


以下是几个示例:
对于输入
```
1、小伙穿越成皇帝,一句话竟改变了整个国运!
2、主任把卡甩在脚下,我只得弯腰去捡,抬头却瞥见她蔑视的目光
XX
```
你要以如下表格形式输出(共3列,列之间空格分割,多个标签之间逗号分割):
```
序号 套路标签 内容标签
XX
```

下面请对如下广告文案按照上述规范打上标签:
```
%s
```
"""

3.3 打标结果

我们整体在小说标签和视频标签上进行打标,整体来看结果还不错。这里效果数据就不再展示了。

04 总结与反思

本篇从理论到实际介绍了使用LLM+prompt进行数据标注任务的几种方式。首先介绍了背景,使用LLM可以辅助我们对数据进行打标,从而节约人力,提升标注质量;然后分别介绍了prompt工程优化技巧的炼丹式、LLM+Snorkel的工具式和智能式Agent三种方式;最后在实际工作中利用prompt帮助我们对广告文案数据进行打标,并且取得了不错的线上效果。对于希望将LLM用于线上实际业务尤其是数据标注任务的小伙伴可能有帮助。

参考资料

[1] using GPT-4 for content moderation:https://openai.com/blog/using-gpt-4-for-content-moderation

[2] What do LLMs Know about Financial Markets? A Case Study on Reddit Market Sentiment Analysis: https://arxiv.org/pdf/2212.11311.pdf

[3]《Language Models in the Loop: Incorporating Prompting into Weak Supervision》:https://arxiv.org/abs/2205.02318

最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。

码字不易,欢迎小伙伴们点赞和分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值