引言
在上一篇文章UIE-事件提取中,介绍了doccano的用法,也介绍了基于prompt事件提取的做法。本篇文章继续介绍基于prompt情感分类的做法。
数据标注
关于doccano使用,请看构建分类式任务标签和句子级分类任务。标注完成后生成下面文件。
doccano_txt.json
1 | {"id": 7, "data": "这个产品用起来真的很流畅,我非常喜欢", "label": ["正向"]} |
使用句子级分类任务数据转换转换后,生成的样本如下所示:
train.txt
1 | {"content": "这个产品用起来真的很流畅,我非常喜欢", "result_list": [{"text": "正向", "start": -7, "end": -5}], "prompt": "情感倾向[正向,负向]"} |
test.txt
1 | {"content": "这个产品非常low", "result_list": [{"text": "负向", "start": -7, "end": -5}], "prompt": "情感倾向[负向,正向]"} |
训练
注意,输入到模型的prompt是固定的,每个句子的prompt都是固定的,比如:
[cls]
情感倾向[负向,正向][SEP]
这个产品用起来真的很流畅,我非常喜欢[SEP][cls]
情感倾向[负向,正向][SEP]
这个产品非常low[SEP]
这里你会好奇一个问题了,正向和负向这个label怎么表示呢,貌似原句中也没有这俩词?
注意:模型结构都是固定的(这里不知道的请看上篇文章)
请看训练样本,其中的start和end都是负值,这个经过convert_example转换后,就变成了prompt中对应的正向
和负向
所对应的index,即答案来自prompt中。
推理
prompt是固定的,即情感倾向[负向,正向]
,其他没有什么特殊需要注意的了。
总结
对于prompt learning,模板的构造是比较关键的,百度这种做法值得借鉴!