HebEMO - 现代希伯来语情感识别模型
HebEMO是一款用于检测极性并从现代希伯来语用户生成内容(UGC)中提取情感的工具,其训练基于我们收集和标注的独特Covid-19相关数据集。
在极性分类方面,HebEMO取得了加权平均F1分数=0.96的高性能表现。情感检测的F1分数达到0.78-0.97,但惊讶情绪除外(F1=0.41)。这些结果优于目前报告的最佳性能,甚至与英语相比也是如此。
情感UGC数据描述
我们的UGC数据包括2020年1月至2020年8月期间从3个主要以色列新闻网站收集的新闻文章评论。数据总大小约为150 MB,包含超过700万个单词和35万条句子。约2000条句子由众包成员标注(每条句子3-10名标注者),标注内容包括整体情感(极性)和八种情绪:愤怒、厌恶、期待、恐惧、快乐、悲伤、惊讶和信任。下表显示了每种情绪在句子中出现的比例。
|
愤怒 |
厌恶 |
期待 |
恐惧 |
快乐 |
悲伤 |
惊讶 |
信任 |
情感 |
比例 |
0.78 |
0.83 |
0.58 |
0.45 |
0.12 |
0.59 |
0.17 |
0.11 |
0.25 |
性能
情感识别
情绪 |
F1分数 |
精确率 |
召回率 |
愤怒 |
0.96 |
0.99 |
0.93 |
厌恶 |
0.97 |
0.98 |
0.96 |
期待 |
0.82 |
0.80 |
0.87 |
恐惧 |
0.79 |
0.88 |
0.72 |
快乐 |
0.90 |
0.97 |
0.84 |
悲伤 |
0.90 |
0.86 |
0.94 |
惊讶 |
0.40 |
0.44 |
0.37 |
信任 |
0.83 |
0.86 |
0.80 |
上述指标针对正类(即文本中反映出的情绪)。
情感(极性)分析
|
精确率 |
召回率 |
F1分数 |
中性 |
0.83 |
0.56 |
0.67 |
积极 |
0.96 |
0.92 |
0.94 |
消极 |
0.97 |
0.99 |
0.98 |
准确率 |
|
|
0.97 |
宏平均 |
0.92 |
0.82 |
0.86 |
加权平均 |
0.96 |
0.97 |
0.96 |
情感(极性)分析模型也可在AWS上使用!更多信息请访问AWS的Git
使用方法
情感识别模型
在线模型可在huggingface spaces或colab notebook中找到。
# !pip install pyplutchik==0.0.7
# !pip install transformers==4.14.1
!git clone https://github.com/avichaychriqui/HeBERT.git
from HeBERT.src.HebEMO import *
HebEMO_model = HebEMO()
HebEMO_model.hebemo(input_path = 'data/text_example.txt')
# 返回分析的pandas.DataFrame
hebEMO_df = HebEMO_model.hebemo(text='החיים יפים ומאושרים', plot=True)
情感分类模型(仅极性):
from transformers import AutoTokenizer, AutoModel, pipeline
tokenizer = AutoTokenizer.from_pretrained("avichr/heBERT_sentiment_analysis") #与'avichr/heBERT'相同
model = AutoModel.from_pretrained("avichr/heBERT_sentiment_analysis")
# 使用方法
sentiment_analysis = pipeline(
"sentiment-analysis",
model="avichr/heBERT_sentiment_analysis",
tokenizer="avichr/heBERT_sentiment_analysis",
return_all_scores = True
)
sentiment_analysis('אני מתלבט מה לאכול לארוחת צהריים')
>>> [[{'label': 'neutral', 'score': 0.9978172183036804},
>>> {'label': 'positive', 'score': 0.0014792329166084528},
>>> {'label': 'negative', 'score': 0.0007035882445052266}]]
sentiment_analysis('קפה זה טעים')
>>> [[{'label': 'neutral', 'score': 0.00047328314394690096},
>>> {'label': 'possitive', 'score': 0.9994067549705505},
>>> {'label': 'negetive', 'score': 0.00011996887042187154}]]
sentiment_analysis('אני לא אוהב את העולם')
>>> [[{'label': 'neutral', 'score': 9.214012970915064e-05},
>>> {'label': 'possitive', 'score': 8.876807987689972e-05},
>>> {'label': 'negetive', 'score': 0.9998190999031067}]]