[ChatGPT] AIで子どもの漢字ドリルを作ってみた
はじめに
こんにちは。データアナリティクス事業本部のおざわです。
今回は、ChatGPTで小学生の娘に漢字ドリルを作ってみた話を共有したいと思います。
最近、DevelopersIOでもChatGPT関連の記事がどんどん出てきて盛り上がっています。英語の学習にも使えるという話を聞いて、むか~し娘の算数プリントに出てくる人物の名前を好きなアニメキャラにしたら喜んでやっていたのを思い出しました。
ちょうど漢字の書き取りをやっていたので「AIで漢字ドリルが作れたら面白いかも」と思ってやってみました。
1. 題材
題材に使わせてもらったのは朝霧カフカさん(原作)、春河35さん(作画)の「文豪ストレイドッグス」です。
実は、娘がこのアニメ&漫画に出てくる福沢諭吉(通称社長)に大ハマリしています。 毎日Netflixで文ストのアニメを観て、寝る前になるとマンガや小説を読みふけり、自分のデスクに置いた諭吉さんのアクリルスタンドを見てうっとりしています。先日もとなり街の銭湯で行われていたコラボイベントに家族で行ってきたばかりです。
この作品でドリルが作れたら、どんな教科でも喜んでやるのではないか、と父は思いました。
2. 準備
ということでさっそく準備にとりかかります。
2.1. OpenAIへのSignUp、APIキーの取得
最初にOpenAPIのアカウント作成とAPIキーを取得します。 方法についてはこの記事で紹介されていますので、こちらをご確認ください。5分くらいでできちゃいます。
2.2. コード
今回はGoogleドキュメントからAPIを呼び出します。 Googleドキュメントを開いて、拡張機能からApps Scriptを開いてコードを貼り付けます。
const API_URL = 'https://api.openai.com/v1/chat/completions' const API_KEY = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" const MODEL = "gpt-3.5-turbo" const TEMPERATURE = 0.5 const MAX_TOKENS = 2048 const SYSTEM_CONTENT = "あなたはアニメや漫画に詳しい先輩です" function onOpen() { DocumentApp.getUi().createMenu("ChatGPT") .addItem("問題を作成する", "generateQuiz") .addToUi() } function generateQuiz() { const document = DocumentApp.getActiveDocument() const prompt = document.getSelection().getRangeElements()[0].getElement().asText().getText() const requestBody = { model: MODEL, messages: [ {role: "system", content: SYSTEM_CONTENT}, {role: "user", content: prompt}, ], temperature: TEMPERATURE, max_tokens: MAX_TOKENS, } const request = { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${API_KEY}`, }, payload: JSON.stringify(requestBody), } const response = UrlFetchApp.fetch(API_URL, request) const responseText = response.getContentText() const json = JSON.parse(responseText) const generatedText = json['choices'][0]['message']['content'] const body = document.getBody() body.appendPageBreak() body.appendParagraph(generatedText.toString()) }
パラメータについてはぜんぜん知らないので、初心者にもわかるように教えて!と本人(?)に聞いてみました。
temperatureパラメータについて初心者にもわかるように説明してください。
ChatGPTのChatCompletion APIで使う temperature パラメータは、生成されたテキストの多様性を制御するためのパラメータです。
このパラメータは、生成されるテキストの品質と多様性のトレードオフを制御するために使用されます。temperature が低い場合、生成されるテキストはより厳密で正確になりますが、同時に予測可能なものとなります。一方、temperatureが高い場合、生成されるテキストはより多様性がありますが、不正確なものや、一般的すぎるものも生成される可能性があります。
具体的には、temperatureパラメータが低い場合、生成されたテキストは最も可能性が高い次の単語を選択する傾向があります。つまり、生成されるテキストは予測可能で、システムが入力に応じて正確に返答することが期待されます。一方、temperature パラメータが高い場合、システムはより多様な回答を提供し、入力に基づいてより柔軟に回答することが期待されます
max_tokenパラメータについて初心者にもわかるように説明してください。
ChatGPTのChatCompletion APIで使う max_token パラメータは、APIが生成するテキストの長さを指定するためのパラメータです。
具体的には、このパラメータは、APIが生成するテキストの最大トークン数を指定します。トークンとは、文章を単語や句読点などの単位に分割したものを指します。つまり、このパラメータは、APIが生成するテキストの単語数や文の長さを調整するために使用されます。
max_token パラメータは、APIが生成するテキストの長さを制御するために有用なパラメータです。たとえば、対話システムの応答として生成されるテキストの長さを制限することで、ユーザーが読みやすく理解しやすいテキストを生成することができます。
systemパラメータについて初心者にもわかるように説明してください。
ChatGPTのChatCompletion APIで使う system パラメータは、対話においてシステム側の発話を表すテキストを指定するためのパラメータです。
このパラメータは、対話システムの開発者が、システムが発話するテキストを制御するために使用されます。例えば、システムがある情報を提供する際に、事前に決められたテキストを返すように指定することができます。
system パラメータに指定されるテキストは、対話システムが自動生成するテキストではなく、開発者が手動で指定することが一般的です。指定されたテキストは、対話の流れに合わせて自動的にシステムからユーザーへの発話として使用されます。
アクセス権限の承認ダイアログが出てきたら承認します。
3. 問題を作ってみる
さっそく動かしてみます。
1ページ目に作って欲しい漢字ドリルの内容を日本語で入力します。 今回は下のような書き方をしました。
小学校高学年から中学校1年生までに習う漢字を使って漢字の書き取り問題を5問作成してください。内容はアニメの「文豪ストレイドッグス」に登場するセリフやシーンを使って作成してください。問題の漢字は『』で囲んでください。問題文の最後にセリフの発言者をカッコ内に追加してください。
入力したら内容を選択して、メニューの「ChatGPT」→「問題を作成する」をクリックします。
依頼の書き方によって生成される問題にかなり違いがありましたので試行錯誤が必要です。ほんのちょっと文章をいじるだけで、いい感じの問題ができることもあれば、よくわからない問題が生成されることもあり、このあたりプロンプトエンジニアリングの力が試されるのでしょうか。
スクリプトが実行されて次のページに問題が出てきます。
文スト素人から見るとそれらしいセリフが出てきました。
ここまでやってくれたらあと一息。『』内の漢字をカタカナに修正します。
4. 結果
さっそくAIに作ってもらった漢字ドリルを娘に渡してみたところ、、
「おもしろい!普通の漢字ドリルよりよっぽどやる気が出る!」
と、なかなか良い反応でした。ただ、今回生成された問題には文ストキャラのセリフだけではなく、リアルな文豪の発言も混ざっているということでした。自分が詳しくない内容に関してはAIの主力が正しいかわからないので注意も必要ですね。
おわりに
ということで、ChatGPTを使って漢字ドリルの問題を作ってみました。今回は漢字の書き取り問題でしたが、依頼内容を変更することで算数についても下のような問題を作成することができました。
福沢諭吉が、文豪ストレイドッグスの公式サイトでグッズを購入することにしました。商品の値段(税込み)は以下の通りです。 ・福沢諭吉のフィギュア:3240円 ・太宰治のマグカップ:1080円 ・中島敦の缶バッジ:540円 福沢諭吉がこれらの商品をすべて買った場合、合計いくらになるでしょうか?
どなたかの参考になれば幸いです。