情報AIドリルに届いた質問文をキーワードで分類する試みの紹介
はじめに
こんにちは、ライフイズテックでデータサイエンティストをやっているホンディーです。情報AIドリルというサービスで投稿された質問の分析についてのお話です。
情報AIドリルでは学習している生徒の皆様から多くの質問を頂いています。これらの質問を活用してドリルの改善に取り組んだり解答業務を効率化したりすることを目指し、類似の質問を纏めて分類し傾向を分析する取り組みを進めているので紹介します。
情報AIドリルの質問機能とは
情報AIドリルはライフイズテックが塾や予備校向けに提供させていただいているサービスです。これは予習スライドを読んで問題を解き、その問題の解説を確認するという流れで生徒が独力で学習を進められる作りになっています。
その学習の中で解説を読んでも解消できなかった疑問がある場合に質問ができ、頂いた質問へ弊社の担当者が回答する機能があります。これが情報AIドリルの質問機能です。
これまでの質問の分析と最近の変化
これまでも各種学習データを分析する中で、学習量や問題の正解率と並んで各問題の質問の発生率を分析対象の一つとして集計してきました。
しかし、問題が解かれた回数などの他のデータと比較するとどうしても質問の件数は少なく、質問の分析は発生率の集計と実際の内容の読み込みにとどまっていました。情報AIドリル全体ではある程度の質問件数はあったものの、1問あたりの質問数は少なかったので深堀りした分析は実際にその質問一通り全部読み込むアプローチが取れたのです。
しかし、いよいよ来年の共通テストから情報Ⅰが出題されるため、この数ヶ月で情報AIドリルの利用者数とそれに伴う質問件数が大幅に増加しています。
その結果、1問あたりの質問数が100件を超えるものも複数出て、全部を読み込んで調べるのは大変になり、効率化が必要になりました。また、テキストマイニングを行うことで有益な情報が得られるのではという期待も高まってきました。特に解説スライド等の教材のわかりにくい部分の改善と、質問対応工数の削減に繋げていきたいですね。
まずは質問中の頻出語の確認と分類から
実際に質問を読んでいた経験から、各問題への質問はそれぞれ2〜3種類のパターンに分類できるケースが多そうだというあたりが付いていました。(もちろん各問題に例外的な内容の質問はありますが。)
分類にあたっては、当初はWord2VecやK-means等のアルゴリズムの利用も考えはしましたが、いくつか検証すると、「レッスンAの問題Bの質問でXという単語が含まれる質問」くらいの単純な基準による分類で十分なこともわかってきました。そこでグルーピングに使えるキーワードリストを整備することから着手しました。
質問文の前処理と単語の選定
テキストデータを分析する方法は多くありますが、今回はまだ分析に着手し始めた段階なのでできる限り基礎的な手法を使ってシンプルに行いました。
具体的には以下のようなステップを経て単語データを取り出しています。
改行や括弧、句読点や記号などの除去。
形態素解析による単語への分割。
複合語の再結合。
問題の内容に関係なく共通的に出現する単語の除去。
特定の問題に集中して現れる単語のピックアップ
1はわかりやすいですね。2の形態素解析というのは自然言語処理の世界では有名なMeCabというソフトを使って行います。
例えば、「震度が質的データに分類される理由がわかりません。」という質問があった場合にこれをMeCabにかけると、以下のように単語に分割され、品詞情報を得ることができます。
ただし、MeCabはMeCabの辞書に登録されていない単語を更に細かく分割してしまう課題があります。上の例でいうと「質的」と「データ」はまとめて「質的データ」としたいところです。
このような複数の単語からなる複合語を再結合させるのが3の手順です。再結合対象になる複合語の探索は統計的に行います。
たとえば、文章においてある単語Aの発生確率がpで別の単語Bの発生確率がqであると仮定すると、単語Aと単語Bが独立して出現するのであれば単語A単語Bという並びで文章に出現する確率はpqとなるはずです。これよりも非常に高い確率で「単語A単語B」という並びが文章に出現しているのであれば、その「単語A単語B」という文字列は一つの単語なのではないか、といった基準で候補をピックアップして再結合していきました。(PythonのGensimというライブラリに専用のモデルがあり、これを改良した計算式が実装さています。)
そして、4の手順で質問の分類にあまり使えない単語を取り除きます。「理由がわかりません」とか「具体例を詳しく教えてください」、「解説スライドのnページ目」といった文面はどの質問でも発生しうるもので、内容の分類に使えないのでこれらに含まれる単語を取り除きます。
こうすると先程の「震度が質的データに分類される理由がわかりません。」という質問から「震度」「質的データ」というキーワードが取り出せます。
こうして残ったキーワードを候補として利用する単語リストを作ります。
質問の分類結果の活用方法
各問題への質問を登場した単語で分類できたらそれを活用することを考えます。
実際のところ、同じ問題への質問で同じ単語が登場していたら同じ内容の質問であることがほとんどであり、それを読むだけでもこの解説スライドのここがわかりにくいんだな、という情報が得られることが多くあります。
それだけでなく、以下のように質問の内容別に件数を集計できるようになったので優先度付や効果の見積もりなどにも使えそうです。
例えば、以前であれば問題別の質問件数で集計していたので、「問題1」の質問の対策を最優先でやろうと判断していたところですが、内訳まで見ると、「問題2の単語C」の解説を改善するのが一番コスパが高そうだといった判断もできます。同様に、問題3〜問題5はそれぞれの質問が少ないので後回しにしていたところですが共通する「単語D」に関する質問がトータルでは多い、とわかるので予習スライドの「単語D」の解説を改善するとトータルの効果が高そうといった判断もできそうです。
そして、改善の効果もある程度事前に見積もれそうです。例えば「単語A」の解説を改善した場合、問題1の単語Bに関する質問には影響がないので3割くらいの質問削減効果になりそうだといった見当がつけられます。
具体的な改善施策は実物を見ながら検討
以上の分析で、生徒の皆さんにとって解説のわかりにくい部分が判明したらどのような改善を行うかカリキュラムの担当者と検討を進めていきます。
実際によくあった質問なので、「よくある質問」として提示することもできますし、解説のわかりにくい部分を特定して解説を改善することもできます。また、そもそも問題を解く前に理解を深めておけるよう、予習スライドを改善する手もありますね。改善の効果とかかる工数を検討しながら改善を進めていきたいと思います。
質問のテキストを分析した感想
個人的な感想ですが、生徒の皆さんから頂いている質問文を分析していて、質問文のデータが非常に綺麗なことに驚きました。一般的なWebサービスにおいてはユーザーが入力されたテキストデータにはどうしてもいたずら投稿などが混ざっていて、分析の最初のステップはそれらのデータを取り除く作業になります。しかし、情報AIドリルの質問にはそのようなものは殆ど無いのです。
また、自分の経験では単語に分割した後に変換ミスやタイプミスなどの誤字や表記揺れの対応が必要なことが多かったのですが、情報AIドリルの質問においては文章が正確に質問が入力されていてそのような作業も必要ありませんでした。
そもそもですが、「解説がわからない」とか「(ア)がわかりません」とだけ書かれた質問が多かったら今回の記事で書いたようなアプローチは有効に機能しなかったはずです。この種の質問は全く無いわけではないのですが、かなり少数です。
生徒のみなさんが何がどのようにわからないのか、正確な用語で明確に書いて質問して下さっているのでこの記事で書いたアプローチでの分析が可能になっています。このような質問データを見ているだけでも、利用いただいている生徒のみなさんが真剣に学習に取り組まれていることが伝わって来ました。皆さんの努力がきちんと成果につながるよう、教材の改善に取り組んでいきたいと改めて思いました。
おしらせ
ライフイズテック サービス開発部では、気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 connpass のグループからご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています!
この記事が気に入ったらサポートをしてみませんか?