Модель не вернула потерю / BertForQuestionAnswering.forward() получил неожиданный аргумент ключевого слова «метки»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Модель не вернула потерю / BertForQuestionAnswering.forward() получил неожиданный аргумент ключевого слова «метки»

Сообщение Anonymous »


У меня есть эти данные:

intents.json:

{"версия": "0.1.0", "данные": [ {"id": "привет", «вопрос»: [«привет», «как дела»], «ответы»: [«привет!», «чем я могу вам помочь?»], "контекст": "" }, {"id": "пока", «вопрос»: [«Пока», «до свидания», «увидимся»], «ответы»: [»увидимся позже», «хорошего дня», «пока», «спасибо за визит»], "контекст": "" }, {"id": "погода", "вопрос": ["как погода", "прогноз погоды", "погода"], "ответы": ["погода хорошая", "у нас 25 градусов"], "контекст": "" } ] } и я пытаюсь создать бота, отвечающего на вопросы.

Я использую этот код:

из наборов данных импортируйте load_dataset импортировать наборы данных из трансформеров импортировать AutoTokenizer, AutoModel, TrainingArguments,\ Тренер, AutoModelForQuestionAnswering, DefaultDataCollator, \ DataCollatorForLanguageModeling MAX_LENGTH = 128 tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') защита preprocess_func(x): вернуть токенизатор(x["id"], дополнение = 'max_length', усечение = Истина, max_length=MAX_LENGTH) train = load_dataset('json', data_files='intents.json', field='data', Split='train[:80%]') test = load_dataset('json', data_files='intents.json', field='data', Split='train[80%:]') data = datasets.DatasetDict({"train":train, "test": test}) токенизированный = data.map(preprocess_func, пакетный = True) #data_collator = DefaultDataCollator() data_collator = DataCollatorForLanguageModeling( tokenizer=токенизатор, mlm=True ) устройство = "процессор" модель = AutoModelForQuestionAnswering.from_pretrained('bert-base-uncased') модель = model.to(устройство) Training_args = TrainingArguments( output_dir="./результаты", Assessment_strategy="эпоха", Learning_rate=2e-5, per_device_train_batch_size = 2, num_train_epochs=2, вес_распад=0,01, ) тренер = Тренер( модель = модель, args=training_args, train_dataset=токенизированный["поезд"], токенизатор = токенизатор, data_collator = data_collator, ) тренер.поезд() и я получаю:

BertForQuestionAnswering.forward() получил неожиданный аргумент ключевого слова «метки»

но у меня нет меток в данных:

токенизированный DatasetDict({ поезд: Набор данных({ функции: ['контекст', 'id', 'вопрос', 'ответы', 'input_ids', 'token_type_ids', 'attention_mask'], количество_строк: 2 }) тест: Набор данных({ функции: ['контекст', 'id', 'вопрос', 'ответы', 'input_ids', 'token_type_ids', 'attention_mask'], количество_строк: 1 }) }) Если я использую:

DefaultDataCollator() вместо DataCollatorForLanguageModeling я получаю:

Модель не вернула потери из входных данных, а только следующие ключи: start_logits,end_logits

Я не уверен, что preprocess_func нужно еще что-то сделать.

Как, например, здесь
def preprocess_function(примеры): вопросы = [q.strip() для q в примерах["вопрос"]] входы = токенизатор( вопросы, примеры["контекст"], максимальная_длина = 512, truncation="только_секунда", return_offsets_mapping=Истина, дополнение = "максимальная_длина", ) offset_mapping = inputs.pop("offset_mapping") ответы = примеры["ответы"] start_positions = [] конечные_позиции = [] для i, смещение в перечислении (offset_mapping): ответ = ответы[я] start_char = ответ["ответ_старт"][0] end_char = ответ["ответ_старт"][0] + len(ответ["текст"][0]) последовательность_ид = inputs.sequence_ids(i) # Найдите начало и конец контекста идентификатор = 0 в то время как последовательность_ids[idx] != 1: идентификатор += 1 context_start = идентификатор в то время как последовательность_ids[idx] == 1: идентификатор += 1 context_end = идентификатор - 1 # Если ответ не полностью находится в контексте, пометьте его (0, 0) if offset[context_start][0] > end_char или offset[context_end][1] < начальный_символ: start_positions.append(0) end_positions.append(0) еще: # В противном случае это начальная и конечная позиции токена idx = начало_контекста while idx = end_char: идентификатор -= 1 end_positions.append(idx + 1) inputs["start_positions"] = start_positions inputs["end_positions"] = конечные_позиции возврат входных данных
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»