Encyclopedia of Desireの仕組み

Encyclopedia of Desire
6 min readSep 19, 2019

--

今回の記事では、Encyclopedia of Desireがどのようにデータを収集しているのか、その仕組みについて簡単に解説をしていきたいと思います。

何かを検索するとき、どの言語圏であっても、必ずキーボードのいずれかのキーを押すことになります。Googleのオートコンプリートが「他のユーザーが検索しているキーワード」「ご利用の地域で人気を集めているトピック」をベースにキーワードを先回りして予測しているのだとしたら、毎日あらゆる地域の、あらゆる言語設定の、すべてのキーに紐づくGoogleオートコンプリートの予測結果を収集していくと、世界各地で人々が何を検索しているのか、つまり何を求めているのかをaからzまでインデックスで一覧化する、「欲望の百科事典」がつくれるのではないか?というアイデアをベースに開発されたのが、このEncyclopedia of Desireです。

■データの収集の自動化

ではどのように「あらゆる地域の、あらゆる言語設定の、すべてのキーに紐づくGoogleオートコンプリートの予測結果」を自動的に収集していけばよいのでしょうか。

まずはGoogleのオートコンプリートの結果を取得するためにAPIが必要となりますが、残念ながらGoogleは2015年にAutocompleteのAPIをクローズドにしてしまいました。そこでGoogle Suggest APIを利用することにしました。オートコンプリートはGoogleアカウントの検索履歴に基づいたパーソナライゼーションによってユーザ毎に結果が変わってしまうため、Suggestのほうがむしろ俯瞰的なデータが取得できそうです。Google Suggest APIではパラメーターとして言語コードをつけることでそれぞれの言語毎のサジェストの結果の1位から10位をXMLで取得することができました。これですべてのキーに紐づくあらゆる言語設定の予測結果を取得することはできる見込みが立ちました。

■世界の入力メソッドの調査

次に、様々な言語入力時に「最初に押されるキー」について考えるとき、モバイルデバイスの入力メソッドを調査する必要があります。英語などの1バイト文字の言語圏の場合、基本的にはあらゆる語句はAからZいずれかから始まるので、「A」から「Z」まで、ついでに「0」から「9」すべての文字について予測結果を取得すればよいわけですが、課題は2バイト文字圏です。具体的には日本語、韓国語、ヒンディー語、ロシア語が今回の対象となります。

日本語の入力メソッド場合、1文字目に2バイト文字が入力される可能性としてはキーボードのかな入力を利用している場合と、スマートフォンでフリック入力をしている場合が考えられます。そのため従来の「A」から「Z」、「0」から「9」までの予測結果に加えて「あ」から「ん」まで、および濁音、半濁音すべてのひらがなそれぞれについて予測結果を取得するようにしました。

韓国語の場合、単体で一文字となる文字と、子音+母音で一文字を成す文字があり、「ㄱ」から「ㅎ」、および子音の「ㅏ」から「ㅣ」いずれかが必ず該当します(母音から始まる言葉の場合には最初に「ㅇ」という子音を入力するというルールになっています)。そのため、従来の「A」から「Z」、「0」から「9」までの予測結果に加えて「ㄱ」から「ㅎ」、「ㅏ」から「ㅣ」のハングル文字それぞれの予測結果を取得するようにしました。

ヒンディー語の場合、lipyantaranとよばれる日本語におけるローマ字入力と同様の入力方法と、デーヴァナーガリー文字入力という日本語におけるかな入力と同様の入力方法があります。そのため、従来の「A」から「Z」、「0」から「9」までの予測結果に加えて「अ」から「ह」についてのデーヴァナーガリー文字それぞれについての予測結果を取得するようにしました。

ロシア語の場合、は「A」から「Z」、「0」から「9」までの予測結果に加えて「а」から「я」それぞれのロシアアルファベットそれぞれについての予測結果を取得するようにしました。(厳密には「ъ」と「ь」についてはひらがなの濁点、半濁点のような役割を担う特殊な記号らしいのですが、データを見ているとこの文字からはじまる特殊な造語なども見受けられるため一覧にいれています)

・結果を取得する言語コード

日本語:ja

韓国語:ko

英語:en

フランス語:fr

ドイツ語:de

インド(ヒンディー語):hi

イタリア語:it

スペイン語:es

スペイン語(メキシコ): es-419

ポルトガル語(ブラジル): pt-BR

ロシア語 : ru

■世界各地のデータの収集方法

では地域についてはどうするか?これは厳密には実際にその場所に行ってSuggestAPIにリクエストを送るしかないのですが、世界各都市にサーバを立てるのは非現実的なので、Googleの普及率が高い国の上位、かつAWSで契約可能な世界各都市のリージョンを契約して、それぞれのリージョンからSuggestのAPIにリクエストを送るバッチプログラムを設置し、情報を収集することにしました。

・契約したAWSリージョン一覧

us-west-1 アメリカ西海岸

us-east-1 アメリカ東海岸

eu-central-1 ドイツ/フランクフルト

eu-west-2 イギリス/ロンドン

ap-south-1 インド/ムンバイ

eu-west-3 フランス/パリ

sa-east-1 ブラジル/サンパウロ

ca-central-1 カナダ/モントリオール

ap-northeast-1 日本/東京

ap-northeast-2 韓国/ソウル

ap-southeast-2 オーストラリア/シドニー

--

--