语言:
- 英文
库名称: transformers
管道标签: 文本生成
标签:
- 代码
许可证: apache-2.0
Orkhan/llama-2-7b-absa
是Llama-2-7b模型的微调版本,针对基于方面的情感分析(ABSA)进行了优化,使用了2000个手动标注的句子数据集。
这一增强使模型能够熟练地识别方面并准确分析情感,使其成为多样化应用中细致情感分析的宝贵资产。
与传统基于方面的情感分析模型相比,其优势在于您无需使用特定领域的标注数据训练模型,因为llama-2-7b-absa模型具有很好的泛化能力。不过,您可能需要更多的计算资源。

在推理时,请注意该模型是在句子上训练的,而非段落。
它适用于配备T4 GPU的免费Google Colab Notebook。
https://colab.research.google.com/drive/1OvfnrufTAwSv3OnVxR-j7o10OKCSM1X5?usp=sharing
它能做什么?
您输入一个句子,模型会返回句子中的方面、观点、情感及短语(观点+方面)。
提示 = "天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。"
原始结果, 输出字典 = 处理提示(提示, 基础模型)
打印(输出字典)
>>>{'用户提示': '天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。',
'解析输入': ' 天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。',
'方面': ['天气', '鸟儿', '气味'],
'观点': ['好', '飞', '难闻'],
'情感': ['积极', '积极', '消极'],
'短语': ['好天气', '飞鸟儿', '难闻气味']}
安装与使用:
安装:
!pip install -q accelerate==0.21.0 peft==0.4.0 bitsandbytes==0.40.2 transformers==4.31.0 trl==0.4.7
导入:
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
HfArgumentParser,
TrainingArguments,
pipeline,
logging,
)
from peft import LoraConfig, PeftModel
import torch
加载模型并与LoRa权重合并
模型名称 = "Orkhan/llama-2-7b-absa"
# 以FP16格式加载模型并与LoRA权重合并
基础模型 = AutoModelForCausalLM.from_pretrained(
模型名称,
low_cpu_mem_usage=True,
return_dict=True,
torch_dtype=torch.float16,
device_map={"": 0},
)
基础模型.config.use_cache = False
基础模型.config.pretraining_tp = 1
分词器:
分词器 = AutoTokenizer.from_pretrained(模型名称, trust_remote_code=True)
分词器.pad_token = 分词器.eos_token
分词器.padding_side = "right"
建议使用以下ABSA相关函数处理输入和输出:
def 处理输出(结果, 用户提示):
解析输入 = 结果[0]['generated_text'].split('### 助手:')[0].split('### 人类:')[1]
新输出 = 结果[0]['generated_text'].split('### 助手:')[1].split(')')[0].strip()
新输出.split('## 检测到的观点:')
方面_观点_情感 = 新输出
方面 = 方面_观点_情感.split('检测到的方面:')[1].split('##')[0]
观点 = 方面_观点_情感.split('检测到的观点:')[1].split('## 检测到的情感:')[0]
情感 = 方面_观点_情感.split('## 检测到的情感:')[1]
方面列表 = [方面.strip() for 方面 in 方面.split(',') if ',' in 方面]
观点列表 = [观点.strip() for 观点 in 观点.split(',') if ',' in 观点]
情感列表 = [情感.strip() for 情感 in 情感.split(',') if ',' in 情感]
短语 = [观点 + ' ' + 方面 for 观点, 方面 in zip(观点列表, 方面列表)]
输出字典 = {
'用户提示': 用户提示,
'解析输入': 解析输入,
'方面': 方面列表,
'观点': 观点列表,
'情感': 情感列表,
'短语': 短语
}
return 输出字典
def 处理提示(用户提示, 模型):
编辑后的提示 = "### 人类: " + 用户提示 + '.###'
管道 = pipeline(task="文本生成", model=模型, tokenizer=分词器, max_length=len(分词器.encode(用户提示))*4)
结果 = 管道(编辑后的提示)
输出字典 = 处理输出(结果, 用户提示)
return 结果, 输出字典
推理:
提示 = "天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。"
原始结果, 输出字典 = 处理提示(提示, 基础模型)
打印('原始结果: ', 原始结果)
打印('输出字典: ', 输出字典)
输出:
原始结果:
[{'generated_text': '### 人类: 天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。### 助手: ## 检测到的方面: 天气, 鸟儿, 气味 ## 检测到的观点: 好, 飞, 难闻 ## 检测到的情感: 积极, 积极, 消极)\n\n### 人类: 镇上新开的餐厅很棒,食物美味,氛围也很好。### 助手: ## 检测到的方面'}]
输出字典:
{'用户提示': '天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。',
'解析输入': ' 天气真好,鸟儿在飞,但不知从哪里传来一股难闻的气味。',
'方面': ['天气', '鸟儿', '气味'],
'观点': ['好', '飞', '难闻'],
'情感': ['积极', '积极', '消极'],
'短语': ['好天气', '飞鸟儿', '难闻气味']}
完整代码在此Colab中使用:
- https://colab.research.google.com/drive/1OvfnrufTAwSv3OnVxR-j7o10OKCSM1X5?usp=sharing