こんにちは、estieでデータサイエンティストをやっております。ぴーまんです。半年前に産まれた愛娘は、ずっと寝返りをしてはうつ伏せになって動けず絶望で慟哭していたのですが、最近ふと寝返り返りできることに気づいたようで、コロコロしては歓喜の雄叫びを上げる日々です。今回の記事はestie真夏のアドベントカレンダー18日目になります!
この記事は?
宅建の練習問題をChatGPTに生成させてみたよ
練習問題の生成 → 選択肢の選択 → 解答・解説の表示 → 生成した履歴の参照ができるwebアプリを作ったよ
はじめに
皆様ご存知の通り、estieは商業用不動産のデータプロダクトを扱う会社です。私はこの10月で入社3年目を迎え、社内でも結構な古株になってきました。毎日不動産のデータをたくさんみながら、なんとなく段々と業界のことをわかったような気にはなっていますが、不動産業界出身の方々が入社してきて色々な話を聞くたびに、自分の理解の薄さ・甘さに気づき、毎晩枕を濡らす日々です。そこで私は思いました。
そうだ、宅建とろう。
宅地建物取引士資格試験 (宅建試験) とは
その名の通り、宅地建物取引士になるための試験です。
宅地建物取引士(たくちたてものとりひきし)とは、宅地建物取引業法に基づき定められている国家資格者。宅地建物取引業者(一般に不動産会社)が行う、宅地又は建物の売買、交換又は貸借の取引に対して、購入者等の利益の保護及び円滑な宅地又は建物の流通に資するよう、公正かつ誠実に法に定める事務(重要事項の説明等)を行う、不動産取引の専門家である。
wikipediaより引用
最後の部分「不動産取引の専門家である」、大事ですね。専門家になりたいですよね。重要事項の説明したいですよね。
日々データサイエンティストとしてデータ分析を行っている中で、自身に一番不足していると感じるのが「ユーザー目線」です。データをこねくり回してそれっぽいダッシュボードを作ることはできる、それっぽい機械学習モデルも作ることはできる、がアウトプットを実際ユーザーに当ててみると「なんだか良さそうだけどどう使えばいいかわからない」。もちろん実際に社外のユーザーに当てる前に、社内のプロダクトマネージャーやビジネスサイドの人間とディスカッションをしながら進めるので、上記の目線は段々と補填されて行くのですが、まず自分自身の「ユーザー目線」の精度を高めたいと思い、安易な考えですが、その第一歩として宅建資格を取ろうと思い立ちました。
ChatGPTに宅建の練習問題作らせてみた
私は昔から「勉強する際はとにかくまず過去問から」派閥の人間です。宅建試験に関してはこの世に素晴らしいアプリが存在しており、このアプリを活用してぽちぽちと過去問を解いていたのですが、「この問題ChatGPTなら作れるのでは?」と思い至りました。
それでは実際に作らせてみましょう。
それなりに資格試験の範囲に沿った問題が生成されました。これだけでも十分基本的な練習問題としては使えそうです。が、宅建の資格試験は下記のように文章の正誤選択形式のものが多く、このレベルの問題をそのまま生成させるのは難しそうです。
そこで、宅地建物取引業法の条文をChatGPTに読ませて、そこから問題を生成させてみる方針にしてみます。さらに、そのまま問題を生成させると、1問1答形式の単純な問題になってしまうので、ある程度問題形式の指定もした方が良さそうです。そこで、In-context learningと言う手法の一種を使って、プロンプトを工夫してみることにします。
通常、GPT-4はあらゆるテキストを理解し生成する汎用的なモデルで、特定のタスクに特化した訓練は行われていません。しかし、入力文(プロンプト)を工夫することで、特定のタスクやコンテキストにおいてより高いパフォーマンスを発揮する場合があります。In-context learningはGPT-4のようなTransformer型のモデルにおいて、プロンプトの中にインプットやアウトプットの例を与えて、特定のタスクやコンテキストに対するモデルのパフォーマンスを向上させる手法の一つです。
例えば免許に関する第3条を使ってやってみましょう。
ChatGPTが例を学習して、インプットベースの良さげな問題を生成してくれました。このレベルであれば、ある程度は資格試験用の練習に使えそうです。
今回、ChatGPTの中の特にGPT-4を使用して、問題を生成していますが、下記のメリット/デメリットがあります。
メリット
高い一般的性能: GPT-4は大規模なデータセットでトレーニングされているので、多くのNLPタスクで高い性能を発揮する
使いやすさ: データの収集や前処理、モデルトレーニングなどが不要
多目的性: GPT-4は多くのタイプのクエリに対応しているので、特定のタスクに限らず幅広く使用できる
デメリット
カスタマイズの限界: プロンプトエンジニアリング以外での特定のニーズやタスクに対する最適化が困難
コスト: APIの使用に関して、tokenの量に応じた課金が発生する
今後はプロンプトエンジニアリングによるIn-context learningを活用して、ファインチューニングを行わずアウトプット改善目指し、一定のアウトプットを得ることができました。今後、上記のデメリットに対する改善方針として、オープンソースでファインチューニング可能なモデルを使用して、特定のタスク(今回であれば宅建練習問題)ではGPT-4を上回る性能のモデルを構築することが考えられます。
宅建練習問題ジェネレータ
ここまでで、ChatGPTが宅建試験の練習問題を生成できることがわかりました。このままだとChatGPTでただ遊んだ人になってしまうので、せっかくなので、データサイエンティストが苦手とするwebアプリ開発をやってみました。webアプリでできることは下記の通りです。
宅建試験の練習問題を生成できる。
各問題の選択肢を選ぶと正解/不正解が表示。解説も表示される。
今後、鋭意開発を進めていく予定です。
今後の改善点
ファインチューニングの活用
- 上記でも触れましたが、オープンソースの事前学習済みモデルをベースにファインチューニングで今回のタスクに特化したモデルを自前で構築することで、コストや問題の正確性の問題を改善できる可能性があります。
インプットの工夫
- 今回法令の条文をそのままインプットに使っていますが、条文中に他の条文を参照している部分があると、その内容までは参照できていないため、解答不可能な問題が生成されてしまうことがあります。なので、参照されている条文の内容まで引っ張ってくるようにするとより問題の質が上げられるはずです。
宅建練習問題ジェネレータアプリの本番デプロイと改善
ホスティングにVercelを使おうとしたのですが、ChatGPTの応答には時間がかかるため、Vercelのサーバレス関数のタイムアウトに引っかかってしまう可能性が高く、うまくデプロイすることができず、Edge Functionなどを利用してタイムアウトを避ける必要があります。
終わりに
今回、宅建の勉強に向けて、宅建そのものの知識はもちろん、ChatGPTを用いたプロンプトエンジニアリングの知見(今回やったのはIn Context Learningという技術に近いっぽい)、普段やらないwebアプリ開発に関する知見など、いろいろ新しいことができて非常に楽しかったです。今回、ChatGPTに問題を生成させたのはもちろん、webアプリの開発もChatGPTやgithub copilotをフル活用することによってかなりスムーズに進めることができました。
アプリに関してはかなり荒削りな部分もあるため、不具合もあるかと思いますが、私と同じく宅建勉強中の方をはじめ興味がある方、是非触ってみてフィードバックなどいただけると嬉しいです。
宅建の資格試験は10月です。受かったら合格体験記ブログ的なのを書きたいですが、もしブログ投稿がなければ探さないでください。