資格合格パートナー「スタディング」|オンライン通信講座で難関資格対策
スタディングは、勉強する時間が無い人に最適な資格講座です。スキマ時間を活用できる通信講座で、短期間で合格しましょう!スマートフォンやPCを使った効率の良い勉強方法を解説した合格法テキストや初回の無料講座を提供中。【中小企業診断士・司法書士・税理士・宅建など】
https://studying.jp/
開発秘話シリーズの第一弾はSTUDYing(スタディング)のAI系機能のひとつ、「AI実力スコア」がテーマです。
実はこの機能の開発担当者は技術広報メンバーでもある筆者の私(大原)なんです。という訳で今回は私自ら開発の裏側を語っちゃおうと思います。
▼SYUDYing(スタディング)について
まずはご存じない方のためにもAI実力スコアという機能について簡単に説明させてください。
AI実力スコアとは受講者の日々の学習実績から、今あなたが試験を受けたら何点取ることができるのか?をAIを使って予測するという機能です。
従来の学習方法では学習を開始してから試験を受けるまでの期間に「現在の実力」を測る方法として模試を受けるのが一般的でした。しかしそれでは模試を受けるまでは自分自身の実力がわからないまま学習を進めていかなければなりません。試験日が近づいてから模試を受けるという人が実際には多いため、模試の結果から苦手な分野を把握したとしても、十分に学習する時間を確保することは困難です。
AI実力スコアでは学習を開始したその日からリアルタイムで自分自身の実力を把握することが出来ますし、科目をさらに一段階細かくした単元という単位でスコアを見ることが出来るようになっているので、苦手な科目や単元が常に可視化され、効率よく学習を進められます。
2022年10月時点では6つの講座でAI実力スコアがリリースされています。
さらに詳しい説明はこちらからご確認ください。
私がKIYOラーニングに入社したのは2021年の6月ですが、このAI実力スコアの開発担当者になったのは入社2ヶ月目にあたる2021年の7月なんです。当時はまだどの講座でもリリースされていない新規機能でしたし、AIを活用した学習サービスは当社としても力を入れていただけあって、担当することになったときは不安や心配もありましたが、重要な仕事をさせてもらえるような感じがして嬉しかったです。
当時の私はまだわからないことがたくさんありましたが、今思えばこの時期に新規機能の開発担当になってSTUDYingの開発に慣れていくことが出来たのはちょうど良かった気がしています。
不具合修正や既存機能の改修といった開発を担当する場合、元々の仕様やシステム内部の構造に関する知識を必要としますが、新規機能の開発を担当したことでそういった苦労が比較的少なかったからです。
先日の入社半年の平賀さんのインタビューでも、同じように早い段階で仕様検討からのプロジェクトを担当させてもらったという話がありました。当社は早くから新規機能や仕様検討からの開発を担当することが出来るので、やりがいや成長を実感できるところが魅力的だと改めて思いました。
▼平賀さんのインタビューはこちら
入社2ヶ月目で開発担当として抜擢されたとはいえ、0→1で開発したわけではなく、途中から引き継いだという形になります。画面を表示するまでの全体的な流れは既に出来上がっていたのですが、当時はまだAIと呼べる要素がない状態だったのです。元々のコンセプトがAIを活用した機能ということだったので、私はAIの要素を取り入れるというのを中心に開発を進めることになりました。
AI関連の開発は完全に未経験だったので私に務まるか不安も大きかったですが、このプロジェクトオーナーである代表の綾部が自ら機械学習を活用するためのサンプルプログラムを作ってくれたりと、大きな足がかりもあって何とかやり抜くことが出来ました。色々と吸収することも出来たのでとても感謝しています。
最も苦労したのは、やはりAIに相当する機械学習のプログラム開発を行ったときですね。なかなか思った通りにならず、トライ&エラーの日々が続きました。
機械学習の開発では同じ処理を何度も何度も繰り返し実行する必要があるのですが、このときの待ち時間は特に厄介でした。ただでさえ先が見えない状況だったので焦っていた時期もありましたが、少しでも短い待ち時間で済むようにパフォーマンスを改善したり、一時的に開発サーバのスペックを引き上げるなどの工夫をして何とか許容できる処理時間に収まるようになりました。
予定していたリリースを急遽延期するというったトラブルもありましたが、様々な試行錯誤を経て2021年9月1日に初のAI実力スコアを中小企業診断士講座でリリースすることが出来ました。
AI実力スコアのコアとなるAI実力スコアの計算および機械学習の部分はPython(3.7系)で実装されています。STUDYing(スタディング)のサーバ(APサーバ)とは別のサーバ(APIサーバ)に構築していて、WebAPIとしてAPサーバから呼び出されるような構成になっています。
APIサーバではPythonで実装したアプリケーションをWebAPIとして呼び出せるようにApache、uWSGIを使っています。またPythonでWebアプリケーションを作るためのフレームワークとしてFlaskを導入しています。
このインフラ周りに関してはAI学習プランという別の機能で使用していたところに相乗りした形になっています。
AI実力スコアのリリース後にサーバのスペック見直しや冗長化を行うといった改善をしました。
ちなみにフロント側にはVue.js(2系)を使っており、グラフ系の表示にはHighchartsを利用しています。
※AWSの構成イメージ
代表的な改善として「パフォーマンス改善」と「勉強仲間機能へAI実力スコアを投稿する機能の開発」を行っています。
※スタディングの「勉強仲間機能」は、学習記録を投稿したり、勉強仲間を作って「いいね」や「コメント」を交換することで、学習を習慣化し、モチベーションを高めることを目的とした無料サービスです。
AI実力スコアの計算にはどうしても時間がかかってしまうという課題があったため、もともとの思想としてある時点までのスコアをキャッシュしておく仕組みがあります。
また、夜間バッチ処理で日々の学習者のAI実力スコアを更新するようになっているため、最長でも1日前までのスコアがキャッシュされるようになっているんです。
しかし、単元ごとのスコアを算出するという性質上、単元の数が多い講座ではどうしてもAI実力スコアの計算にかかる時間が長すぎるという問題が顕著化するようになってしまいました。
学習データがなくても忘却効果を反映するための最低限必要な計算処理があるため、そこにかかる時間が軽視できないという状況になってきたのです。
そこでパフォーマンス改善を実施することになり、主に次の3点を対応しました。
①AI実力スコア計算ロジックの高速化
Pythonの処理時間を高速化するためにnumbaというライブラリのjitclassという仕組みを取り入れました。コーディングの制限は受けてしまいますが、別機能でもパフォーマンスを改善できたという成功体験があったため、AI実力スコアでもチャレンジすることに決めました。
特に単元の数が多くてAI実力スコアの計算に時間がかかってしまう講座に対しては大きな効果がありました。
②WebAPI呼び出しの並列化
ある講座では試験の午前、午後と2つのAI実力スコアを別々に算出する必要があり、WebAPIを2回呼び出すようにしていたのですが、これを直列呼び出しから並列呼び出しに改善することでWebAPIの呼び出しにかかる時間を最大で約半分の時間に短縮することが出来ました。
この仕組みは夜間バッチでも流用したので、大量のユーザのAI実力スコアを更新する夜間バッチの処理時間も短縮することが出来ました。
③統計SQLの都度発行を廃止
AI実力スコアでは受講者の平均点や、他の受講者と比較したときの「あなたの位置」を表示しているのですが、統計用のSQLを毎回発行していて、結果を得るまでの時間がボトルネックになっていたため、日次バッチで統計情報をテーブルに保存しておき、ユーザがアクセスした際はそちらを参照するような仕組みに改善しました。
受講者数が多い講座では統計を取得するSQLの実行時間も軽視できない状況だったため、改善することが出来て良かったです。
STUDYing(スタディング)の勉強仲間機能にAI実力スコアの画面キャプチャを添付して投稿するユーザもいらっしゃったので、自身のAI実力スコアを他の勉強仲間へ共有したり、学習履歴として残せるようにAI実力スコアを勉強仲間へ簡単に投稿できる機能を開発しました。
※2022年9月6日リリース
学習履歴としてAI実力スコアを投稿するか選べるようになったため、日々のAI実力スコアが記録のように投稿できたり、頑張って学習した結果としてAI実力スコアを勉強仲間にシェアするといった目的で利用できます。
また、AI実力スコアが載っている投稿を他のユーザが目にすることで、AI実力スコアの利用促進にもなることを期待しています。
※勉強仲間へAI実力スコアを投稿する画面
今後はより多くの講座にAI実力スコアを対応させるために講座開発チームと連携しながら計画を進めているところです。将来的にはSTUDYingの全講座でこのAI実力スコアが利用できるようにしたいです。
入社してから最も長く関わってきた機能なので、責任感を持ってよりスピーディーに多くの講座にAI実力スコアを対応していけるように努めていきたいと考えています。
効率的に学習するためのツールとして、より多くのユーザにAI実力スコアを活用していただけるようになると開発者としては嬉しいですね。