Как получить немедленную вероятность следующего слова с помощью модели GPT2?

Пробовал модель gpt2 с обнимающим лицом. Я видел run_generation.py script, который генерирует последовательность жетонов с подсказкой. Я знаю, что мы можем использовать GPT2 для NLG.

В моем случае использования я хочу определить распределение вероятностей (только) для следующего слова, следующего за заданной подсказкой. В идеале это распределение должно быть по всему словарю.

Например, учитывая приглашение: Как дела, оно должно дать распределение вероятностей, в котором у вас или у них есть некоторые высокие значения с плавающей запятой, а у других словарных слов очень низкие значения с плавающей запятой.

Как это сделать с помощью трансформаторов обнимающего лица? Если это невозможно в объятиях лица, есть ли другая модель трансформатора, которая делает это?


person Gaurang Tandon    schedule 11.07.2020    source источник


Ответы (1)


Вы можете посмотреть, как работает генерация скрипта. a> с вероятностями.

GPT2LMHeadModel (как и другие модели MLHead) возвращает тензор, который для каждого входа содержит ненормализованную вероятность того, каким может быть следующий токен. То есть, последний вывод модели - это нормализованная вероятность следующего токена (при условии, что input_ids - тензор с индексами токенов из токенизатора):

outputs = model(input_ids)
next_token_logits = outputs[0][:, -1, :]

Вы получите распределение, нормализовав логиты с помощью softmax. Индексы в первом измерении next_token_logits соответствуют индексам в словаре, который вы получаете от объекта токенизатора.

Выбор последних логитов становится сложным, если вы используете размер пакета больше 1 и последовательности разной длины. В этом случае вам нужно будет указать attention_mask в вызове модели, чтобы замаскировать маркеры заполнения, а затем выбрать последние журналы с помощью _ 6_. Намного проще использовать пакет размером 1 или пакет одинаковых длинных последовательностей.

Вы можете использовать любую авторегрессионную модель в Transformers: есть distilGPT-2 (дистиллированная версия GPT-2), CTRL (который в основном представляет собой GPT-2, обученный с некоторыми дополнительными командами), исходный GPT (под именем openai-gpt), XLNet (предназначен для контекстного встраивания, но может использоваться для генерации в произвольном порядке). Вероятно, есть и другие, вы можете Hugging Face Model Hub.

person Jindřich    schedule 15.07.2020