dimeizaのブログ

興味のある技術(IoT/VR/Smart Speaker)とか、資格試験の話とか、日常で出会ったTechな話について書いています。

Developer's Summit 2016 【18-A-6】Yahoo! JAPANを支えるデータテクノロジー 〜機械学習、クラウド分散システム処理モデル〜 聴講メモ

講演資料

2/21時点で未公開。

概要

 Yahooでどのように機械学習が活用されているか、とクラウドアプリケーションを表現する分散アーキテクチャとして、過去の知見を活用した試作事例を説明する。

スピーカー

詳細

ヤフオクにおける機械学習

ヤフオク

  • 1999年ヤフオクサービス開始
    • 常時3900万個の出品。
      • 1秒あたり273個。
    • ユーザ数1671万人。

ヤフオクの深層学習

  • Yahooの商品カテゴリの話。

    • 例えば、Macbook Airというカテゴリがある。
      • これは本体を出すカテゴリ。
      • 周辺機器は別カテゴリだが、周辺機器が出品されてしまう(カテゴリ違い)
        • 関係ない商品が検索に出てしまうので、ユーザのモチベーション、UX低下に繋がる。
    • カテゴリ違いに対し、人による検知を行うと、精度が高いが量、スピードに限界がある。
  • 機械学習の限界は色々ある。

    • 未知のパターンに対応できない。
    • 100%の正確性実現は難しい。
    • などなど。つまり銀の弾丸ではない。
  • そこで、人と機械学習のハイブリッドを考えた。

    • 人が判断するが、判断の順序を機械学習が提示する。
    • 具体的には、カテゴリ違いの確率が高いものから優先的に提示し、その順序で人が判断していく。

カテゴリ違いの検知モデル

  • 検知方法にもいろいろある。

    • 商品タイトルベース
      • タイトルの文言からカテゴリ違いを検出する。
      • 自然言語の自由度に依存して検知が左右されてしまう。
      • 一定の精度はあるが、限界が早い段階で来る。
  • そこで、単語に加えて画像を使用している。

    • 画像に写っている物体を認識し深層学習。
    • 深層学習方法にもいろいろあるが、CNNがスタンダードなのでヤフオクでも使っている。
  • 学習データは2万件。

    • よい学習データを揃えるのが難しいらしい。
  • CaffeV1.0rc2
  • Cuda7.5 GPUサーバはオンプレミス。

  • 例えば、出品画像がノートPCである確率を計算させる。

    • ユーザによってはカオスな画像を上げる場合もあるが、関係ない画像は1%以下の確率と計算される。

    • この確率だけではなく、過去のカテゴリ違いがあるユーザなど、他のモデルを参照してゴニョゴニョして決定している

課題

  • やり始めたばかりなので課題はある。今後取り組みたいこと。
    • 学習データを高精度、大量、継続的に増加させる仕組み
    • 精度の向上、新しいパターンへの対応
      • ヤフオクには様々なものが出品される。
        • 新しい物が出てくると、新しいパターンが入ってきやすい。
        • 対応が非常に重要な所

分散表現

  • ヤフオクには『人気+新着順』という謎のソート項目がある。

    • 実はこれ、は機械学習でランク付けしている。
    • CTR(詳細画面への流入確率),CVR(入札確率)を最大化するようにモデル化している。
  • 重要なFeatureは単語、特にタイトル中の単語。

    • 表記揺れや同義語が課題。
      • 表記ゆれは正規化で対応。
      • 同義語については同義語辞書を作っている。
        • が、同義語辞書の整備は人手なのでコストがかかる。
        • 商品ドメインが多岐にわたるので、同義語の辞書のドメインも多い。
        • 計算で求められないか。
  • そこで分散表現を用いることにした。

    • ある単語に対して複数の要素で表現する。
    • 意味が近い表現を近いベクトルで表現できる。
  • 分散表現の対義語は局所表現。

    • ある単語に対して単一のベクトルだけが対応する。
    • 単語を単にエンコードしただけの言語表現。
  • 分散表現を使うと、単語をクラスタリングできる。

分散表現モデル

  • 学習コーパスは商品タイトル。
    • 5000万件ぐらい
      • 学習結果が単語の供給頻度に依存するので、重複単語を排除する必要がある。
    • 単語数は3億8千万。
    • Vocabulary 40万。
    • Skip-gramとNegative Samplingをモデルとして使用。
  • クラスタリング

  • 今後はSkip-gram以降の分散表現のモデルを使っていきたい。

  • 重複タイトルの判断精度を上げたい。
    • タイトルを変えてモデルをすり抜けるユーザがいるので、それに対処するため。
  • クラスタリング精度を上げたい。
    • ディクリレ過程混合正規分布などの採用も検討している。

クラウド分散システム処理モデルの課題と展望

現状

  • 現在のクラウド分散システムにはいくつかのパターン化されたモデルが含まれている。

  • 協調サービス

    • 複数ノードが強調して目的を達成するモデル。
    • パターン
      • 共有メモリ方式。
      • 生産者消費者パターン。
  • リソース管理

    • 分散システムのリソース管理機能。
    • パターン
      • マスターワーカー。
  • アプリケーションフレームワーク

    • アプリケーションを書くための基盤。
    • パターン
      • データフローなど。

歴史に学ぼう

  • 分散アーキテクチャを適切に表現する方法。
  • クラウドとは要件が違うと言われるが、以下の様な過去の知見を使えるのではないか。

    • マイクロカーネル

      • 1980年代、モノシリックカーネルへのアンチテーゼとして提唱された。
      • カーネルを小さく分割
      • 最小限機能をKernelModeで実行する。
      • 高信頼性、単一責務、可変性、柔軟性がメリット。
      • 今日のマイクロサービスとの類似性がある。
    • データフロー

      • システムをノードとパスによるグラフ構造で表現する。
      • 並行性や高抽象性を保った記述が可能。
      • 最もメジャーなデータフロー実装はUNIXパイプ。
      • 有効非巡回グラフ(DAG、閉路のないグラフ)。
    • リアクティブシステム

      • 外部環境からの入力に対して連続反応するもの。

現状の課題を解決する試作

  • 現状のアーキテクチャを見ていくと、分散クラウドにはモノリシック構築されており、以下の問題があった。

    • 再利用性が低い。
    • 拡張性が低い。
    • 特定の言語に依存している。
    • 機能追加時に全体を再起動しなければならない。
    • 関数、モジュールが長くなる傾向があり、可読性が低い。
  • そこで、以下を志向した試作を行ってみた。

    • モノリシックからマイクロに
    • 静的から動的に
    • ホワイトボックス的な開発、運用
    • 可読性、透過性の重視
  • マイクロ協調サービスをコンセプトとした。

    • 各ノードにはそれぞれ限定した機能を持たせ、RPCで他ノードの機能を呼ぶ。
    • メソッド、ルート、トリガーの3つで構成する。
  • 実装方式

  • ラズパイでクラスタを作った。

    • コアとスクリプト間のオーバヘッドが心配だった。
      • が、実際はオーバヘッドは問題にならなかった。