openai log probs
概要
davinci
やbabbage
などのモデルを使って、文章の生成を行う際に、各単語の出現確率を取得可能- 出現確率を統計的に利用することで、perplexityの計算や、文章の自然さを評価することが可能
具体例
import math
import numpy as np
import pandas as pd
from openai import OpenAI
client = OpenAI()
text_to_evaluate = "ここに評価したい文章をそのまま置く"
response = client.completions.create(
model="davinci-002", # 例: GPT-3 Ada
prompt=text_to_evaluate,
max_tokens=0, # 追加生成を行わない
temperature=0, # 再現性のため0に
top_p=1,
logprobs=5, # トークン確率の上位5件を取得(必要に応じて調整)
echo=True # prompt部分についてもトークン情報を取得
)
tokens = response.choices[0].logprobs.tokens
logprobs = response.choices[0].logprobs.token_logprobs
df = pd.DataFrame()
df["token"] = tokens
df["logprob"] = logprobs
df["prob"] = np.exp(df["logprob"])
ppl = df["logprob"].mean()
print(f"Perplexity: {ppl:.2f}")
display(df)
"""
Perplexity: -3.40
"""
token | logprob | prob |
---|---|---|
こ | nan | nan |
こ | -3.22469 | 0.0397682 |
に | -4.89034 | 0.00751887 |
bytes:\xe8\xa9 | -5.90883 | 0.00271538 |
bytes:\x95 | -4.46252 | 0.0115333 |
価 | -0.175132 | 0.839347 |
した | -3.5319 | 0.0292494 |
い | -2.29865 | 0.100394 |
文章 | -6.80772 | 0.00110521 |
を | -1.22006 | 0.295212 |
その | -6.56532 | 0.00140837 |
ま | -0.249402 | 0.779267 |
ま | -0.00761254 | 0.992416 |
置 | -5.76281 | 0.00314227 |
く | -2.44805 | 0.086462 |