AIゼーション vol.10
ストライプの元CTOで、OpenAI共同創業者のグレッグ・ブロックマンのツイートです。
https://x.com/gdb/status/1733553161884127435
以下のコードは、実験的なアルゴリズムや機械学習モデルの評価を行い、結果の改善を可視化するのに使用することが可能です。もちろんこのスコアは人間が算出するものではなく、AIが算出するものですが、アドバンスなAI開発を行うには、アウトプットをある程度自動評価する仕組みが必要です。
export const runEval = async <T = any>(
experiment: string,
{
task,
data,
scorers,
}: {
task: (input: any) => Promise<T>
data: { input: any; expected?: T; reference?: string | string[] }[]
scorers: Scorer<T, any>[]
}
) => {
const results = await Promise.all(
data.map(async ({ input, expected, reference }) => {
const results = await task(input)
let context: string | string[]
let output: string
if (results.context) {
context = results.context
output = results.response
} else {
output = results
}
const scores = await Promise.all(
scorers.map(async (scorer) => {
const score = await scorer({
input,
output: results,
expected,
reference,
context,
})
return {
name: score.name,
score: score.score,
}
})
)
const result = {
input,
output,
expected,
scores,
}
return result
})
)
const previousExperiment = await loadExperiment(experiment)
const previousScore =
previousExperiment?.sets[previousExperiment.sets.length - 1]?.score || 0
const currentScore = calculateAvgScore(results)
const scoreDiff = currentScore - previousScore
const color = previousExperiment
? scoreDiff > 0
? chalk.green
: scoreDiff < 0
? chalk.red
: chalk.blue
: chalk.blue
console.log(`Experiment: ${experiment}`)
console.log(`Previous score: ${color(previousScore.toFixed(2))}`)
console.log(`Current score: ${color(currentScore.toFixed(2))}`)
console.log(
`Difference: ${scoreDiff > 0 ? '+' : ''}${color(scoreDiff.toFixed(2))}`
)
console.log()
await saveSet(experiment, results)
return results
}
おそらく感覚的に近いのは単体テスト的にbuildする感じですかね。この評価(evals)がないと、良いAIプロダクトは作れないと、ワークショップで学びました。
それではまた、ごきげんよう!