Posts

ランキング学習 〜情報検索への機械学習の応用〜

Image
はじめに 本記事は CodeZine に掲載されました。 こちら で読めます。 近年、「AI」という言葉をよく見かける背景には、機械学習を使った様々な手法と飛躍的進歩があります。 この機械学習の大きな手法の1つに「教師あり学習」と呼ばれる手法があります。 この教師あり学習には大きく分けて2つのタイプがあります。1つは、ある画像を「犬か否か」推定したり、「犬、猫、鳥」の どれに分類されるか推定するといった「分類」です。もう1つは、ある出来事が起こる確率を推定するといった「回帰」です。 どちらのタイプも教師あり学習ではよく用いられますが、本記事で紹介する「ランキング学習」は一般的な「分類」や「回帰」とは 少し異なります。ランキング学習は近年発展してきた技術のため、特に日本語の情報が非常に少なく、英語の情報がほとんどです。 そのため、本記事では日本語でランキング学習を詳細に解説していきたいと思います。 ランキング学習とは ランキング学習は英語では Learning to rank といって、LTR とよく省略されます。英語のウィキペディアにあるランキング学習の記事では以下のように定義されています。 "Learning to rank or machine-learned ranking is the application of machine learning, typically supervised, semi-supervised, or reinforcement learning, in the construction of ranking models for information retrieval systems." 上記の英文を日本語に訳すと以下のようになります。 「ランキング学習とは情報検索のシステムにおいて、ランキングモデルの構築に適用された機械学習のことです。ランキング学習のアルゴリズムには教師あり学習、半教師あり学習または強化学習があります。」 情報検索やランキング学習のことを知らずに上記の定義を読んだらあまりピンとこないかもしれないので、 より分かりやすく説明したいと思います。検索システムでいえば、ランキングとは検索結果の表示順のことを指します。例えば、「総理大臣」と検索して、一番上に表示...

Activate 2018(旧 Lucene/Solr Revolution) に参加してきました

Image
2018年10月15日〜18日モントリオールで開催された Activate 2018 に参加してきました。 カンファレンスは Lucene/Solr Revolution から Activate に名前を変更して、 Lucene/Solr だけでなく、「The Search and AI Conference」という風に検索一般と AI に重点を置いていました。 会場はモントリオールのダウンタウンにある Le Centre Sheraton Montreal という 歴史のあるホテルで、セッション・食事などにホテルの B1, 2F, 3F, 4F が使用されました。 参加者人数は39ヶ国から612名、セッションの個数は70個でした。参加者の15%が過去の Lucene/ Solr Revolution に参加したことがあり、残り85%は初めてだったらしいです。 10月15日と16日はトレーニングワークショップでセッション自体は17日から始まりました。 今回のカンファレンスは、トレーニングを受けませんでしたので、16日の夕方のレセプションから カンファレンス終了まで参加してきました。 16日のレセプションは、食事はプーティンという代表的なカナダ料理や牛肉など、飲み物はワイン、 ビールなどありました。雰囲気としては割とカジュアルな感じでカンファレンスの主催者である Lucidworks のお客さんやカンファレンスのスポンサーの人が多い気がしました。 セッション初日 17日からセッションが始まったんですが、朝は朝食とキーノートがあり、 Université de Montréal の Yoshua Bengio 博士が登壇しました。キーノートはディープラーニングの現状と今後についての話で、 技術者・ディープラーニングスペシャリスト向けな部分もあれば、一般的な AI のこれからの進歩、方向性、 希望、危険性などについても話しました。特に発表の最後に、希望・危険性については以下のスライドがありました。 キーノートが終わるとセッションが始まりました。様々なセッションがありましたが、特に面白いと思ったのを 以下まとめたいと思います。 Learning to Rank: From Theory to Production このセッションでは、Bloomb...

Spark + AI Summit Europe 2018 に参加してきました

Image
2018年10月2日〜4日にエクセル展覧会センター(ExCeL London) という場所で開催されたSpark + AI Summit Europe に参加してきました。 3日間とは言っても、初日はトレーニングワークショップで、2日目、3日目は様々なキーノートとセッションという感じでした。 割と広くておしゃれな会場で、近代的な気がしました。 トレーニング(初日) 初日のトレーニングワークショップの前に、コーヒー、紅茶、そして朝食も用意されていました。ワークショップは、Spark Certification のコースを含めて 8種類ほどあり、私の参加した「Hands on Deep Learning with Keras, TensorFlow, and Apache Spark」というワークショップは、参加人数が100名ほどで、 資料は HTML プレゼンでした。利用したツールは Microsoft Azure上で動作している Databricks のノートブックで何もインストールする必要がありませんでした。 Microsoft Azure 上と言ったが、Azure については何も知らずともトレーニングを受けられる感じでした。質問の受付けや資料の共有などは Slack でしました。 1部はニューラルネットワーク・ディープラーニングの基礎と Keras の紹介でした。Learning to Rank for Apache Lucene (LTR4L)でスクラッチ からニューラルネットワークを実装したおかげで、ニューラルネットワーク基礎(活性化関数・バックプロパゲーション・最適化など)のところは主に復習でしたが、 かなり良いペースできちんとやった感じがしました。Keras の方は、コードを書くのは初めてでしたが、ノートブックにおいてのコード実行、また Keras のラボで割と 学びやすい気がしました。 1部が終わったら全トレーニングワークショップの受講者で昼食をしました。トレーニング用の部屋の出口は左右にあり、どちらを出ても食事が用意されていました。 セルフサーブのビュフェで、デザート、ビーフシチュー、そしてベジタリアンオプションも用意されていました。テーブルは自由席でした。テーブルに座ると自己紹介をし、 会話が自然に続く感じでした。 2部の方は、co...

「機械学習の論文をスクラッチから実装しよう!」LambdaMART の数式をコードに落とす

Image
「機械学習の論文をスクラッチから実装しよう!」というシリーズは、機械学習で現れる数式をコードに落とすことを目的としています。論文で数式がでてくると、「これは 具体的にはどういう式なのでしょう」と思うことは多いでしょう。その数式が実際のコードで実装された形であれば、漠然としていた数式がわかりやすくなるのではないかと 考え、本シリーズを書くことにしました。本記事では、数式の実装に重点を置いてコードを書きます。本記事に含まれたコードはアルゴリズムの評価、判別などの完全実装ではなく、 むしろ機械学習のアルゴリズムを実装するにあたって参考になればなと考えています。提供しているコードは Learning-to-Rank for Lucene というオープンソースで筆者が書いたコードに基づいています。 ランキング学習 LambdaMART はランキング学習(Learning to Rank)のアルゴリズムです。ランキング学習は、情報検索において多用されており、yes か no、クラス・関連度予測ではなく、複数の文書のランキング(表示順)に基づいた学習です。例えば、以下二つの文書があるとしましょう(星の数が多いほど関連度が高い)。 文書A, 星の数:5 文書B, 星の数:4 文書C, 星の数:3 学習済みのモデルでそれぞれの文書に星の数を予測しようとしたら、以下の結果が出たとします。 文書A, 予測値:4 文書B, 予測値:2 文書C, 予測値:1 上記の予測値は、期待の星の数とは異なりますが、星の数の高い順で並ぶと、表示順が変わりません。ユーザにとっては結果の表示順が理想と全く同じです。従って、文書のランキングに基づいて学習し、学習されたモデルを文書のランキングで評価すべきではないかというイデアが生まれ、ランキング学習のアルゴリズムが開発されました。 LambdaMART さて、本題に入りましょう。LambdaMARTは、どういう機械学習のアルゴリズムかというと、勾配ブースティング回帰木(Gradient Boosted Regression Tree)のアルゴリズムです。具体的には LambdaMART はニューラルネットワークのアルゴリズム「LambdaRank」の勾配を用いて、MART(Multiple Added Regression T...