引言

在上一篇文章UIE-事件提取中,介绍了doccano的用法,也介绍了基于prompt事件提取的做法。本篇文章继续介绍基于prompt情感分类的做法。

数据标注

关于doccano使用,请看构建分类式任务标签句子级分类任务。标注完成后生成下面文件。

doccano_txt.json

1
2
{"id": 7, "data": "这个产品用起来真的很流畅,我非常喜欢", "label": ["正向"]}
{"id": 8, "data": "这个产品非常low", "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,模板的构造是比较关键的,百度这种做法值得借鉴!