✅ Benchmark em inglês para avaliar os métodos de explicação causal.
Análise de análise de sentimentos baseada em aspectos validados pelo homem (ABSA) Benchmark.
Eldar David Abraham, Karel D'Oosterlink, Amir Feder, Yair Gat, Atticus Geiger, Christopher Potts, ROI Reichart, Zhengxuan Wu. 2022. CEBAB: Estimando os efeitos causais dos conceitos do mundo real no comportamento do modelo de PNL. Sra., Stanford University, Technion - Instituto de Tecnologia de Israel e Universidade de Ghent.
@unpublished{abraham-etal-2022-cebab,
title={{CEBaB}: Estimating the Causal Effects of Real-World Concepts on {NLP} Model Behavior},
author={Abraham, Eldar David and D'Oosterlinck, Karel and Feder, Amir and Gat, Yair Ori and Geiger, Atticus and Potts, Christopher and Reichart, Roi and Wu, Zhengxuan},
note={arXiv:2205.14140},
url={https://arxiv.org/abs/2205.14140},
year={2022}}
Os arquivos do conjunto de dados podem ser baixados de Cebab-v1.1.zip. Nosso V1.1 difere da v1.0 apenas nesse V1.1 possui IDs exclusivos adequados nossos exemplos e corrige um bug que levou a alguns IDs não únicos na versão anterior. Não há alterações em outros campos críticos.
Observe que recomendamos que você use a biblioteca de dados do HuggingFace para usar nosso conjunto de dados. Veja abaixo um carregamento de dados 1 linear.
O conjunto de dados consiste em trens_exclusive/trens_inclusive/dev/test splits:
train_exclusive.jsontrain_inclusive.jsontrain_observational.jsondev.jsontest.json A folha de dados do nosso conjunto de dados:
O CEBAB é mantido principalmente usando a biblioteca de dados do HuggingFace:
"""
Make sure you install the Datasets library using:
pip install datasets
"""
from datasets import load_dataset
CEBaB = load_dataset ( "CEBaB/CEBaB" ) Esta função pode ser usada para carregar qualquer subconjunto dos arquivos crus *.json :
import json
def load_split ( splitname ):
with open ( splitname ) as f :
data = json . load ( f )
return data {
'id' : str in format dddddd_dddddd as the concatenation of original_id and edit_id ,
'original_id' : str in format dddddd ,
'edit_id' : str in format dddddd ,
'is_original' : bool ,
'edit_goal' : str ( one of "Negative" , "Positive" , "unknown" ) or None if is_original ,
'edit_type' : str ( one of "noise" , "service" , "ambiance" , "food" ),
'edit_worker' : str or None if is_original ,
'description' : str ,
'review_majority' : str ( one of "1" , "2" , "3" , "4" , "5" , "no majority" ),
'review_label_distribution' : dict ( str to int ),
'review_workers' : dict ( str to str ),
'food_aspect_majority' : str ( one of "Negative" , "Positive" , "unknown" , "no majority" ),
'ambiance_aspect_majority' : str ( one of "Negative" , "Positive" , "unknown" , "no majority" ),
'service_aspect_majority' : str ( one of "Negative" , "Positive" , "unknown" , "no majority" ),
'noise_aspect_majority' : str ( one of "Negative" , "Positive" , "unknown" , "no majority" ),
'food_aspect_label_distribution' : dict ( str to int ),
'ambiance_aspect_label_distribution' : dict ( str to int ),
'service_aspect_label_distribution' : dict ( str to int ),
'noise_aspect_label_distribution' : dict ( str to int ),
'food_aspect_validation_workers' : dict ( str to str ),
'ambiance_aspect_validation_workers' : dict ( str to str ),
'service_aspect_validation_workers' : dict ( str to str ),
'noise_aspect_validation_workers' : dict ( str to str ),
'opentable_metadata' : {
"restaurant_id" : int ,
"restaurant_name" : str ,
"cuisine" : str ,
"price_tier" : str ,
"dining_style" : str ,
"dress_code" : str ,
"parking" : str ,
"region" : str ,
"rating_ambiance" : int ,
"rating_food" : int ,
"rating_noise" : int ,
"rating_service" : int ,
"rating_overall" : int
}
}Detalhes:
'id' : o identificador exclusivo este exemplo (uma combinação de dois IDs listados abaixo).'original_id' : o identificador exclusivo da frase original para um exemplo editado.'edit_id' : o identificador exclusivo da frase editada.'is_original' : indique se essa frase é uma edição ou não.'edit_goal' : o rótulo do objetivo para o aspecto de edição, se é um exemplo editado, caso contrário, None .'edit_type' : o aspecto a modificar ou rotular com sentimentos, se é um exemplo editado, caso contrário, None .'edit_worker' : MTURK ID anonimizado do trabalhador que escreveu 'description' . Estes são da mesma família de IDs usados em 'aspect_validation_workers' .'description' : o exemplo de texto.'review_majority' : o rótulo de nível de revisão para o aspecto de edição escolhido por pelo menos três dos cinco trabalhadores, se houver um, senão no majority .'review_label_distribution' : Distribuição de classificação de revisão da tarefa de validação do MTURK.'review_workers' : Resposta individual para classificação no nível de revisão dos anotadores. As chaves são listas de IDs MTURK anonimizados, que são usados de forma consistente em todo o conjunto de dados.'*_aspect_majority' : o rótulo no nível de aspecto para o aspecto de edição escolhido por pelo menos três dos cinco trabalhadores, se houver um, senão no majority .'*_aspect_label_distribution' : distribuição de classificação no nível de aspecto da tarefa de validação do MTURK.'*_aspect_label_workers' : Resposta individual para classificação de nível de revisão dos anotadores. As chaves são listas de IDs MTURK anonimizados, que são usados de forma consistente em todo o conjunto de dados.'opentable_metadata' : metadados para a revisão.Aqui está um exemplo,
{
"id" : "000000_000000" ,
"original_id" : "000000" ,
"edit_id" : "000000" ,
"is_original" : true ,
"edit_goal" : null ,
"edit_type" : null ,
"edit_worker" : null ,
"description" : "Overbooked and didnot honor reservation time,put on wait list with walk INS" ,
"review_majority" : "1" ,
"review_label_distribution" : {
"1" : 4 ,
"2" : 1
},
"review_workers" : {
"w244" : "1" ,
"w120" : "2" ,
"w197" : "1" ,
"w7" : "1" ,
"w132" : "1"
},
"food_aspect_majority" : "" ,
"ambiance_aspect_majority" : "" ,
"service_aspect_majority" : "Negative" ,
"noise_aspect_majority" : "unknown" ,
"food_aspect_label_distribution" : "" ,
"ambiance_aspect_label_distribution" : "" ,
"service_aspect_label_distribution" : {
"Negative" : 5
},
"noise_aspect_label_distribution" : {
"unknown" : 4 ,
"Negative" : 1
},
"food_aspect_validation_workers" : "" ,
"ambiance_aspect_validation_workers" : "" ,
"service_aspect_validation_workers" : {
"w148" : "Negative" ,
"w120" : "Negative" ,
"w83" : "Negative" ,
"w35" : "Negative" ,
"w70" : "Negative"
},
"noise_aspect_validation_workers" : {
"w27" : "unknown" ,
"w23" : "unknown" ,
"w81" : "Negative" ,
"w103" : "unknown" ,
"w9" : "unknown"
},
"opentable_metadata" : {
"restaurant_id" : 6513 ,
"restaurant_name" : "Molino's Ristorante" ,
"cuisine" : "italian" ,
"price_tier" : "low" ,
"dining_style" : "Casual Elegant" ,
"dress_code" : "Smart Casual" ,
"parking" : "Private Lot" ,
"region" : "south" ,
"rating_ambiance" : 1 ,
"rating_food" : 3 ,
"rating_noise" : 2 ,
"rating_service" : 2 ,
"rating_overall" : 2
}
}Hospedamos nosso código de análise em nosso código Foler.
Esta seção contém a tabela de classificação para algumas das melhores pontuações obtidas no Cebab como uma tarefa de classificação de sentimentos de cinco classes. Para adicionar pontuações, considere uma solicitação de tração.
| Arquitetura de modelo | Métrica | Aprox | S-learner | INLP |
|---|---|---|---|---|
| Bert | L2 | 0,81 (± 0,01) | 0,74 (± 0,02) | 0,80 (± 0,02) |
| Bert | Cos | 0,61 (± 0,01) | 0,63 (± 0,01) | 0,59 (± 0,03) |
| Bert | Normdiff | 0,44 (± 0,01) | 0,54 (± 0,02) | 0,73 (± 0,02) |
| Roberta | L2 | 0,83 (± 0,01) | 0,78 (± 0,01) | 0,84 (± 0,01) |
| Roberta | Cos | 0,60 (± 0,01) | 0,64 (± 0,01) | 0,58 (± 0,01) |
| Roberta | Normdiff | 0,45 (± 0,00) | 0,59 (± 0,01) | 0,81 (± 0,01) |
| GPT-2 | L2 | 0,72 (± 0,02) | 0,60 (± 0,02) | 0,72 (± 0,01) |
| GPT-2 | Cos | 0,59 (± 0,01) | 0,59 (± 0,01) | 1,00 (± 0,00) |
| GPT-2 | Normdiff | 0,41 (± 0,01) | 0,40 (± 0,01) | 0,58 (± 0,03) |
| LSTM | L2 | 0,86 (± 0,01) | 0,73 (± 0,01) | 0,79 (± 0,01) |
| LSTM | Cos | 0,64 (± 0,01) | 0,64 (± 0,01) | 0,74 (± 0,02) |
| LSTM | Normdiff | 0,50 (± 0,01) | 0,53 (± 0,01) | 0,60 (± 0,01) |
O CEBAB possui uma licença internacional Creative Commons Attribution 4.0.