模型:

savasy/bert-base-turkish-sentiment-cased

英文

Bert-base Turkish Sentiment Model(Bert基础土耳其情感模型)

https://huggingface.co/savasy/bert-base-turkish-sentiment-cased

此模型用于情感分析,基于BERTurk进行土耳其语言的分析 https://huggingface.co/dbmdz/bert-base-turkish-cased

数据集

数据集来源于研究[2]和[3],并进行了合并。

  • 研究[2]收集了电影和产品评论。产品包括书籍、DVD、电子产品和厨房用品。电影数据集取自电影网站(Beyazperde),其中包含5331个正面句子和5331个负面句子。网页上的评论由撰写评论的用户按0到5的范围进行评分。研究将评分大于等于4的评论视为积极的情感,评分小于等于2的评论视为消极的情感。他们还从在线零售商网页构建了土耳其产品评论数据集。他们构建了基准数据集,其中包含关于某些产品(书籍、DVD等)的评论。同样,评论的评分范围从1到5,大多数评论属于5类。每个类别有700个积极评论和700个消极评论,其中消极评论的平均评分为2.27,积极评论的平均评分为4.5。该数据集也被研究[1]使用。

  • 研究[3]收集了推特数据集。他们提出了一种用于自动分类微博消息情感的新方法。该方法基于利用强大的特征表示和融合。

合并的数据集

size data
8000 dev.tsv
8262 test.tsv
32000 train.tsv
48290 total

以下论文使用了该数据集

[1] Yildirim, Savaş.(2020).比较深度神经网络与传统模型在土耳其语情感分析中的表现。10.1007/978-981-15-1216-2_12。

[2] Demirtas, Erkin和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"

结果

05/10/2020 17:00:43 - 信息 - transformers.trainer - ******正在运行评估****** 05/10/2020 17:00:43 - 信息 - transformers.trainer - Num examples = 7999 05/10/2020 17:00:43 - 信息 - transformers.trainer - 批量大小 = 8 评估:100% 1000/1000 [00:34<00:00,29.04it/s] 05/10/2020 17:01:17 - 信息 - __main__ - ******评估结果sst-2****** 05/10/2020 17:01:17 - 信息 - __main__ - acc = 0.9539942492811602 05/10/2020 17:01:17 - 信息 - __main__ - loss = 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)
# [{'label': 'LABEL_1', 'score': 0.9871089}]
print(p[0]['label'] == 'LABEL_1')
# True

p = sa("Film çok kötü ve çok sahteydi")
print(p)
# [{'label': 'LABEL_0', 'score': 0.9975505}]
print(p[0]['label'] == 'LABEL_1')
# False

测试

数据

假设您的文件有很多行评论和标签(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(i)
        
        pred = sa(lines[0])
        pred = pred[0]["label"].split("_")[1]
        
        if pred == lines[1]:
        crr = crr + 1

print(crr, i, crr/i)