¡Calcule la sorpresa a partir de modelos de lenguaje!
surprisal
admite la mayoría de los modelos de lenguaje causal (modelos similares a GPT2
y GPTneo
) de Huggingface o checkpoint local, así como modelos GPT3
de OpenAI usando su API. También admitimos modelos de lenguaje basados en KenLM
N-gram utilizando la interfaz KenLM Python.
Los modelos de lenguaje enmascarado (modelos similares BERT
) están en proceso y serán compatibles en el futuro (consulte el punto 9).
El siguiente fragmento calcula las sorpresas por token para una lista de oraciones.
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 )
y produce una salida de este tipo ( 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 objeto sorpresa se puede agregar en un subconjunto de tokens que mejor coincidan con un grupo de palabras o caracteres. Los límites de las palabras se heredan del tokenizador estándar del modelo y pueden no ser consistentes entre los modelos, por lo que usar intervalos de caracteres al dividir es la opción predeterminada y recomendada. Las sorpresas están en el espacio de registro y, por lo tanto, se agregan a los tokens durante la agregación. Por ejemplo:
>> > [ 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
NOTA: OpenAI ya no devuelve probabilidades de registro en la mayoría de sus modelos recientemente. Ver #15. Para utilizar un modelo GPT-3 de la API de OpenAI, deberá obtener el ID de su organización y la clave API específica del usuario utilizando su cuenta. Luego, use OpenAIModel
de la misma manera que un modelo Huggingface.
m = surprisal . OpenAIModel ( model_id = 'text-davinci-002' ,
openai_api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ,
openai_org = "org-xxxxxxxxxxxxxxxxxxxxxxxx" )
Estos valores también se pueden pasar utilizando variables de entorno, OPENAI_API_KEY
y OPENAI_ORG
antes de llamar a un script.
También puedes llamar a Surprisal.lineplot()
para visualizar las sorpresas:
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
también tiene una CLI mínima:
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
Debido a que personas de diferentes comunidades utilizan surprisal
para diferentes propósitos, de forma predeterminada, las dependencias principales relacionadas con el modelado del lenguaje están marcadas como opcionales. Dependiendo de su caso de uso, instale surprisal
con los extras adecuados.
Utilice un comando como pip install surprisal[optional]
, reemplazando [optional]
con cualquier soporte opcional que necesite. Para múltiples extras opcionales, use una lista separada por comas:
pip install surprisal[kenlm,transformers]
# the above is equivalent to
pip install surprisal[all]
Las opciones posibles incluyen: transformers
, kenlm
, openai
, petals
Si usa poetry
para su proyecto existente, use la opción -E
para agregar surprisal
junto con las dependencias opcionales deseadas:
poetry add surprisal -E transformers -E kenlm
# the above is equivalent to
poetry add surprisal -E all
Para instalar también openai
y petals
, puedes hacer
poetry add surprisal -E transformers -E kenlm -E openai -E petals
# the above is equivalent to
poetry add surprisal -E allplus
El indicador -e
permite una instalación editable, por lo que puedes realizar cambios en surprisal
.
git clone https://github.com/aalok-sathe/surprisal.git
pip install .[transformers] -e
Inspirado en el ahora inactivo lm-scorer
; Gracias a la gente de CPLlab y EvLab por sus comentarios y ayuda.
Licencia MIT. (C) 2022-23, contribuyentes.