こんにちは。LINE VOOMサービスのレコメンドシステムを開発しているMLエンジニアのChang Hyun Lee、Jin Woo Baekです。私たちは、LINE VOOMのリアルタイムレコメンドシステムのための大規模なベクトルデータベース(以下、ベクトルDB)を導入するプロジェクトを行いました。この記事では、その導入過程について詳しく紹介したいと思います。
LINE VOOMとは
まず、私たちが開発しているサービス、LINE VOOMを紹介します。LINE VOOMは、LINEアプリ内で提供している動画コンテンツを中心としたソーシャルネットワークサービスです。現在、日本と台湾、タイでサービスを展開しています。
LINE VOOMでは、誰でもコンテンツクリエイターになってコンテンツをアップロードできます。ユーザーはさまざまなコンテンツを閲覧、視聴できます。For youタブでは、ユーザーが興味を持ちそうな動画を連続して視聴可能で、Followingタブでは、フォローしたクリエイターのコンテンツをまとめて見ることが可能です。

この記事では、主にFor youタブで提供されるレコメンドプロセスについて説明します。For youタブは、ユーザーにパーソナライズされたコンテンツの推薦結果を提供するタブです。ユーザーのコンテンツに関するフィードバック、例えば、以前に視聴またはクリックしたこと、「いいね!」を押したことなどのフィードバックを基に、ユーザーが好みそうなコンテンツを抽出して提供します。
従来のレコメンドシステムの課題
以前使用していたレコメンドシステムの全体的な動作フローは、以下のとおりです。

- 投稿の作成:ユーザーが動画の投稿を作成します。
- 投稿埋め込みの生成:作成された投稿に対する埋め込みを生成します。
- 投稿埋め込みの保存:生成された埋め込みをベクトルデータベースに保存します。
- 類似投稿の検索(ANN(approximate nearest neighbor)):類似性検索を通じて類似投稿を検索します。
- レコメンド投稿のリクエストおよび取得:ユーザーにレコメンドされた投稿を提供します。
このプロセスを通じて、ユーザーは自分の興味に合ったさまざまなコンテンツを容易に閲覧できるようになります。しかし、一つ課題がありました。
課題 :即時性の欠如
従来のレコメンドシステムは、投稿の埋め込みを生成・保存した後、推薦候補群を抽出し、インメモリデータベースに保存する一連のプロセスを、すべて日単位のオフラインバッチ処理で行っていました。そのため、推薦候補群の更新に最大で1日かかるという限界があり、この限界はユーザー体験に以下の問題を引き起こしていました。
- クリエイターAが新年を迎え、「Happy New Year」という内容の動画を投稿しても、この動画がすぐにユーザーにレコメンドされません。
- クリエイターBがサッカーワールドカップの試合中にゴールを決めたシーンを収めた動画を投稿しましたが、この動画もすぐにユーザーにレコメンドされません。
このように、新しいコンテンツをすぐに閲覧できないという「即時性の欠如」の問題は、ユーザー体験を低下させました。この課題を解決するために、システムを改善する必要があり、リアルタイムレコメンドシステムを実装するプロジェクトを開始しました。
このプロジェクトの目標は、ユーザーが投稿したコンテンツを即座に推薦候補群に反映し、より新鮮な投稿をユーザーにレコメンドすることでした。そのために、従来のシステムの多くの部分を変更しました。日単位で候補群プール(ポストプール)を生成していた方式をモデルベースのリアルタイム候補群生成方式に変更し、ベクトル検索の方式をオフライン演算からオンライン演算に切り替えました。
この記事では、その中でもベクトル検索構造の変更に焦点を当てて説明します。