argilla 记录带有解释的HF数据集失败,原因是转换问题,

rqqzpn5f  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(38)

描述错误

如果你使用经过 to_datasets() 转换的 HF 数据集(可能包含解释值,如:

explanation': {'text': [{'attributions': {'NEGATIVE': 0.4228191208527419, 'POSITIVE': None},

)记录文本分类数据集,那么在原始的 Rubrix 数据集中,属性值为:

explanation': {'text': [{'attributions': {'NEGATIVE': 0.4228191208527419}..

。因此,似乎在 Arrow 中将这些字典转换时,会自动填充缺失值。记录时的最终错误为:

ValidationError: 1 validation error for TokenAttributions
attributions -> POSITIVE
  none is not an allowed value (type=type_error.none.not_allowed)

重现问题

运行以下代码:

from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers_interpret import SequenceClassificationExplainer
from datasets import load_dataset

import rubrix as rb
from rubrix import TokenAttributions

Load Stanford sentiment treebank test set

dataset = load_dataset("sst", "default", split="test")

Let's use a sentiment classifier fine-tuned on sst

model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

Define the explainer using transformers_interpret

cls_explainer = SequenceClassificationExplainer(model, tokenizer)

records = []
for example in dataset.select(range(10)):

# Build Token attributions objects 
word_attributions = cls_explainer(example["sentence"])
token_attributions = [ 
    TokenAttributions(
        token=token, 
        attributions={cls_explainer.predicted_class_name: score}
    ) # ignore first (CLS) and last (SEP) tokens
    for token, score in word_attributions[1:-1]
]
# Build Text classification records
record = rb.TextClassificationRecord(
    text=example["sentence"],
    prediction=[(cls_explainer.predicted_class_name, cls_explainer.pred_probs)],
    explanation={"text": token_attributions},
)
records.append(record)

rb_dataset = rb.DatasetForTextClassification(records)
hf_dataset = rb.DatasetForTextClassification(records).to_datasets()
rb.log(rb.DatasetForTextClassification.from_datasets(hf_dataset))

或者从 Hub 中使用以下代码:

import rubrix as rb

from datasets import load_dataset

ds = load_dataset("rubrix/transformer_interpret_example_sst", split="test")

rb.log(rb.DatasetForTextClassification.from_datasets(ds), name="transformer_interpret_example_sst")

预期行为

从 HF 数据集(例如 Hub)恢复带有解释的数据集不应该失败。

截图

如果适用,请添加截图以帮助解释问题。

环境信息(请填写以下信息):

  • OS [例如:iOS]:
  • Browser [例如:chrome, safari]:
  • Rubrix 版本 [例如:0.10.0]:
  • ElasticSearch 版本 [例如:7.10.2]:
  • Docker 镜像(可选) [例如:rubrix:v0.10.0]:

其他上下文

在这里添加有关问题的任何其他上下文。

xkrw2x1b

xkrw2x1b1#

这个问题已经过期,因为它已经开放了30天,没有任何活动。

yqyhoc1h

yqyhoc1h2#

@dvsrepo 这对2.0版本仍然相关吗?

相关问题