見出し画像

グロービス学び放題の関連コース抽出にItem2Vecを活用してみた話

はじめに

こんにちは!グロービスのデジタルプラットフォーム部門データサイエンスチームの機械学習エンジニアの田邊です。
グロービスのデジタルプラットフォーム部門においては、ここ数年でデータ基盤の整備も着々と進められており、データを活用した価値提供という観点での動きが活発化しています。その一環として現在私はグロービス学び放題において機械学習を活用したレコメンドエンジン改善プロジェクトに取り組んでいます。
前回はこちらにてテキストデータを用いたコースのembeddingを作成する取り組みについてご紹介させていただきました。
今回は同じような趣旨ではありますが、ユーザーの学習行動ログをベースにしたコースのembeddingを作成するためにItem2Vecと呼ばれる手法を活用した内容についてご紹介できればと思います。

Item2Vecとは

Item2Vecとは、Word2Vecと同じ発想でコンテンツやアイテムなどの定量表現を獲得しレコメンドに応用するために提案された手法です。
Word2Vecは”You shall know a word by the company it keeps.”(分布仮説)という仮説のもと、単語の意味を定量的に表現するために提案された手法です。
文を単語ごとに区切り、それぞれの単語の周辺に出現する単語の予測を行うようニューラルネットのモデルを学習させ、学習結果として得られた単語ごとの高次元パラメータを単語ベクトルとして活用することができます。

同じ発想で、例えばECサイトなどでユーザーがセッションごとに購入したアイテム一覧をWord2Vecにおける文、アイテム一つ一つを単語と見立てて、各アイテムの特徴は前後で一緒に購入されたアイテムから推測できるという仮説のもとそれぞれのアイテムの前後に購入されるアイテムの予測を行うようニューラルネットのモデルを学習させることで、アイテムごとのベクトルを獲得するのがItem2Vecです

Item2Vec導入に対するモチベーション

グロービス学び放題においては、日々動画を視聴して学習に励まれているユーザーも多くいる一方、なかなか学習の継続ができずにいるユーザーも一定数存在しており、そういった方々にも学習を継続してもらえるような仕組みを作っていきたいという課題があります。
そこで今回Item2Vecによって学習を続けているユーザーの学習行動に基づくコースの特徴を取得し、学習継続に繋がる関連コースの抽出を行えるようにすれば、継続できていないユーザーにとっての支援に繋げられるようなレコメンドができるのではないかと考えました。

学習行動ログのデータをItem2Vecの学習用に整形する

Item2Vecの論文で紹介されている方法では、ユーザーの行動をセッションごとに区切って、同一セッション内でコンバージョンのあったアイテム同士を意味のあるまとまりとして扱う形になっています。
グロービス学び放題では学習コンテンツを扱っているので、サービスにおけるユーザーの行動としては学びたい内容に沿ったコースを1日に集中して視聴するケースもあれば、何日かに渡って視聴するケースもあり、ユーザーによって様々です。よってセッション単位でまとめるのは適さないので、意味のあるコースのまとまりを割り出すのに別の方法を考える必要があります。

今回はユーザーが「一定期間コースの視聴を行わない場合はそのユーザーの学習行動は一区切りついている」と見なすことで、一連の学習行動を意味のある学習行動のまとまりに分けられるのではないかと考え、以下のように学習行動ログのデータに処理を加えました。

  1. ユーザーのコース視聴履歴一覧を取得し、時系列順に並べる。

  2. 視聴間隔が一定期間以上空いたところで区切り、それぞれの区分に含まれるコース群を一つの意味のある学習のまとまりとして扱えるようにする。

例. 1週間以上コース視聴がない場合に区切るケース

Item2Vecのモデルの学習と検証

上記のように整形したデータを用いてItem2Vecの学習を行います。
Item2Vecのモデル学習の実装はWord2Vecモデル実装に用いられるライブラリを使って比較的容易に行うことができます。
前回ご紹介したコースのテキストデータを用いたembedding作成の際にfastTextというライブラリを用いたこともあり、ここでもfastTextのライブラリを使って実装しています。
まず学習データですが、上記のように整形した学習行動ログデータを、以下のように区切られたコースのまとまりが行ごとに並んでいるような形式でテキストファイルに出力します。(ファイル名はここでは仮にtrain.txtとします。)

262 2266 662 902 622 2349
2395 2202 1701 1941
...

これを用いて以下のようなコードで学習を行います。

import fasttext

# 学習用のパラメータ
training_params = {
    "dim": 100,
    "model": "skipgram",
}

# fastTextモデルの学習
model = fasttext.train_unsupervised('train.txt', **training_params)

学習用のパラメータについてはここでは例としてdimmodelの2種類を設定しています。
dimでは学習の結果得られるembeddingの次元サイズを設定しています。次元サイズはモデルが獲得する表現力の高さのようなもので、大きいほど表現力は上がる一方、計算コストも大きくなるといったトレードオフがあります。 単語の場合は語彙数が万オーダーになることもしばしばあり、それなりの次元数を確保しつつ計算コストもなるべく抑えられるようにといったところで300次元あたりで調整されることが多い印象です。
今回は単語の種類よりも数の少ないグロービス学び放題のコースを扱うため、次元数もfastTextライブラリ推奨範囲の下限である100に設定しています。

model ではモデルの学習方法を決めています。Word2Vecのモデルの学習方法には主に2パターンあり、それぞれCBOWSkip-gramと呼ばれるものになります。
詳細は割愛しますが、主に以下のような違いがあります。

  • CBOW:周辺にある単語(コース)から、中心にくる単語(コース)を予測するタスクで、Skip-gramよりも学習が速く、頻出する単語(コース)に対して良いembeddingを獲得できる傾向がある。

  • Skip-gram: ある単語(コース)からその周辺に出てくる単語(コース)を予測するタスクで、少量のデータセットでも良い性能を発揮でき、出現頻度の少ない単語(コース)に対しても良いembeddingを獲得できる。

それぞれの性質を踏まえ、今回は新着コースなど視聴回数の比較的少ないコースに対してもうまく表現できるようになると嬉しいというところがあったためSkip-gramを採用しています。

学習用パラメータについては他にもいくつかあり、細かい最適化を行う場合はこれらの学習用パラメータの値を調整していく形になります。

学習が完了したら、どのような感じでコースのembeddingが取得できているかを確認してみます。
fastTextでは学習済みのモデルに対してget_nearest_neighborsメソッドを用いることで簡単に入力コースIDについて近傍探索を行い、類似度の高いコースを抽出することができます。

# 似ているコースを探したいコースのIDを指定
sample_course_id = "1234" 
# 類似度の高いコース上位10件を取得
similar_course_ids = model.get_nearest_neighbors(sample_course_id, k=10) 

例えばグロービス学び放題の定番コースである「クリティカル・シンキング(論理思考編)」に対して取得した類似度の高いコース一覧の結果は以下のようになりました。

論理思考で仕事の壁を乗り越える5つのポイント
クリティカル・シンキング3(仮説思考の鍛え方)
クリティカル・シンキング2(問題解決編)
ピラミッド構造 ~主張の筋道や論拠を構造的に整理する~
MECE ~抜け漏れなく分解・構造化して考える~
ロジックツリー ~物事を把握する「分解」の考え方~
プレゼンテーションスキル
演繹的/帰納的思考 ~論理的思考力のベースとなる思考法~
ファシリテーション
因果関係 ~原因と結果の関連を理解する~

この結果はコースのembedding同士の類似度の高いもの順になっています。つまり、同じようなタイミングで一緒に見られる傾向にあるコースの一覧がその度合いの高い順に得られているという見方になります。
ここでは論理思考系のコースや同じクリティカル・シンキングシリーズのコースが現れており、定性的にも納得のいく形になっています。

一方で内容的にあまり関連性がなさそうな結果になるパターンもあります。例えば、「表計算も共同作業!?Google スプレッドシート」というコースに対する取得結果は以下のようになりました。

チームで資料作成!Google スライド
もっと速く、もっときれいに資料が作れる!PowerPoint
ダイバーシティニュース 社会/杉山文野(5/16放送)
ダイバーシティニュース 経済/湯浅エムレ秀和(5/18放送)
ダイバーシティニュース テクノロジー/宋美玄(5/20放送)
スタートアップ視点で考える、大企業がDXを成功させるためにすべきこととは?~加藤エルテス聡志×須藤憲司×平野未来×石山洸
日本ベンチャーの宇宙事業戦略とは~中ノ瀬翔×袴田武史×Garvey McIntosh×岡島礼奈
ダイバーシティニュース テクノロジー/量子テクノロジーなど(5/27放送)
ダイバーシティニュース テクノロジー/国際卓越研究大学法など(6/3放送)
ダイバーシティニュース 社会/為末大(5/23放送)

上位のコースは良いですが、ダイバーシティニュースシリーズなど、Googleスプレッドシートのようなビジネスツールのトピックとはあまり関係がなさそうなものが多く現れています。
この要因としては、新しくリリースされたコースを毎回まとめてチェックしているようなユーザーの行動が大きく影響しているのではないかというところが考えられます。 実際上の結果に含まれるコースは、いずれも「表計算も共同作業!?Google スプレッドシート」のリリース日から1ヶ月以内にリリースされたものでした。

以上のような定性的な検証から、Item2Vecによる方法ではユーザーの学習行動を色濃く反映した関連コース抽出ができていそうだということがわかりましたが、ユーザーにとって有益な関連コースを提示するというところを考えると、これをそのまま使うだけでは少し物足りない部分もありそうです。

関連コース機能への統合

Item2Vecを活用し、コースごとに関連してよく見られているコース一覧を抽出できるようになったので、前回ご紹介したテキストベースのembeddingによる抽出結果との比較を行ってみることにします。
上で試した、「クリティカル・シンキング(論理思考編)」「表計算も共同作業!?Google スプレッドシート」を例にそれぞれ関連コース上位10件を取得した場合以下のようになりました。

「クリティカル・シンキング(論理思考編)」の場合、Item2Vecの方はテキストベースで取得できているものはカバーできており、体系的に学ぶ上で有用なコースが占めているように見受けられます。

「表計算も共同作業!?Google スプレッドシート」の場合、Item2Vecでは前述の通り「同時期にリリースされたコースを視聴する」というユーザーの行動に大きく影響を受けていると考えられるため内容的には関連性の低そうなものが取得されていますが、テキストベースではしっかり他のビジネスツール系のコースが現れており納得感も高いものとなっています。

他にも同様にいくつかのコースに対してこのような比較してみたところ、テキストベースの方法とItem2Vecの方法はお互いの不足している部分を補っていけるような形になっていそうで、うまく統合すれば良い感じに関連コースの一覧を作成できるのではないかと考え、その方向で新しい関連コース表示機能の方針を定めていきました。

定性評価~ABテスト~リリースまでの流れ

ここまでの検証を踏まえて新しい関連コース表示の方針を定められたので、機能としてプロダクトに実装しリリースするまで以下のステップを踏んでいきました。

  1. 定性評価の実施

    • 関連コースとして取得してきたコース一覧がどの程度適合しているかを定量的に計測することは難しいため、社内にいるドメイン知識の豊富な方(プロダクトオーナーやコンテンツ開発チームの方など)に実際に見てもらって定性的に感触を探りました。 そこで得られたフィードバックを元にロジックに調整を加え、リリースに向けた実装に取り掛かっていきました。

  2. ABテストの実施

    • リリースに向けた実装が完了したら、実際のユーザーに対してどの程度有益なものになっているかを評価するため、プロダクト側と連携しABテストを行いました。

    • ABテストの詳細はここでは述べませんが、サービス上で関連コース一覧が表示されるコンポーネントに対するCTRを指標とした比較を行いました。

定性評価においては「今まで取得できていなかったコースが関連コースとして取れている」「痒いところに手が届かないケースもあるが、明らかに良くなっている」と、総じてポジティブな評価を得られたので、良い流れでプロダクトへのABテストに向けた開発に進むことができました。

その後ABテストを約1ヶ月間実施し、そこでもCTRにおいて有意差が見られ、新しい関連コース表示の方が上回る結果となり、無事に本番リリースを迎えることができました。

最後に

今回ご紹介したItem2Vecは比較的簡単に実装でき、かつコースのレコメンドにおいて一定の効果も期待できるものだという知見が得られました。
ここから更にユーザー個人にパーソナライズされた学習支援のためのレコメンドの開発に力を入れていきたいと考えており、現在も様々なアプローチの検証と導入を進めています。
また、レコメンドエンジン運用のためのVertex AIを使ったパイプライン構築も同時に進めている状況で、こちらについても改めてご紹介できればと思っています。

この記事をきっかけに少しでもグロービスのデータサイエンスチームの活動に興味を持たれた方がいらっしゃったらお気軽にご連絡ください。一緒により多くの人の新たな一歩を踏み出すきっかけになるようなサービスを一緒に作り上げていましょう。
最後までお読みいただきありがとうございました。
https://recruiting-tech-globis.wraptas.site

参考

この記事が気に入ったらサポートをしてみませんか?