データサイエンスグループの榮田です。今回は弊社が運営しているエンジニア特化型のQ&Aサービス(teratail:テラテイル)で行った、ユーザビリティ向上施策の事例について紹介します。
目的
今回の施策の目的は、teratailで投稿された質問に対してのタグ設定率を向上させることで、より質問が回答者の目に止まりやすくすることです。 質問の回答者は自身の得意領域のタグの付いた未解決の質問を検知して回答することが想定されるため、質問者が質問を投稿する際に適切なタグの設定を促すことで、質問に回答がよりつきやすくなり、ユーザーにとってもサービスの利便性が高まることが期待されます。
概要
タグ補完機能とは、質問のタイトルと質問文を入力した際に、予測されたタグの候補が表示される機能のことを指します。(下図の赤枠)
アルゴリズムの概要としては、過去の質問から、質問文と本文に含まれる単語と設定されたタグの共起情報を取得しておいて、新たに質問文が入力されたら、そこに含まれる単語から共起しやすいタグを候補タグとして推薦するというものです。
やったこと
以下の論文を参考にしながら、色々と試行錯誤していきました。
参考にした論文
・共起と潜在トピックを考慮したハッシュタグの構造化手法
https://db-event.jpn.org/deim2014/final/proceedings/B8-1.pdf
・#TAGSPACE: Semantic Embeddings from Hashtags
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.671.2248&rep=rep1&type=pdf
試行錯誤したこととしては、 「クラスタリングして、類似している文書からタグを類推する方法」や、 「形態素解析で出てきた単語の内、タグとして存在するものを推薦する方法」など 様々なアプローチを試していきました。
最終的にたどりついたアルゴリズム
最終的に、精度と実装のしやすさの両方を鑑みて、「文書中に出現する単語と使用されているタグの共起関係を計算して、入力された文からタグを推定する方法」というアプローチに決めました。 加えて、ニッチすぎるタグなどは除外するようにしました。このURL( https://teratail.com/tags:embed:cite )でteratailで使えるタグが全て見れますが、数投稿にしか使われていないタグがあり、出てきて欲しくないタグを除く設定をしました。
基本的には集計しているだけなので、Elasticsearchの機能を使って実装でき、数時間程度の工数でプロダクトに搭載できるレベルの精度とリアルタイム処理を実現できました。 実装にあたってはエンジニアの工数が確保できた段階で、数回のMTGを開いてアルゴリズムの詳細を詰めたり、チューニングを施してリリース出来るようにしていきました。
まとめ
Elasticsearchの機能を使ってできる方法にしたので、PoC→エンジニアによる実装が工数少なめででき、リアルタイム性も確保できました。 実際のところ、リリース後からタグ設定率が少し増えました。
皆さんにとって良いサービスになるので、この記事をご覧になった方もteratailで質問する機会があれば適切なタグを設定してみていただけると幸いです。