LINE TIMELINEの新たな挑戦vol.1 – おすすめのコンテンツが探索できる「ディスカバー」と新しい購読モデルの「フォロー」

はじめに

LINEの「タイムライン」に「ディスカバー」機能と、新たな購読モデルとなる「フォロー」機能が追加されました。ユーザーにとっては目新しい機能ではないかもしれませんが、これらの機能を実装するにあたって、私たちが何に悩み、工夫したかをみなさんに共有したく、この記事を書くことになりました。今回の記事を皮切りに全3回のシリーズで、詳しい情報をお届けしたいと思います。

  • LINE TIMELINEの新たな挑戦vol.1 – おすすめのコンテンツが発見できる「ディスカバー」と新しい購読モデルの「フォロー」
  • LINE TIMELINEの新たな挑戦vol.2 – ディスカバー配信システムの紹介
  • LINE TIMELINEの新たな挑戦vol.3 – ディスカバー・レコメンド・モデルの詳細

新たな挑戦の始まり

「ディスカバー」と「フォロー」は、サービス観点から数年前より議論されてきたテーマでしたが、LINEはプライベート空間という認識が強いソーシャル環境であることを考慮する必要があったため、私たちはその扱いについて長い間悩んできました。既存のタイムラインは、友だち追加すると相手のコンテンツを読むことができます。しかし、LINEを使っていると、ちょっとしたやり取りのために友だち追加をした人にまで、自分のソーシャルグラフが広がってしまうため、段々と投稿をためらうようになりがちです。その結果、タイムラインには友だちからの投稿が少なくなり、ビジネス用のアカウントからの投稿だらけになってしまいがちです。私たちは開発者である一方でLINEのユーザーでもあるので、ユーザーの立場から見てこうした状況を脱するために何度も議論を重ねてきました。LINEのタイムラインは、このディスカバーとフォローという2つの機能で、サービスと技術的観点の両方から新たな挑戦をしようとしています。 

ディスカバーとフォローとは?

タイムラインは、知り合いをベースにした、少しクローズドなSNSです。企業などのLINE公式アカウントからさまざまなお知らせをを閲覧することができますが、これもやはり友だち追加した場合に限ります。これは長所にもなりますが、短所にもなり得ます。誰もが閲覧できる全体公開のコンテンツが多くありますが、そのコンテンツに辿り着くことは非常に難しいです。タイムラインでパブリックな投稿を行うためには、公開範囲を「全体公開」に設定します。ですがこれは、友だちに限らず誰もが読めるように権限が設定されているだけで、すべての人に配信されるという意味ではありません。タイムラインでは、友だち関係にある場合のみコンテンツが配信されます。そのため、私たちはユーザーに届いていない良質なコンテンツを発見して閲覧できる空間と、興味のあるコンテンツを継続して購読できる仕組みを導入しました。それが、ディスカバーとフォローです。

参考情報:ディスカバーとフォローの機能は、LINE 10.3.0以上のバージョンでのみ使用できます。現在、日本と台湾、タイでサービスを提供しており、今後提供範囲をさらに他の国へ拡大することを検討しています。

ディスカバー

タイムラインのタブの右上にある惑星型のアイコンをタップするとディスカバーを使用できます。または、タイムラインのフィード内にあるディスカバーのプレビューから「もっと見る」でも開けます。日本語版では「ディスカバー」、英語版では「Explore」と表示されます。

タイムラインとディスカバーの違いは?

タイムラインとディスカバーは、ユーザーまたはビジネスアカウントが投稿したコンテンツを見せる機能です。しかし、この2つは異なる役割を果たします。

  • タイムライン:友だちまたはフォローしているコンテンツを購読する
  • ディスカバー:今までは自分に届いていなかった、興味を持ちそうなコンテンツを探索して閲覧する

特にディスカバーは、低品質あるいは不適切なコンテンツはレコメンドシステムで適切に取り除いて、好みのコンテンツだけを表示します。この過程で、各ユーザーが興味を持って見たコンテンツをベースにさらなるカスタマイズが行われ、ユーザーがコンテンツを選択すると、それに基づいて似たコンテンツの探索を続けられる、というユーザーエクスペリエンスを提供します。そして、コンテンツを作る側にもメリットがあります。下図で分かるように、全体公開のポストを作成すると、より多くの人に自分のコンテンツを見てもらえる機会が得られます。LINEでも、有名なインフルエンサーになるチャンスが訪れたのです。私たちはこの機能をよりよくしていくためにさまざまなことを考えています。どうぞご期待ください。

フォロー

フォローは、友だちではないユーザーのコンテンツを購読する機能です。フォローするだけではトークでのメッセージのやり取りはできないため、LINEで「トークはしたくないけど相手のコンテンツは購読したい」という場合に使えます。なお、相手のプロフィールで、フォローしているかどうかを確認できます。

ディスカバーとフォローについての詳細はこちらをご参考ください。

ディスカバーの基本的な操作方法

すでにこのブログで何度も紹介していますが、LINEはRedisやHBaseといったNoSQLベースのプロダクトを使って、大規模なサービスの開発・運営をしています。LINEのタイムラインやディスカバーも、こうした技術を使用してサービスを提供しています。長年のノウハウの蓄積があったため、考慮すべき安定性(reliability)、拡張性(scalability)、耐障害性(fault tolerance)などへの対応も含め、開発は問題なく進みました。開発が順調だったお陰で、さらに他のことに注力する余裕もできました。

どうやるか(how)よりもなにをやるか(what)に集中

ディスカバーは、どのコンテンツを選別して見せるかがカギとなるプロジェクトです。ほんの数年前までは大規模なデータの保存とスピーディーな配信が主な課題でした。しかし現在は、どのような興味関心をベースにしてデータを取り出し、見つけだすかこそがコアコンピタンスとなりました。私たちはLINE DEVELOPER DAY 2019で紹介したPicCell(参照)のような画像/映像分析コンポーネントとマシンラーニング技術を組み合わせました。タイムラインで取得したデータをもとに学習モデルを作り、そのモデルを利用してコンテンツを分類することで、類似のユーザーごとにセグメントを分けたり、興味関心が似たグループに分けて、好みのコンテンツを配信することが可能となったのです。作業工程のサイクルは以下のとおりです。

好みのコンテンツの配信サイクルと主なコンポーネント

参考:ディスカバーでおすすめされるのは、公開範囲が「全体公開」になっているコンテンツに限られています。

1. コンテンツを勧めるには、最初にコンテンツの人気度または関心度を判断するデータが必要です。ユーザーが見たコンテンツの情報と、「いいね」やコメントのようなリアクション情報のデータを分析できる形で蓄積します。
2, 3, 4. データはAnalysis Data Storageに集まり、おすすめシステムがさまざまなモデルのML(機械学習)モデルを通して結果を作り出します。どのようなテーマで分類するか、どのようなコンテンツをおすすめしないか、はここで決まります。
5. MLによって作られたデータモデルと結果をサービスとして提供できる形に変換し、読み取り速度の速いストレージ(Recommended Contents Pool)に保存されます。これで、データがサービス利用可能な状態になりました。
6. クライアントがディスカバーの内容をリクエストします。
7, 8, 9, 10. リクエストはDiscover Curator Serverに送信され、Recommender Serverからおすすめのコンテンツを取得してグリッドビューを構成します。このとき、自分のソーシャルグラフを参照して画像や映像などを適切に配置します。
11. データがクライアントに送信され、画面にレンダリングされます。

主なコンポーネントについてより詳しく説明します。

Discover Curator Server
Recommender ServerとContents Storageからコンテンツを取得してディスカバーのグリッドビューを作る役割をします。広告やLINEのストーリーなどさまざまなコンテンツをディスカバーに投稿できるように拡張可能な形で実装されています。

Recommender Server
Recommended Contents Poolのデータをサービスで使用できるように配信する役割を果たします。Recommended Contents Poolのデータを管理および整理して、さまざまな要件に合わせてデータを分類し、コンテンツをを保存します。例えば性別、年代、国、メディアのタイプ(画像または動画)、コンテンツのタイプ(動物や人など)など、さまざまなトピックで分類しています。

Recommender System

全体公開のコンテンツの中でも、ディスカバーでおすすめできる水準のコンテンツ候補群となるRecommended Contents Poolを作成します。品質が低い、あるいはあまり役に立たないと判断されたコンテンツはここで除外されます。コンテンツの類似度を測定して類似コンテンツグラフを作り、サービス提供に必要な生(raw)データを作成してRecommended Contents Poolに保存します。内部では以下のような処理を行っています。

  • Similarity Measurement:ユーザーが過去に興味を示した投稿に似た投稿をおすすめ候補から見つけて類似コンテンツリストを作成
  • Ranking:ユーザーの好みに合わせてコンテンツをランク付け
  • Testing:多様なML手法でディスカバーのおすすめモデルをテスト

Contents & Reaction Storage
タイムラインの投稿、いいねやコメントといったリアクション、外部連携のコンテンツなど、すべてのコンテンツを保存するストレージです。すべてのデータは永続的に保存されるため、大容量のデータシステムで構成されています。上図では、1つのボックスで表現されていますが、実際はさまざまなコンポーネントで構成されています。アクセス頻度の低いコールドデータから、迅速なアクセスが必要な最近のデータまで提供する必要があるため、いくつかのストレージ製品を使用しています。

Social Graph DB
タイムラインでは、購読関係がとても重要です。Social Graph DBは、ブロックされているユーザーや、友だちとのフォロー関係をベースにして、フィードからコンテンツを非表示にするなど、相互の状況を考慮して最終的な購読関係を保存、提供します。内部的には、自社で独自開発したHBaseベースのグラフデータベースを使用しています。これについては、後ほどフォローの説明部分で詳しく紹介します。

ディスカバーのおすすめモデル

少し大仰な説明となってしまいましたが、つまりこれは多くの人に人気のあるコンテンツと、自分自身が興味を持っていそうなコンテンツの両方をおすすめしてくれるモデルなのです。それから自分がよく見ているコンテンツに似たコンテンツも、併せておすすめしてくれます。おすすめについての内容はスペースの関係で次回にして、大体の流れだけを説明します。

類似性を判断するためにはデータをベクターの形に変換する必要があります。対象となるパブリックな投稿をフィルタリングし、1次加工してカテゴリー別のベクターデータを作成します。ここでのベクターとは、コンテンツの特性を数字にして表現したデータと捉えてください。

コンテンツをベクターで表現することで、ベクターのコサイン類似度(cosine similarity)によってコンテンツの類似性を測定できます。1つの投稿ごとに4種類(テキスト、画像、動画、消費履歴ベース)のベクターを作成し、これらをうまく組み合わせて1つにソートします。これでユーザーが興味を持ったコンテンツとテキストが似た投稿、画像が似た投稿、動画が似た投稿、似たパターンで消費された投稿をすべて含めたおすすめリストを作ることができます。

フォローを導入するまでのプロセスと悩み

フォローは、既存の友だちベースのソーシャルグラフを、タイムライン上でさらに拡張する方法をための機能です。ソーシャルグラフを拡張していくためには、今まで届いていなかったコンテンツがユーザーにする必要があります。それこそが「ディスカバー」の目的です。ディスカバーとフォロー、2つの機能はとても相性が良いです。

たくさんの自問と自答

「ソーシャルメディアとしてのソーシャルグラフは、LINEの友だちリストと同じものなのか、それとも違うものなのか?」これは、私たちが真剣に考えて議論したトピックです。LINEはメッセージングアプリですが、同時にソーシャルメディアスタイルのタイムラインも提供しています。そのため、以下の式は真であり偽でもあると言えます。

トークで交流する関係 = タイムラインで交流する関係?

実際のところどうなのかを考えてみましょう。あなたは友だちの近況を知りたいです。しかし、タイムラインにはあなたの近況を知らせたくない友だちや、その逆で近況を知らされても興味が持てない友だちもいます。そのため、上記の式は部分的には真ですが、一方であなたは「そうしたくないな」と思っています。そんなあなたのために、タイムラインにはさまざまなフィルタリング機能が存在します。例えば、以下のようなものです。

  • 自分のコンテンツを公開しない(close/exclude)
  • フィードで特定のユーザーを非表示にする(user hide)
  • フィードで特定の投稿のみ非表示にする(post hide)
  • 友だちをブロックする(block、最も強く拒否する手段でトークも拒否される)

このような機能を利用すると、自分が見たい投稿のみを受け取る空間にすることができます。しかし、あまり簡単な方法とは言えません。では、どうすればいいでしょうか。

ソーシャルグラフの分離または拡張

最もよい方法は、LINEの友だち関係から始めて、それから別途管理する関係リストに分けて、友だちかどうかは関係なくタイムラインでのみ交流したい人たちに絞るやり方です。ですが、これも簡単ではないため、ここでは分離するのではなく拡張する方法を選びたいと思います。そうすると、前述の「タイムラインをよりオープンな空間にする」という趣旨にも合致します。 

フォローは、LINEの連絡先という大きな枠組みに縛られることなく、購読関係を設定できます。ここに注目しましょう。タイムラインでの関係をフォローベースにすると、既存のLINEのソーシャルグラフとは異なるグラフを作ることができます。既存の友だちの中でコミュニケーションしたい人だけを設定しておけば、つまりマイグレーションができれば、ソーシャルグラフを分けられます。もちろん、コンテンツ購読のためだけのソーシャルグラフになるまでには、もう少し時間がかかると思います。ですが結果的に、ユーザーが望む形、望む方向に向かうことができるのではないか、と考えています。

巨大な関係情報サービスに向けた悩みと取り組み

タイムラインでは、コンテンツの生産者と消費者をつなぐ空間が必要で、そのような関係をデータ化して保存する必要があります。前者(空間)はタイムラインのフィードで、後者(関係)は購読関係です。購読関係は、友だちとフォローの関係や、各種フィルタリング情報を組み合わせることで得られます。フィルタリングは、コンテンツを特定のユーザーに対して非表示にしたり、非公開にしたりする機能です。

友だちのコンテンツを購読する、ということは、次のようなグラフで表現することができます。便宜上、一時的に購読関係の代わりに友だち関係に置き換えてみましょう。下図の左は友だち関係を示し、右は投稿書き込みの終端(edge)までを示しています。右側が購読関係を表現しています。

タイムラインでは、この購読関係の情報を効率よく保存、維持することが重要です。最初は、単にキーとバリューの形で保存して使用しました。しかし、機能を修正したり拡張したりするたびにキーを再設計、あるいは改めて作る必要が生じることがよくありました。現在は、このような関係情報を効率よく保存、使用するために、私たちが独自で開発したグラフデータベースを使用しています。グラフデータベースのメリットは、新しい関係ができた場合、それに対応するキーとバリューのセットを定義して開発する必要がなく、存在するバーテックス(vertex)に新しいエッジを繋げるだけで済むことです。グラフデータベースは、バーテックスとエッジのCRUD(Create、Read、Update、Delete)とグラフの探索方法を提供してくれるため、毎回キーとバリューを改めて作る必要がありません。ただし、グラフデータベースだけでは、パフォーマンスの限界といった乗り越えるべき問題があるため、それをもう一度ラッピングしたグラフサービスを利用して関係情報を保存し、サービスに使用しています。

下図は、友だちのエッジをフォローして、友だちの友だちが作成した投稿を見つけている様子です。グラフデータベースを使用すると、追加開発なしで下図のような探索も可能です。 

実際のサービスでは、このような情報を非常にスピーディに閲覧できるようにしなければならないため、グラフデータベースだけに依存するわけではありません。深さ(depth)のあるグラフの探索ではパフォーマンスが出ないため、各段階のバーテックスをスピーディに見つけて同時に閲覧する並列性がポイントになります。理想と現実はいつも違うため、それを改善するために多くの努力を傾けています。

再びフォローの話に戻りましょう。フォローの機能が登場したことで、購読関係は友だちとフォローに拡大し、最終的な購読関係のエッジはさらに多くなるでしょう。

上の図はグラフのシステム観点からはアンチパターンですが、有名なインフルエンサーや有名な公式アカウントなどのユーザーはこのようなパターンを見せます。そこで、私たちは1人の購読グラフをパフォーマンス上の利点がある形に分割し、ソートすることで問題を解決しています。このような分類作業は、サービスの内容や要件によって変わってくる部分であるため、一般化はできず、サービスに合わせて作っていく必要があります。

フォローは一見シンプルな機能のようですが、その中にはサービスと技術それぞれの面で多くの考慮と努力が詰まっています。この記事が同じような悩みを抱えているみなさんの参考になればと思います。

おわりに

ディスカバーは、それまでは発見できなかったコンテンツを掘り出したことに大きな意味があります。またフォローは、LINEにおいて友だち以外に他人のコンテンツを購読できる新たなソーシャルリレーションシップを提供します。この2つの新たな機能により、タイムラインがより一層注目され、発展する空間になることを願っています。私たちが本当に望んでいるのは、タイムラインがユーザーにとっては楽しみや情報を発見できる空間となり、LINEというサービスにとってはさまざまな関連サービスと外部サービスのコンテンツの交流やPRの場となることです。タイムラインは、よりオープンな空間となり、新たなソーシャルグラフを作れるスタート地点となることを望みます。これをディスカバーとフォローで作っていきたいと思います。そのために、LINEで活用できるあらゆる技術を駆使していく予定です。これからのアップテートもご期待ください。

次回は、ディスカバー配信システムをご紹介します。お楽しみに!