Вычислите сюрприз из языковых моделей!
surprisal
поддерживает большинство моделей причинного языка (модели, подобные GPT2
и GPTneo
) от Huggingface или локальной контрольной точки, а также модели GPT3
от OpenAI, используя их API! Мы также поддерживаем языковые модели на основе N-грамм KenLM
с использованием интерфейса KenLM Python.
Модели маскированного языка (модели типа BERT
) находятся в стадии разработки и будут поддерживаться в будущем (см. № 9).
В приведенном ниже фрагменте вычисляются сюрпризы по токенам для списка предложений.
from surprisal import AutoHuggingFaceModel , KenLMModel
sentences = [
"The cat is on the mat" ,
"The cat is on the hat" ,
"The cat is on the pizza" ,
"The pizza is on the mat" ,
"I told you that the cat is on the mat" ,
"I told you the cat is on the mat" ,
]
m = AutoHuggingFaceModel . from_pretrained ( 'gpt2' )
m . to ( 'cuda' ) # optionally move your model to GPU!
k = KenLMModel ( model_path = './literature.arpa' )
for result in m . surprise ( sentences ):
print ( result )
for result in k . surprise ( sentences ):
print ( result )
и выдает вывод такого типа ( gpt2
):
The Ġcat Ġis Ġon Ġthe Ġmat
3.276 9.222 2.463 4.145 0.961 7.237
The Ġcat Ġis Ġon Ġthe Ġhat
3.276 9.222 2.463 4.145 0.961 9.955
The Ġcat Ġis Ġon Ġthe Ġpizza
3.276 9.222 2.463 4.145 0.961 8.212
The Ġpizza Ġis Ġon Ġthe Ġmat
3.276 10.860 3.212 4.910 0.985 8.379
I Ġtold Ġyou Ġthat Ġthe Ġcat Ġis Ġon Ġthe Ġmat
3.998 6.856 0.619 2.443 2.711 7.955 2.596 4.804 1.139 6.946
I Ġtold Ġyou Ġthe Ġcat Ġis Ġon Ġthe Ġmat
3.998 6.856 0.619 4.115 7.612 3.031 4.817 1.233 7.033
Неожиданный объект может быть агрегирован по подмножеству токенов, которые лучше всего соответствуют диапазону слов или символов. Границы слов наследуются от стандартного токенизатора модели и могут быть неодинаковыми для разных моделей, поэтому использование интервалов символов при нарезке является рекомендуемым вариантом по умолчанию. Сюрпризы находятся в пространстве журнала и, следовательно, добавляются к токенам во время агрегации. Например:
>> > [ s ] = m . surprise ( "The cat is on the mat" )
>> > s [ 3 : 6 , "word" ]
12.343366384506226
Ġon Ġthe Ġmat
>> > s [ 3 : 6 , "char" ]
9.222099304199219
Ġcat
>> > s [ 3 : 6 ]
9.222099304199219
Ġcat
ПРИМЕЧАНИЕ. С недавнего времени OpenAI больше не возвращает вероятности журналирования в большинстве своих моделей. См. № 15. Чтобы использовать модель GPT-3 из API OpenAI, вам необходимо получить идентификатор вашей организации и ключ API для конкретного пользователя, используя свою учетную запись. Затем используйте OpenAIModel
так же, как модель Huggingface.
m = surprisal . OpenAIModel ( model_id = 'text-davinci-002' ,
openai_api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ,
openai_org = "org-xxxxxxxxxxxxxxxxxxxxxxxx" )
Эти значения также можно передать с помощью переменных среды OPENAI_API_KEY
и OPENAI_ORG
перед вызовом сценария.
Вы также можете вызвать Surprisal.lineplot()
чтобы визуализировать сюрпризы:
from matplotlib import pyplot as plt
f , a = None , None
for result in m . surprise ( sentences ):
f , a = result . lineplot ( f , a )
plt . show ()
surprisal
также имеет минимальный CLI:
python - m surprisal - m distilgpt2 "I went to the train station today."
I Ġwent Ġto Ġthe Ġtrain Ġstation Ġtoday .
4.984 5.729 0.812 1.723 7.317 0.497 4.600 2.528
python - m surprisal - m distilgpt2 "I went to the space station today."
I Ġwent Ġto Ġthe Ġspace Ġstation Ġtoday .
4.984 5.729 0.812 1.723 8.425 0.707 5.182 2.574
Поскольку surprisal
используется людьми из разных сообществ для разных целей, по умолчанию основные зависимости, связанные с языковым моделированием, помечены как необязательные. В зависимости от вашего варианта использования установите surprisal
с соответствующими дополнениями.
Используйте команду типа pip install surprisal[optional]
, заменив [optional]
любой дополнительной поддержкой, которая вам нужна. Для нескольких дополнительных опций используйте список, разделенный запятыми:
pip install surprisal[kenlm,transformers]
# the above is equivalent to
pip install surprisal[all]
Возможные варианты: transformers
, kenlm
, openai
, petals
Если вы используете poetry
для существующего проекта, используйте опцию -E
, чтобы добавить surprisal
вместе с желаемыми дополнительными зависимостями:
poetry add surprisal -E transformers -E kenlm
# the above is equivalent to
poetry add surprisal -E all
Чтобы также установить openai
и petals
, вы можете сделать
poetry add surprisal -E transformers -E kenlm -E openai -E petals
# the above is equivalent to
poetry add surprisal -E allplus
Флаг -e
разрешает редактируемую установку, поэтому вы можете вносить изменения в surprisal
.
git clone https://github.com/aalok-sathe/surprisal.git
pip install .[transformers] -e
Вдохновлен ныне неактивным lm-scorer
; спасибо ребятам из CPLlab и EvLab за комментарии и помощь.
Лицензия МТИ. (C) 2022–2023 гг., участники.