Developer's Summit 2016 【18-A-6】Yahoo! JAPANを支えるデータテクノロジー 〜機械学習、クラウド分散システム処理モデル〜 聴講メモ
講演資料
2/21時点で未公開。
概要
Yahooでどのように機械学習が活用されているか、とクラウドアプリケーションを表現する分散アーキテクチャとして、過去の知見を活用した試作事例を説明する。
スピーカー
- 前半はYahooの山下さん。
- 後半はYahooデジタルコムの今野さん。
詳細
ヤフオクにおける機械学習
ヤフオク
ヤフオクの深層学習
Yahooの商品カテゴリの話。
- 例えば、Macbook Airというカテゴリがある。
- これは本体を出すカテゴリ。
- 周辺機器は別カテゴリだが、周辺機器が出品されてしまう(カテゴリ違い)
- 関係ない商品が検索に出てしまうので、ユーザのモチベーション、UX低下に繋がる。
- カテゴリ違いに対し、人による検知を行うと、精度が高いが量、スピードに限界がある。
- そこで機械学習の導入を考えた。
- 例えば、Macbook Airというカテゴリがある。
機械学習の限界は色々ある。
- 未知のパターンに対応できない。
- 100%の正確性実現は難しい。
- などなど。つまり銀の弾丸ではない。
そこで、人と機械学習のハイブリッドを考えた。
- 人が判断するが、判断の順序を機械学習が提示する。
- 具体的には、カテゴリ違いの確率が高いものから優先的に提示し、その順序で人が判断していく。
カテゴリ違いの検知モデル
検知方法にもいろいろある。
- 商品タイトルベース
- タイトルの文言からカテゴリ違いを検出する。
- 自然言語の自由度に依存して検知が左右されてしまう。
- 一定の精度はあるが、限界が早い段階で来る。
- 商品タイトルベース
そこで、単語に加えて画像を使用している。
学習データは2万件。
- よい学習データを揃えるのが難しいらしい。
- CaffeV1.0rc2
Cuda7.5 GPUサーバはオンプレミス。
例えば、出品画像がノートPCである確率を計算させる。
ユーザによってはカオスな画像を上げる場合もあるが、関係ない画像は1%以下の確率と計算される。
この確率だけではなく、過去のカテゴリ違いがあるユーザなど、他のモデルを参照してゴニョゴニョして決定している
課題
- やり始めたばかりなので課題はある。今後取り組みたいこと。
- 学習データを高精度、大量、継続的に増加させる仕組み
- 精度の向上、新しいパターンへの対応
- ヤフオクには様々なものが出品される。
- 新しい物が出てくると、新しいパターンが入ってきやすい。
- 対応が非常に重要な所
- ヤフオクには様々なものが出品される。
分散表現
ヤフオクには『人気+新着順』という謎のソート項目がある。
重要なFeatureは単語、特にタイトル中の単語。
そこで分散表現を用いることにした。
- ある単語に対して複数の要素で表現する。
- 意味が近い表現を近いベクトルで表現できる。
分散表現の対義語は局所表現。
- ある単語に対して単一のベクトルだけが対応する。
- 単語を単にエンコードしただけの言語表現。
分散表現を使うと、単語をクラスタリングできる。
分散表現モデル
- 学習コーパスは商品タイトル。
- 5000万件ぐらい
- 学習結果が単語の供給頻度に依存するので、重複単語を排除する必要がある。
- 単語数は3億8千万。
- Vocabulary 40万。
- Skip-gramとNegative Samplingをモデルとして使用。
- 5000万件ぐらい
今後はSkip-gram以降の分散表現のモデルを使っていきたい。
- 重複タイトルの判断精度を上げたい。
- タイトルを変えてモデルをすり抜けるユーザがいるので、それに対処するため。
- クラスタリング精度を上げたい。
- ディクリレ過程混合正規分布などの採用も検討している。
クラウド分散システム処理モデルの課題と展望
現状
現在のクラウド分散システムにはいくつかのパターン化されたモデルが含まれている。
協調サービス
- 複数ノードが強調して目的を達成するモデル。
- パターン
- 共有メモリ方式。
- 生産者消費者パターン。
リソース管理
- 分散システムのリソース管理機能。
- パターン
- マスターワーカー。
アプリケーションフレームワーク
- アプリケーションを書くための基盤。
- パターン
- データフローなど。
歴史に学ぼう
- 分散アーキテクチャを適切に表現する方法。
クラウドとは要件が違うと言われるが、以下の様な過去の知見を使えるのではないか。
-
- 1980年代、モノシリックカーネルへのアンチテーゼとして提唱された。
- カーネルを小さく分割
- 最小限機能をKernelModeで実行する。
- 高信頼性、単一責務、可変性、柔軟性がメリット。
- 今日のマイクロサービスとの類似性がある。
データフロー
リアクティブシステム
- 外部環境からの入力に対して連続反応するもの。
-
現状の課題を解決する試作
現状のアーキテクチャを見ていくと、分散クラウドにはモノリシック構築されており、以下の問題があった。
- 再利用性が低い。
- 拡張性が低い。
- 特定の言語に依存している。
- 機能追加時に全体を再起動しなければならない。
- 関数、モジュールが長くなる傾向があり、可読性が低い。
- ブラックボックス化の温床。
そこで、以下を志向した試作を行ってみた。
- モノリシックからマイクロに
- 静的から動的に
- ホワイトボックス的な開発、運用
- 可読性、透過性の重視
マイクロ協調サービスをコンセプトとした。
- 各ノードにはそれぞれ限定した機能を持たせ、RPCで他ノードの機能を呼ぶ。
- メソッド、ルート、トリガーの3つで構成する。
- データフロー上にこの3つをマッピングする。
実装方式
ラズパイでクラスタを作った。
- コアとスクリプト間のオーバヘッドが心配だった。
- が、実際はオーバヘッドは問題にならなかった。
- コアとスクリプト間のオーバヘッドが心配だった。