Calculez la surprise à partir de modèles de langage !
surprisal
prend en charge la plupart des modèles de langage causal (modèles de type GPT2
et GPTneo
) de Huggingface ou de point de contrôle local, ainsi que les modèles GPT3
d'OpenAI en utilisant leur API ! Nous prenons également en charge les modèles de langage basés sur KenLM
N-gram à l'aide de l'interface KenLM Python.
Des modèles de langage masqué (modèles de type BERT
) sont en préparation et seront pris en charge ultérieurement (voir #9).
L'extrait ci-dessous calcule les surprises par jeton pour une liste de phrases
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 )
et produit une sortie de ce genre ( 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
Un objet surprise peut être regroupé sur un sous-ensemble de jetons qui correspondent le mieux à un ensemble de mots ou de caractères. Les limites des mots sont héritées du tokenizer standard du modèle et peuvent ne pas être cohérentes entre les modèles. L'utilisation d'étendues de caractères lors du découpage est donc l'option par défaut et recommandée. Les surprises sont dans l'espace de journalisation et sont donc ajoutées aux jetons lors de l'agrégation. Par exemple:
>> > [ 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
REMARQUE : OpenAI ne renvoie plus les probabilités de journal dans la plupart de leurs modèles depuis peu. Voir #15. Afin d'utiliser un modèle GPT-3 à partir de l'API d'OpenAI, vous devrez obtenir l'ID de votre organisation et la clé API spécifique à l'utilisateur à l'aide de votre compte. Ensuite, utilisez OpenAIModel
de la même manière qu’un modèle Huggingface.
m = surprisal . OpenAIModel ( model_id = 'text-davinci-002' ,
openai_api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ,
openai_org = "org-xxxxxxxxxxxxxxxxxxxxxxxx" )
Ces valeurs peuvent également être transmises à l'aide des variables d'environnement OPENAI_API_KEY
et OPENAI_ORG
avant d'appeler un script.
Vous pouvez également appeler Surprisal.lineplot()
pour visualiser les surprises :
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
a également une CLI minimale :
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
Étant donné que surprisal
est utilisé par des personnes de différentes communautés à des fins différentes, par défaut, les dépendances principales liées à la modélisation du langage sont marquées comme facultatives. En fonction de votre cas d'utilisation, installez surprisal
avec les extras appropriés.
Utilisez une commande comme pip install surprisal[optional]
, en remplaçant [optional]
par le support facultatif dont vous avez besoin. Pour plusieurs extras facultatifs, utilisez une liste séparée par des virgules :
pip install surprisal[kenlm,transformers]
# the above is equivalent to
pip install surprisal[all]
Les options possibles incluent : transformers
, kenlm
, openai
, petals
Si vous utilisez poetry
pour votre projet existant, utilisez l'option -E
pour ajouter surprisal
ainsi que les dépendances facultatives souhaitées :
poetry add surprisal -E transformers -E kenlm
# the above is equivalent to
poetry add surprisal -E all
Pour installer également openai
et petals
, vous pouvez faire
poetry add surprisal -E transformers -E kenlm -E openai -E petals
# the above is equivalent to
poetry add surprisal -E allplus
L'indicateur -e
permet une installation modifiable, vous pouvez donc apporter des modifications à surprisal
.
git clone https://github.com/aalok-sathe/surprisal.git
pip install .[transformers] -e
Inspiré du lm-scorer
désormais inactif ; merci aux gens de CPLlab et EvLab pour leurs commentaires et leur aide.
Licence MIT. (C) 2022-23, contributeurs.