--- language: - zh - en library_name: transformers pipeline_tag: text2text-generation datasets: - Yaxin/SemEval2016Task5NLTK metrics: - yuyijiong/quad_match_score --- 情感分析任务 T5模型\ [yuyijiong/T5-large-sentiment-analysis-Chinese](https://huggingface.co/yuyijiong/T5-large-sentiment-analysis-Chinese)的改进版,增加更多任务,使用chatgpt生成部分数据\ 在多个中英文情感分析数据集上微调得到 \ 输出格式为 ``` '对象1 | 观点1 | 方面1 | 情感极性1 & 对象2 | 观点2 | 方面2 | 情感极性2 ......' ``` 可以使用[yuyijiong/quad_match_score](https://huggingface.co/spaces/yuyijiong/quad_match_score/tree/main)评估指标进行评估 ```python import evaluate module = evaluate.load("yuyijiong/quad_match_score") predictions=["food | good | food#taste | pos"] references=["food | good | food#taste | pos & service | bad | service#general | neg"] result=module.compute(predictions=predictions, references=references) print(result) ``` 支持以下情感分析任务 ``` ["四元组(对象 | 观点 | 方面 | 极性)", '二元组(对象 | 观点)', '三元组(对象 | 观点 | 方面)', '三元组(对象 | 观点 | 极性)', '三元组(对象 | 方面 | 极性)', '二元组(方面 | 极性)', '二元组(观点 | 极性)', '单元素(极性)'] ``` 可以增加额外条件来控制答案的生成,例如: 答案风格控制,希望抽取的观点为整句话or缩减为几个词:\ (观点尽量短)\ (观点可以较长)\ (对较长观点进行概括) 注意此条件可能使答案中出现与原文不同的词 可以对指定的方面做情感分析: (方面选项:商品/物流/商家/平台) 情感对象target可能为null,表示文本中未明确给出 可以允许模型自动猜测为null的对象: (补全null) support the following sentiment analysis tasks ``` ["quadruples (target | opinion | aspect | polarity)", "quadruples (target | opinion | aspect | polarity)", 'pairs (target | opinion)', 'triples (target | opinion | aspect)', 'triples (target | opinion | polarity)', 'triples (target | aspect | polarity)', 'pairs (aspect | polarity)', 'pairs (target | polarity)', 'pairs (opinion | polarity)', 'single (polarity)'] ``` 使用方法: Usage ```python import torch from transformers import T5Tokenizer, AutoModelForSeq2SeqLM tokenizer = T5Tokenizer.from_pretrained("yuyijiong/T5-large-sentiment-analysis-Chinese-MultiTask") model = AutoModelForSeq2SeqLM.from_pretrained("yuyijiong/T5-large-sentiment-analysis-Chinese-MultiTask", device_map="auto") generation_config=GenerationConfig.from_pretrained("yuyijiong/T5-large-sentiment-analysis-Chinese-MultiTask") text = '情感四元组(对象 | 观点 | 方面 | 极性)抽取任务(观点可以较长): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。]' input_ids = tokenizer(text,return_tensors="pt", padding=True)['input_ids'].cuda(0) with torch.no_grad(): output = model.generate(input_ids=input_ids,generation_config=generation_config) output_str = tokenizer.batch_decode(output, skip_special_tokens=True) print(output_str) ``` 用法示例 ``` Q:情感四元组(对象 | 观点 | 方面 | 极性)抽取任务(观点可以较长): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:个头 | 大 | 商品#大小 | 积极 & 口感 | 不错 | 商品#口感 | 积极 & null | 个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好 | 商品#新鲜程度 | 消极 Q:情感四元组(对象 | 观点 | 方面 | 极性)抽取任务(观点可以较长,补全null): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:个头 | 大 | 商品#大小 | 积极 & 口感 | 不错 | 商品#口感 | 积极 & null (个别) | 有烂掉口子刻意用泥土封着,这样做不好 | 商品#新鲜程度 | 消极 Q:情感四元组(对象 | 观点 | 方面 | 极性)抽取任务(观点尽量短): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:个头 | 大 | 商品#大小 | 积极 & 口感 | 不错 | 商品#口感 | 积极 Q:情感四元组(对象 | 观点 | 方面 | 极性)抽取任务(对较长观点进行概括): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:个头 | 大 | 商品#大小 | 积极 & 口感 | 不错 | 商品#口感 | 积极 & null | 坏了口子封泥 | 商品#新鲜程度 | 消极 Q:情感三元组(对象 | 观点 | 极性)抽取任务(观点可以较长,补全null): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:个头 | 大 | 积极 & 口感 | 不错 | 积极 & null (花生) | 个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好 | 消极 Q:判断以下评论的情感极性: [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:中性 Q:情感二元组(方面 | 极性)抽取任务(方面选项: 价格#性价比/价格#折扣/价格#水平/食品#外观/食物#分量/食物#味道/食物#推荐): [个头大、口感不错,就是个别坏了的或者有烂掉口子刻意用泥土封着,这样做不好。] A:食物#分量 | 积极 & 食物#味道 | 中性 Q:sentiment quadruples (target | opinion | aspect | polarity) extraction task : [The hot dogs are good , yes , but the reason to get over here is the fantastic pork croquette sandwich , perfect on its supermarket squishy bun .] A:hot dogs | good | food#quality | pos & pork croquette sandwich | fantastic | food#quality | pos & bun | perfect | food#quality | pos ```