Berechnen Sie Überraschungen anhand von Sprachmodellen!
surprisal
unterstützt die meisten kausalen Sprachmodelle ( GPT2
und GPTneo
-ähnliche Modelle) von Huggingface oder lokalem Checkpoint sowie GPT3
Modelle von OpenAI mithilfe ihrer API! Wir unterstützen auch KenLM
N-Gram-basierte Sprachmodelle über die KenLM Python-Schnittstelle.
Maskierte Sprachmodelle ( BERT
-ähnliche Modelle) sind in der Pipeline und werden zu einem späteren Zeitpunkt unterstützt (siehe Nr. 9).
Der folgende Ausschnitt berechnet Überraschungen pro Token für eine Liste von Sätzen
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 )
und erzeugt eine Ausgabe dieser Art ( 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
Ein Überraschungsobjekt kann über eine Teilmenge von Token aggregiert werden, die am besten zu einer Reihe von Wörtern oder Zeichen passen. Wortgrenzen werden vom Standard-Tokenizer des Modells geerbt und sind möglicherweise nicht modellübergreifend konsistent. Daher ist die Verwendung von Zeichenspannen beim Slicing die standardmäßige und empfohlene Option. Überraschungen befinden sich im Protokollbereich und werden daher während der Aggregation über Tokens addiert. Zum Beispiel:
>> > [ 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
HINWEIS: OpenAI gibt seit kurzem in den meisten seiner Modelle keine Log-Wahrscheinlichkeiten mehr zurück. Siehe #15. Um ein GPT-3-Modell der OpenAI-API verwenden zu können, müssen Sie über Ihr Konto Ihre Organisations-ID und einen benutzerspezifischen API-Schlüssel abrufen. Verwenden Sie dann das OpenAIModel
auf die gleiche Weise wie ein Huggingface-Modell.
m = surprisal . OpenAIModel ( model_id = 'text-davinci-002' ,
openai_api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ,
openai_org = "org-xxxxxxxxxxxxxxxxxxxxxxxx" )
Diese Werte können auch mithilfe der Umgebungsvariablen OPENAI_API_KEY
und OPENAI_ORG
vor dem Aufruf eines Skripts übergeben werden.
Sie können auch Surprisal.lineplot()
aufrufen, um die Überraschungen zu visualisieren:
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
hat auch eine minimale 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
Da surprisal
von Menschen aus verschiedenen Communities für unterschiedliche Zwecke verwendet wird, sind Kernabhängigkeiten im Zusammenhang mit der Sprachmodellierung standardmäßig als optional markiert. Installieren Sie surprisal
je nach Anwendungsfall mit den passenden Extras.
Verwenden Sie einen Befehl wie pip install surprisal[optional]
und ersetzen Sie [optional]
durch die optionale Unterstützung, die Sie benötigen. Für mehrere optionale Extras verwenden Sie eine durch Kommas getrennte Liste:
pip install surprisal[kenlm,transformers]
# the above is equivalent to
pip install surprisal[all]
Mögliche Optionen sind: transformers
, kenlm
, openai
, petals
Wenn Sie poetry
für Ihr bestehendes Projekt verwenden, verwenden Sie die Option -E
, um surprisal
zusammen mit den gewünschten optionalen Abhängigkeiten hinzuzufügen:
poetry add surprisal -E transformers -E kenlm
# the above is equivalent to
poetry add surprisal -E all
Sie können auch openai
und petals
installieren
poetry add surprisal -E transformers -E kenlm -E openai -E petals
# the above is equivalent to
poetry add surprisal -E allplus
Das Flag -e
ermöglicht eine bearbeitbare Installation, sodass Sie Änderungen an surprisal
vornehmen können.
git clone https://github.com/aalok-sathe/surprisal.git
pip install .[transformers] -e
Inspiriert vom inzwischen inaktiven lm-scorer
; Vielen Dank an die Leute von CPLlab und EvLab für Kommentare und Hilfe.
MIT-Lizenz. (C) 2022-23, Mitwirkende.