SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2016】セッションレポート(PR)

【デブサミ2016】18-A-6レポート
Yahoo! JAPANを支えるデータテクノロジー ~ 機械学習、クラウド分散システム処理モデル

  • このエントリーをはてなブックマークに追加

 本セッションでは、Yahoo! JAPANを支える2つの代表的なデータテクノロジーが紹介された。前半はヤフーのサービスの機能改善を行っている機械学習について、ヤフオク!カンパニー ヤフオク!開発本部 サイエンス部の山下勝司氏が説明。常時3900万個の出品があるヤフオクでは、深層学習を利用した画像処理や分散表現を用いて機能改善を実施しているという。その実例を紹介した。後半はクラウド分散システム処理モデルについて、データ&サイエンスソリューション統括本部 データインフラ本部 開発3部の今野賢氏が説明。データ分散モデルの現状と課題、そしてそれらを解決する理想のデザインモデルの実装例を紹介した。

  • このエントリーをはてなブックマークに追加
ヤフー ヤフオク!カンパニー ヤフオク!開発本部 サイエンス部 山下勝司氏
ヤフー ヤフオク!カンパニー ヤフオク!開発本部 サイエンス部 山下勝司氏
同社 データ&サイエンスソリューション統括本部 データインフラ本部 開発3部 今野賢氏
同社 データ&サイエンスソリューション統括本部 データインフラ本部 開発3部 今野賢氏

カテゴリー違いは人が判断、その順序を機械学習が決定

 最初に登壇したのは、ヤフオク!カンパニー所属で、ヤフオク!の機械学習を担当している山下氏。「やまかつと呼んでほしい」と会場に呼びかけ、セッションはスタートした。ヤフオク!は1999年にサービスが開始された日本最大級のインターネットオークションサイトだ。「出品数は常時3900万個。これは1秒当たりに換算すると273個となる」と山下氏。スマホユーザー数も非常に多く、2015年4月のデータで、PCユーザーが約1117万人、スマートフォンユーザー数は約1671万人。「これは昨年の数字。スマートフォンユーザー数はもっと伸びてきていると思う」と山下氏は説明する。

 ヤフオク!では解決したい課題があるという。それはカテゴリー違いの出品をいかになくすかということ。例えば「MacBook Air」というカテゴリーで検索すると、本来、このカテゴリーではMacBook Airは本体だけが該当するのだが、「別カテゴリーである周辺機器やパーツも登場してきてしまうことがある」と山下氏は語る。「カテゴリー違いはユーザビリティを下げてしまう。だからこそカテゴリー違いを検知することが大切」と山下氏。

 検知の方法の第一は人によるもの。これは高い精度で検知できるが、さばく量やスピードに限界がある。そこで利用するのが機械学習である。機械学習では過去の情報から学習するため、未知のパターンが表れた場合、検知の精度が低くなる。そして基本的に機械学習は100%の精度を達成できないなど、「機械学習は銀の弾丸ではない。向き不向きがあり、ツールとして適切に使う必要がある」と山下氏は説明する。

 そこでヤフオク!では人が判断し、その判断する順序を決定するところに機械学習を用いるというハイブリッド手法でカテゴリー違いの検知を行っている。この手法を採用することで、人、機械学習双方のメリットが享受できるからだ。

 カテゴリー違いの検知モデルとしては、まず商品タイトルの利用が考えられる。しかしながら、自然言語処理だと判断が付きかねるタイトルがあるため限界がある。そこで「単語に加え、画像も利用する」方法を採用。つまり「MacBook Air」であれば、本体が写っている写真だけをOKとするのである。この画像に写っている物体を認識するところに「深層学習を利用している」と山下氏は説明する。

 深層学習にもいろいろな手法があるが、ヤフオク!で採用しているのが、CNN(Convolutional Neural Network)である。「CNNによる物体認識の精度は人を超える」と山下氏はシベリアンハスキーとエスキモードッグの画像を見せてその精度を紹介した。

 物体認識の学習データは、ヤフオク!の過去の出品画像を基にしており、その数、約2万件。「これはまだ少ない」と山下氏は言う。

 実際にノートPCである確率を出力すると、キレイな画像では約8割の確率で判別できたという。「あくまでも人が最終的に判断する順序のための識別。確率が低い順に見ていき判断することになる」と山下氏。今後は「学習データを高精度、大量、継続的に増加させる仕組みの構築、新しいパターンへの対応など精度の向上に努めていきたい」と意気込む。

物体認識を利用し、目視チェックの順序を決める
物体認識を利用し、目視チェックの順序を決める

分散表現を利用し、検索ランキングを実現

 続いて山下氏は分散表現を利用した検索ランキングについて紹介。検索ランキングではCTR(商品詳細画面へ流入する確率)、CVR(その後に入札する確率)などを最大化するモデルをつくっている。検索ランキングでは多くの特徴を利用しているが、その1つが単語で、「特にタイトル中の単語を重視している」と山下氏は語る。

 しかし単語を特徴に利用した場合には、表記ゆれや同義語があった場合に課題となり、一般的には正規化や同義語辞書を作成することで対応する。だが「同義語辞書の整備には人手が必要なので、コストがかかるという問題がある」と山下氏は指摘する。ヤフオク!の商品ドメインが多岐に渡っているため、同義語辞書の単語数も莫大となり、高コストになる。

 そこで計算によって求めるために利用するのが分散表現というわけだ。例えばサッカーとフットボールは同義語となる。これを分散表現にすると近いベクトルで表される。そこで単語の分散表現を使ってクラスタリングし、意味が近い単語群を同一クラスタにするというわけだ。学習コーパスは商品タイトル、約5000万件の商品数(重複を除外)、単語数は約3億8000万、Vocabulary(ユニークな単語)は約40万。モデルはk-means、距離はコサイン類似度を使ってクラスタリングを行い、商品タイトルを置き換えていくということを行っている。

分散表現では意味が近い表現は近いベクトルとなる
分散表現では意味が近い表現は近いベクトルとなる

 分散表現は発展が著しいので、今後はskip-gram以降の分散表現のモデルを利用していく予定だという。「重複タイトルの判断精度、クラスタリング精度を今後も向上させていきたい」こう語り、山下氏のセッションは終了。

分散処理モデルの課題解決を歴史から探る

 続いて登壇したのは、データ&サイエンスソリューション統括本部 データインフラ本部のKVSチームに所属し、主にCassandra関連の開発と運用を担当している今野氏。セッションタイトルは「分散システム処理モデルの課題と展望」。

 クラウドアプリケーションの構築方法は「協調サービス」「リソース管理サービス」「アプリケーションフレームワーク」という大きく3種類の分散処理モデル上に構築されているという。

 分散処理モデルの課題の一つは「モデルが乱立していることだ」と今野氏は指摘する。乱立して困るのは、どれを選べばよいのか判断に迷うこと。そのほかにも、クラスタの構築や利用効率、ソフトウェア試算の継承、知識、経験の陳腐化などの課題があると言う。クラスタの利用効率についてはリソース管理などによる効率化が使えるのではと、今野氏は提案する。

 例えばリソース管理の効率化はスーパーコンピュータの世界ではジョブ管理と呼ばれ、解決策は昔からある。クラウド環境と要件は違うとはいえ、「昔の技術を活用してシステムを作れないかといろいろ考えている」と今野氏は説明する。

 例えば1980年代に登場したMicrokernel。これはモノリシックなカーネルの大規模化、柔軟性、信頼性、安全性などの問題を背景に発展した技術だ。特徴はカーネルを小さく分割して構成し、最小限のモジュールのみをカーネルモードで実行する。「カーネルとプロセスが分離しているので、高信頼性が保てること。単位責務、疎結合性により、理解度やデバッグ効率が高いことなどのメリットがある」と今野氏は説明する。

マイクロカーネルの利点
マイクロカーネルの利点

 現在、マイクロサービスが流行しているが、これはモノリシックなサービスを、複数の小さな集合体として構成する手法で「Microkernelに似ていると思う」と今野氏は言う。

 次に1960年代から登場したDataflow。これは電子回路の記述言語として運用された技術で、そのメリットは並行性が可能になることと抽象度が高いことである。そのため「ノードの処理はどんな言語でも実装でき、位置透過性もある」と今野氏は説明する。

 続いてDataflowの実装モデルについても紹介。代表的なのはUNIXパイプで、大きな処理を実現する手法であり、これも実装するプログラミング言語は問われない。

モノリシックからマイクロに、静的から動的な仕組みを構築し、課題を解決

 分散アプリケーションの課題の第一はモノリシックな構築であること。現在、分散アプリケーションはモノリシックな構築となっている。モノリシックな課題は、既存資産が移行できず陳腐化する場合もあるということ。しかも流用が難しく、単一のプログラミング言語に限定されるなど拡張性に乏しい。また動的な機能追加や変更の度に再起動が必要になったり、プログラムの構造の理解が難しく、ブラックボックス的な運用になってしまったりするという。

 そこで今野氏は「モノリシックからマイクロに、静的から動的に」分散フレームワークの改善を提案。つまり分散アプリケーションをモジュール単位で構築し、既存資産を移行できる形にし、再利用性を高める。また、いろいろな言語で実装できるようにするほか、動的な機能追加や変更を可能にして、再起動の必要性をなくし、ホワイトボックス的な運用にするという提案である。

 これを実現する基本コンセプトとして採用したのが、MicrokernelとDataflowに着想を得た「マイクロ協調サービス」だ。各クラスタは複数の基本処理エンジンから成るノードから構成。ノード自身は限定された機能しか持っておらず、その他の機能はユーザーが動的プログラミング言語でメソッドを作成して追加していくのである。動的なノードにすることで、多くのプログラミング言語に対応。自律的なノードで外部イベントだけではなく、内部イベントの定義も可能にする。

 実装についてはオープンスタンダードな技術のみで実装。「JSON-RPC over HTTPを拡張した」と今野氏は語る。またコアエンジンはC言語で実装。バインディング言語は最終的にはPythonやLuaあたりが本命になりそうだという。

 Yahoo! Cloud Serving Benchmark(YSCB)によって実際に評価したものが下図のグラフだ。「動的スクリプト言語による性能劣化は想定範囲内だった」と語る。今野氏は最後に「最終的にエンジン実装はC++もしくはGo言語+C言語で、Cコア部の比率を調整するのが良いと思う」とまとめ、セッションを締めた。

YCSBによる評価結果
YCSBによる評価結果

お問い合わせ

 ヤフー株式会社

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9309 2016/04/01 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング