언어 모델로부터 놀라움을 계산해보세요!
surprisal
Huggingface 또는 로컬 체크포인트의 대부분의 인과 언어 모델( GPT2
및 GPTneo
유사 모델)과 API를 사용하는 OpenAI의 GPT3
모델을 지원합니다! 또한 KenLM Python 인터페이스를 사용하여 KenLM
N-gram 기반 언어 모델을 지원합니다.
마스크된 언어 모델( 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를 참조하세요. OpenAI API에서 GPT-3 모델을 사용하려면 계정을 사용하여 조직 ID와 사용자별 API 키를 얻어야 합니다. 그런 다음 Huggingface 모델과 동일한 방식으로 OpenAIModel
을 사용합니다.
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의 분들께 감사드립니다.
MIT 라이센스. (C) 2022-23, 기여자.