Pairsの検索体験について

小島 広樹 氏(以下、小島):「Pairsの検索体験について」というテーマででお話させていただきます。

まずは自己紹介なのですが、小島広樹と申します。

株式会社エウレカのAPIチームで、その名のとおりバックエンドの開発をしているチームに所属しております。弊社はExpertという機能別に責任者がいるのですが、その中のSearch & Discovery Expertという検索まわりの責任者をやらせていただいております。

最初に軽く会社説明だけさせていただきます。株式会社エウレカは2008年に創業しまして、今は11期目となっております。

事業についてですが、現在3つのプロダクトを展開しております。マッチングサービス「Pairs」と、カップル向け専用SNSの「Couples」。あとはオンラインで提供する結婚相談所サービス「Pairsエンゲージ」を今年の7月にリリースしまして、その3つです。今日はPairsについてお話させていただきます。

まず弊社はミッションとビジョン、会社の目指すべき方向を定めています。

今回の登壇内容に紐付いてくるため紹介させていただきます。弊社は「すべての人が、人生の可能性を拓いていける世界をつくる。」というミッションを掲げております(2019年9月25日時点 )。

例えば、お金がないから大学に行けないといった諦めであったりとか、そういったことを世の中からなくすことを目的としております。今日お話するPairsに関しては、未婚化・晩婚化を緩和していきたいという思いで運営しております。そしてビジョンは「かけがえのない人との出会いを生み出し、日本、アジアにデーティングサービス文化を定着させる。」というものを掲げております。

そのビジョンを達成するために、Pairsはどのようなサービスなのかを説明させていただきます。

ざっくりサービスのフローを説明をさせていただくと、まず登録していただくとプロフィールの検索画面がありまして、そこで気になるお相手を探していただきます。そこからお相手のプロフィールを見ていただいて、気になるお相手が見つかればお相手に「いいね!」を送ります。

それでお相手に通知が行き、そのお相手がこちらを気に入ってもらえれば「いいね!ありがとう」という返事が返ってきますので、その状態がマッチングとなります。マッチング後にメッセージができるようになりますので、メッセージ交換をしていただき、お互い気が合えば実際に出会っていただいたりという利用フローになっております。

現在は日本、台湾、韓国の3ヶ国に展開しておりまして、プラットフォームはiOS、AndroidのアプリとWebのデスクトップ版、モバイル版の4つのプラットフォームを展開してます。

Pairsにおけるデータ活用

では、今回話すのはアルゴリズムに関してです。こんなデータ活用をしていますよというご紹介だけさせていただきます。

ユーザのプロフィールデータや行動データをまとめてスコアリングを行い、最適なお相手やコミュニティを表示するアルゴリズム内でそういったデータが使われています。

次に投稿監視に関してなんですが、弊社は24時間有人による投稿データの監視をしております。それらをラベル付きで処理をしていまして、そのデータからモデルを構築し、不適切なテキスト投稿の監視を行ったりしています。

他には顔認識により最適な画像を判定して優先的に表示したり、不適切な画像の自動排除も取り組んでいます。

あとは不正なユーザの監視ですね。アクセスデータや行動データから不正なユーザかどうかを判断し、排除をする仕組みになっております。

他にはコミュニティという機能があり、コミュニティはユーザ自身に作成していただいたり、自分で探して気になったものに参加してもらうのですが、現在10万以上のコミュニティが存在しております。コミュニティに関しては、自分の趣味・嗜好・ライフスタイルや価値観を簡単に表現できる1つの要素として利用されています。

一例として、いろいろ分析を行った結果で、なぜかはよくわかっていないのですが、「お風呂好きのコミュニティに入っている女性」と「犬好きのコミュニティに入っている男性」のマッチング率が高いという分析結果も出ていたり、他にもおもしろい結果がわかっていたりします。そんな感じでここまでPairsについて軽く紹介させていただきましたが、これからPairsの検索についてお話させていただきます。

Pairsの検索機能

まず、Pairsにはいろいろな検索があるのですが、大きく分けてユーザ検索とコミュニティ検索の2つがあります。

ユーザ検索に関しては、検索条件を指定して、相手を探す。「条件検索」と書いてあるんですけど、ユーザを検索する一番利用される検索機能ですね。

他にはコミュニティ内でユーザを探す検索であったり、1日に一度何人かおすすめさせていただくピックアップ機能など、それらに検索システムが使われています。

続いて検索にまつわる仕様として、いろいろあるのですが2つほどご紹介させていただきます。プライベートモードと、位置情報検索の2点です。

まずはプライベートモードなのですが、Pairsはお相手を探すサービスなので基本的には登録をしたあとに他のユーザさんからも見られるようになってしまうサービスなんですね。

そこで、プライベートモードを利用すると検索に表示されなくなり、自分が「いいね!」したとか、マッチングした方以外にはプロフィールを表示できなくする機能です。

非表示とブロックという別機能がありまして、「指定した特定の人を表示しない」ということができたり、Facebookの友達を表示させないようにすることも標準機能でできるのですが、Facebookでつながっていない同僚とか、みなさんいらっしゃると思うんですね。

あとは職業により、婚活していることを他人に知られてしまうことがリスクになる可能性のある方もいらっしゃると思うので、そういった方向けの機能です。

これは今年の2月か3月ぐらいにリリースされたばかりなのですが、位置情報検索ができるようになりました。

もともと居住地を都道府県レベルでの検索はできましたが、現在いる場所から何キロメートル以内という検索もできるようになりました。これはだいぶ前から要望が多かった機能なんですが、同じ都道府県内とは言えど端と端とでけっこう距離があるんですよね。

北海道とかとくにそうだと思います。なのでマッチングしたとしてもお会いすることができないと言った声をいただいていたので、この機能で何とかなるのではないかなと思っています。

検索アルゴリズムの一部には機械学習・深層学習を使用

次です。検索のアルゴリズムの一部に機械学習、深層学習を使っているんですが、プロフィールや行動データから作成したモデルをスコアリングに利用しております。

一部は内製していたり、DataRobotなどを利用しております。あとはAmazon Rekognitionなども一部機能に利用していたりします。

その他の取り組みとしては、現在東京大学山崎研究室と共同開発しています。

山崎研究室で研究した内容の知見を取り込んでモデルに落とし込みそれを検索スコアの一部として加えるなどしています。ちょうど今日、日経新聞さんにこの辺の話を『AIが探し出す運命の人』みたいな見出しで取り上げていただきまして、先ほどの「お風呂好きの女性と犬好きの男性」というコミュニティ同士のマッチングの相性が良いという話も載っているので、気になる方はぜひ読んでいただければなと思っております。

Pairsの検索システム

続いて検索のシステム構成についてお話します。

Pairsの検索システムはGoで書かれています。データストアはMySQL、検索エンジンにElasticsearchを使っています。裏側はほぼAWSで動いているのですが、機械学習やログなど各種データを扱っている部分では、GCPを利用しております。

検索システムの課題点といいますか特徴なのですが、恐らくほとんどのマッチングサービス共通の特徴があり、それ故に処理が複雑で重くなってしまうところがあります。まず、アクションが多いんですよね。「いいね!」であったりとか、非表示であったり、足跡を付けるとか。そしてそれに付随してユーザの状態が多いです。「いいね!」してあるか、していないか、退会しているかしていないか、すでに有料会員であるかどうかなどといったステートが多いです。

また、人同士のマッチングサービスなのでそれぞれのアクションによりお互いのデータが更新されるんですね。なのでアップデート処理が多いのが特徴かなと思います。その上でリアルタイム処理による新鮮な情報が求められます。やはりお相手を探しているときが一番モチベーションが高いので、モチベーションが高い人同士をつなげるのが最も効率的と考えているためです。

これはどこのサービスも一緒だと思いますが、速いレスポンスが求められるところで、Pairsに関しては検索ページがトップにあるため、メッセージをするにしても一度検索ページを踏まないといけないんですよね。なのですべての動線になっているので、より速さが求められています。

もう1個、表示させないユーザの扱いというのがあります。

すでに「いいね!」していたり非表示になっているとか、退会している人はもちろんですが、Facebookの友達など、仕様上表示させないユーザが1人に対して場合によっては数万人ぐらい結びついてたりするので、それを全部弾かなければならないところが1つの特徴かなと思います。

当たり前ですが、弾くユーザ数が多くなってくると例えばwhere inでIDを全部一回で弾くみたいなことをしていると負荷が高くなります。

アクションが多いのでその分弾く人数が多うくなり、それらを適切に制御しなくてはなずなおかつスピードも求められるのがこのシステムの特徴で難しい部分です。

検索におけるレコメンド

それでは次に検索におけるレコメンドについてお話できればと思います。こちらの図は先ほど紹介しましたが、探すからいいねをして、マッチングにつなげるための取り組みについてをお話させていただきます。

まずは通常検索なんですが、ユーザのプロフィールなど各種条件から絞り込むことができる機能です。

その絞り込んだ結果をスコアリングしてお相手を表示させています。お客様にとっては自分の理想とするお相手を探しだすための機能なのですが、人によっては条件を設定しすぎてしまいお相手が見つからないとか、自分とかけ離れている価値観の方ばかりがでてきてしまうなど、検索条件が設定できることでかえってマッチングをしづらくしてしまうということがよく起こります。

他にも条件によっては新しいユーザがぜんぜん出て来ない。今いる人だけがずっと表示され続けなかなか新しいお相手が表示されないという事も起こってしまうので、このあたりが大きな課題でした。

それを解決するために、UI上検索条件に沿った検索結果の間に、検索条件をベースにマッチングを考えた属性ごとのおすすめとして、同年代のお相手だったりとか、コミュニティのおすすめであったりとか、最近呟いたお相手など、最近アクションしている方や共通の項目があるマッチングする確率が高いお相手をおすすめとして表示させていただいております。

Pairsは設定できる検索条件の数が多いので、それをそのまま使うのではなく、あくまでその条件の一部など、設定条件をベースにしつつ、こちらでお相手を選んで表示することで、理想のお相手を探しながらも意外な出会いにつながるかなと考えてます。

新しいお相手に出会えるように、コンテンツによって更新性が高くなるようにしているものもあるので、開くたびに別の方が表示されるようにしているものもあります。もちろんキャッシュしてるので一定時間は同じ人が出るのですが。

これらの取り組みの結果コンテンツにもよるんですけど基本的には検索条件で絞り込んだお相手よりもおすすめしたお相手のほうがマッチング率が高いといった数字も出ております。

現在もかなり注力して更新しております。ただ、それを全部エンジニアがやっていると他の開発に支障がでるので、エンジニア以外でも変更ができるように管理画面から条件を設定して組み換えられるようにしています。

検索条件=本当に見つけたい相手ではない

この取り組みを通して学んだのが、必ずしも検索条件がユーザが本当に見つけたいお相手ではないというところです。

人と人なのでいろいろ相性があったり、譲れない条件があると思います。それを検索条件に設定してもらってると思いますが、そういうのはあれど外を一旦見てもらうというのも大切だと思っていて、検索条件を少し外れてでも、マッチングできて、気が合うかもしれないお相手をおすすめとして表示することで運命の出会いを提供できるのでは思っております。

といいつつもまだまだ細かい部分を含め改善できる場所が多く、日々改善を続けております。

今日紹介したPairsでの検索の体験は最初に紹介させていただいたエウレカのビジョンに掲げている「かけがえのない人との出会いを生み出し」というところに結び付けて考えており、今後もこのビジョンの実現に向け、より一層良い出会い・良い体験を提供できるよう、改善を続けていきます。ということでありがとうございました。

(会場拍手)