基于BERT的土耳其语情感分析模型
https://huggingface.co/savasy/bert-base-turkish-sentiment-cased
本模型用于情感分析任务,基于土耳其语BERTurk模型开发 https://huggingface.co/dbmdz/bert-base-turkish-cased
引用文献
若在研究中使用了本模型,请引用以下文献:
@misc{yildirim2024finetuning,
title={Fine-tuning Transformer-based Encoder for Turkish Language Understanding Tasks},
author={Savas Yildirim},
year={2024},
eprint={2401.17396},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@book{yildirim2021mastering,
title={Mastering Transformers: Build state-of-the-art models from scratch with advanced natural language processing techniques},
author={Yildirim, Savas and Asgari-Chenaghlu, Meysam},
year={2021},
publisher={Packt Publishing Ltd}
}
数据集
数据集整合自文献[2]和[3]的研究成果:
-
文献[2]收集了电影和商品评论数据。商品类别包括书籍、DVD、电子产品和厨房用品。
电影数据集来自土耳其电影网站Beyazperde,包含5331条正面和5331条负面评价。网站用户采用0-5分制评分,研究者将≥4分的评价视为正面,≤2分的视为负面。他们还从电商平台收集了土耳其商品评论数据,每个商品类别(书籍、DVD等)各包含700条正面和700条负面评价,负面评价平均分为2.27,正面评价平均分为4.5。该数据集也被文献[1]采用。
-
文献[3]收集了推特数据集,提出了一种基于特征表示与融合的微博情感自动分类方法。
合并后数据集
规模 |
数据文件 |
8000 |
开发集(dev.tsv) |
8262 |
测试集(test.tsv) |
32000 |
训练集(train.tsv) |
48290 |
总计 |
使用该数据集的研究论文
[1] Yildirim, Savaş. (2020). 《土耳其语情感分析中深度神经网络与传统模型的比较》. 10.1007/978-981-15-1216-2_12.
[2] Demirtas, Erkin and Mykola Pechenizkiy. 2013. 《基于机器翻译的跨语言情感极性检测》. 第二届情感发现与意见挖掘国际研讨会论文集(WISDOM '13)
[3] Hayran, A., Sert, M. (2017), 《基于词嵌入与融合技术的微博情感分析》, IEEE第25届信号处理与通信应用会议(SIU 2017), 土耳其贝莱克
训练方法
export GLUE_DIR="./sst-2-newall"
export TASK_NAME=SST-2
python3 run_glue.py \
--model_type bert \
--model_name_or_path dbmdz/bert-base-turkish-uncased\
--task_name "SST-2" \
--do_train \
--do_eval \
--data_dir "./sst-2-newall" \
--max_seq_length 128 \
--per_gpu_train_batch_size 32 \
--learning_rate 2e-5 \
--num_train_epochs 3.0 \
--output_dir "./model"
性能表现
2020年10月5日17:00:43 - 信息 - transformers.trainer - ***** 正在评估 *****
2020年10月5日17:00:43 - 信息 - transformers.trainer - 样本数量 = 7999
2020年10月5日17:00:43 - 信息 - transformers.trainer - 批次大小 = 8
评估进度: 100% 1000/1000 [耗时00:34<00:00, 29.04样本/秒]
2020年10月5日17:01:17 - 信息 - __main__ - ***** SST-2评估结果 *****
2020年10月5日17:01:17 - 信息 - __main__ - 准确率 = 0.9539942492811602
2020年10月5日17:01:17 - 信息 - __main__ - 损失值 = 0.16348013816401363
模型准确率达到95.4%
使用示例
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline
model = AutoModelForSequenceClassification.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
tokenizer = AutoTokenizer.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
sa = pipeline("sentiment-analysis", tokenizer=tokenizer, model=model)
p = sa("bu telefon modelleri çok kaliteli , her parçası çok özel bence")
print(p)
print(p[0]['label'] == 'LABEL_1')
p = sa("Film çok kötü ve çok sahteydi")
print(p)
print(p[0]['label'] == 'LABEL_1')
批量测试
数据格式
假设测试文件每行包含评论内容和标签(1或0),以制表符分隔:
评论1 ... \t 标签
评论2 ... \t 标签
...
测试代码
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline
model = AutoModelForSequenceClassification.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
tokenizer = AutoTokenizer.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
sa = pipeline("sentiment-analysis", tokenizer=tokenizer, model=model)
input_file = "/path/to/your/file/yourfile.tsv"
i, crr = 0, 0
for line in open(input_file):
lines = line.strip().split("\t")
if len(lines) == 2:
i = i + 1
if i % 100 == 0:
print(f"已处理{i}条样本")
pred = sa(lines[0])
pred = pred[0]["label"].split("_")[1]
if pred == lines[1]:
crr = crr + 1
print(f"正确数: {crr}, 总数: {i}, 准确率: {crr/i}")