模型:
savasy/bert-base-turkish-sentiment-cased
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)