Hitung kejutan dari model bahasa!
surprisal
mendukung sebagian besar Model Bahasa Kausal (model mirip GPT2
dan GPTneo
) dari Huggingface atau pos pemeriksaan lokal, serta model GPT3
dari OpenAI menggunakan API mereka! Kami juga mendukung model bahasa berbasis KenLM
N-gram menggunakan antarmuka KenLM Python.
Model Bahasa Bertopeng (model mirip BERT
) sedang dalam proses dan akan didukung di masa mendatang (lihat #9).
Cuplikan di bawah menghitung kejutan per token untuk daftar kalimat
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 )
dan menghasilkan keluaran seperti ini ( 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
Objek kejutan dapat dikumpulkan melalui subset token yang paling cocok dengan rentang kata atau karakter. Batasan kata diwarisi dari tokenizer standar model, dan mungkin tidak konsisten di seluruh model, jadi menggunakan rentang karakter saat mengiris adalah opsi default dan direkomendasikan. Kejutan ada di ruang log, dan oleh karena itu ditambahkan token selama agregasi. Misalnya:
>> > [ 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
CATATAN: OpenAI tidak lagi mengembalikan probabilitas log di sebagian besar modelnya saat ini. Lihat #15. Untuk menggunakan model GPT-3 dari API OpenAI, Anda perlu mendapatkan ID organisasi dan kunci API khusus pengguna menggunakan akun Anda. Lalu, gunakan OpenAIModel
dengan cara yang sama seperti model Huggingface.
m = surprisal . OpenAIModel ( model_id = 'text-davinci-002' ,
openai_api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ,
openai_org = "org-xxxxxxxxxxxxxxxxxxxxxxxx" )
Nilai-nilai ini juga dapat diteruskan menggunakan variabel lingkungan, OPENAI_API_KEY
dan OPENAI_ORG
sebelum memanggil skrip.
Anda juga dapat menghubungi Surprisal.lineplot()
untuk memvisualisasikan kejutannya:
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
juga memiliki CLI minimal:
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
Karena surprisal
digunakan oleh orang-orang dari komunitas berbeda untuk tujuan berbeda, secara default, dependensi inti terkait pemodelan bahasa ditandai opsional. Bergantung pada kasus penggunaan Anda, instal surprisal
dengan tambahan yang sesuai.
Gunakan perintah seperti pip install surprisal[optional]
, ganti [optional]
dengan dukungan opsional apa pun yang Anda perlukan. Untuk beberapa tambahan opsional, gunakan daftar yang dipisahkan koma:
pip install surprisal[kenlm,transformers]
# the above is equivalent to
pip install surprisal[all]
Opsi yang memungkinkan meliputi: transformers
, kenlm
, openai
, petals
Jika Anda menggunakan poetry
untuk proyek yang ada, gunakan opsi -E
untuk menambahkan surprisal
bersama dengan dependensi opsional yang diinginkan:
poetry add surprisal -E transformers -E kenlm
# the above is equivalent to
poetry add surprisal -E all
Untuk juga menginstal openai
dan petals
, Anda bisa melakukannya
poetry add surprisal -E transformers -E kenlm -E openai -E petals
# the above is equivalent to
poetry add surprisal -E allplus
Bendera -e
memungkinkan instalasi yang dapat diedit, sehingga Anda dapat membuat perubahan pada surprisal
.
git clone https://github.com/aalok-sathe/surprisal.git
pip install .[transformers] -e
Terinspirasi dari lm-scorer
yang sekarang tidak aktif; terima kasih kepada orang-orang dari CPLlab dan EvLab atas komentar dan bantuannya.
Lisensi MIT. (C) 2022-23, kontributor.