根据评论,生成情感四元组

答案格式为 目标| 观点| 方面| 情感极性; ...

适用于mt0-xl的lora adapter

使用方法

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
import peft
import torch
from peft import PeftConfig, PeftModel
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, HfArgumentParser

peft_model_id = 'yuyijiong/mt0-xl-sentiment-quadruple-prefixtuning-adapter'
peft_config = PeftConfig.from_pretrained(peft_model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(
    peft_config.base_model_name_or_path,
    load_in_8bit=True,
    device_map='auto'
)
tokenizer = AutoTokenizer.from_pretrained(peft_config.base_model_name_or_path)

# Load the Lora model
model = PeftModel.from_pretrained(model, peft_model_id)
model.eval()

text='情感四元组抽取任务:方面选项:价格/包装/物流/品质/口味;口感/综合评价/客服/色泽/气味/个体分量,情感极性选项:积极/中性/消极 答案格式:对象1| 观点1| 方面1| 情感极性1; 对象2| 观点2| 方面2| 情感极性2【已经开了4袋,普遍出现米沾在包装上了,看起来放了很久的样子】'
input_ids = tokenizer(text,return_tensors="pt", padding=True)['input_ids'].cuda(0)

with torch.no_grad():
    with torch.autocast('cuda'):
        output = model.generate(input_ids=input_ids,min_length=3,
                        do_sample=False,
                        max_new_tokens=32,
                        num_beams=4,
                        repetition_penalty=2.5,
                        length_penalty=1.5,
                        early_stopping=True)
output_str = tokenizer.batch_decode(output, skip_special_tokens=True)
['米| 普遍出现米沾在包装上了,看起来放了很久的样子| 品质| neg']