Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Elasticsearchと機械学習を
実際に連携させる
Preferred  Networks,  Inc.
2016/03/16
⾃自⼰己紹介
l  久保⽥田展⾏行行(@nobu_̲k)
–  CTO@Preferred  Networks,  Inc.  (PFN)
u  US勤務  (Preferred  Networks  America,  Inc.  in ...
前回のテーマ:機械学習で全⽂文検索索をリッチにする
l  機械学習によって検索索対象の情報を増やす
–  ⽣生データからそのままでは分からない情報を得る
l  増えた情報を検索索エンジンで活⽤用する
–  ナビゲーションの軸にする
–  全...
前回のテーマ:PFIのデモ
4
l  年年齢
–  5段階+ボット
l  性別
–  男⼥女女+ボット
l  職業
l  地域
–  今いる場所
l  情報を提供して
いないユーザの
個⼈人情報を機械
学習で推定(怖い
今回のテーマ
l  前回できなかった話
–  実際にどうやって機械学習を適⽤用すれば良良いのか
l  PFNが2016/3/14にリリースしたOSSを使って実演
5
機械学習 Elasticsearchデータソース
データをElastics...
その前に・・・
6
復復習:機械学習とは
l  経験(データ)によって賢くなるアルゴリズムの研究
–  データから知識識や⼈人間が定義するようなルールを⾃自動的に獲得する
–  ⼈人⼯工知能(AI)の分野の⼀一つ
7
学習データ
今⽇日扱う機械学習の問題設定:⽂文書分類
l  教師あり学習の⼀一種
–  ⼈人が正解を教え、機械学習のアルゴリズムがそれを元に学習する
l  よくあるタスク
–  新聞記事やブログ記事のカテゴリ推定
l  先ほどのデモでの活⽤用例例
–...
全⽂文検索索+機械学習のユースケース
l  どの企業について
つぶやいているか
l  年年齢・性別
l  ポジネガ
l  ユーザの地域
l  +固有表現抽出
–  ⼈人名
–  地名
9
全⽂文検索索+機械学習のユースケース
l  VOC向け
l  商品種別の分類
l  既存情報
–  事故内容
–  傷病内容
–  デモグラ
l  コールセンターの
対応内容の情報を、
オペレータの負担
なく増やす
10
Confidential
ツールの紹介
11
12
Lightweight Stream Processing Engine for IoT
http://sensorbee.io/
(特に)ネットワークのエッジ/フォグで
ストリームデータに対して
機械学習(特にDeep Learning...
{
"id": 123,
"age": "35",
"gender": "male",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
SensorBee™:  Stream  processing  e...
SensorBee™:  Transform
14
Camera
Vehicle
Router
Sensor
fluentd
RDBMS
Search
Engine
NoSQL
Data Sources Data DestinationsSen...
SensorBee™:  Flexibility  and  Extensibility
Camera
Vehicle
Router
Sensor
fluentd
RDBMS
Search
Engine
NoSQL
Data Sources D...
SensorBee™:  in  Deep  Intelligence  in  Motion
16
Camera
Vehicle
Router
Sensor
fluentd
RDBMS
Search
Engine
NoSQL
Data Sou...
SensorBeeその他の特徴
l  Go製
–  今は全部static  linkだけど設定ファイル+buildコマンドでカバー
–  Goのpluginパッケージ的なのができたら活⽤用の幅が広がる予定
l  Python連携のβ版あり
...
CES  2016のデモ
18
実演
19
内容
l  英語のツイートに対して年年齢と性別のラベルを振る
l  そのうち⽇日本語ツイート版のチュートリアルも⽤用意する予定
–  今⽇日はひとまず英語をターゲットに・・・
20
システム構成
21
利用規約が非デザイナーに辛い	
github.com/ChimeraCoder/anacondaをベースにした
source plugin: github.com/sensorbee/twitter/plugin
今のところ...
なにはともあれとりあえず動かしてみる
l  http://docs.sensorbee.io/en/latest/tutorial.html#using-‐‑‒machine-‐‑‒learning
–  詳しいドキュメントは全部ここに
l...
Twitter  API周り
l  Twitter  plugin  source:  https://github.com/sensorbee/twitter
23
CREATE SOURCE public_tweets TYPE twit...
Elasticsearch周り
l  デフォルトではlocalhostのin_̲forwardに向けて転送
l  fluentdからはelasticsearchプラグインでデータ投⼊入
24
CREATE SINK fluentd TYPE ...
機械学習周り
l  前回説明した機械学習の適⽤用⼿手順に沿って説明
25
復復習:機械学習を使うために必要な5ステップ
l  問題設定:バッチ/オンラインの教師あり学習による⽂文書分類
–  特定のライブラリやツールに依存しない⼀一般的な⼿手順を説明
1.  分類するラベル(カテゴリ)を決める
2.  分類対象のデ...
1.  分類するラベル(カテゴリ)を決める
l  今回⽤用意したラベルは2種類
l  age
–  10-‐‑‒19
–  20-‐‑‒29
–  30-‐‑‒39
–  40-‐‑‒49
–  50<
l  gender
–  fema...
2.  分類対象のデータを集める
l  Sample  APIからデータを沢⼭山取ってきましょう
l  SensorBeeを使っても集められる
l  SensorBeeを起動したdirのraw_̲training_̲data.jsonlに...
3.  教師データを作る
l  ⾒見見本(会場限定)
l  のようなJSONを1⾏行行1オブジェクトの形式で⽤用意
l  アノテーション(正解を付ける作業)は苦⾏行行ですので頑張りまし
ょう!!!!!
29
{
"age": "ラベル o...
4.  学習する
l  学習のステップ
–  前処理理と特徴抽出  →  特徴ベクトルを作成
–  学習処理理
30
4.  学習する:前処理理
l  それっぽい前処理理を施す
31
CREATE STREAM preprocessed_tweets AS!
SELECT RSTREAM!
filter_stop_words( -- stop_wordsの処...
4.  学習する:特徴ベクトル
l  単語の出現頻度度を重みとして利利⽤用
32
CREATE STREAM fv_tweets AS!
SELECT RSTREAM!
{!
"text": nlp_weight_tf(text_vector...
4.  学習する:モデルの作成
l  チュートリアルの中で使っているアルゴリズム:  AROW
–  オンライン線形分類アルゴリズム
–  Jubatusのjubatus_̲coreの実装をGoに移植
l  モデルはBQLのUser-‐‑‒...
5.  適⽤用する
l  学習してできあがったモデルを利利⽤用して分類する
–  データ1つ1つをオンラインで分類していくことも可能
34
CREATE STREAM labeled_tweets AS!
SELECT RSTREAM!
ju...
その他
l  機械学習のチュートリアルにより詳しい情報が!
–  http://docs.sensorbee.io/en/latest/tutorial.html#using-‐‑‒machine-‐‑‒learning
l  BQLはこち...
まとめ
36
まとめ
l  機械学習を利利⽤用すると検索索の幅が広がる
–  ⽣生データからはそのままでは分からない情報を取得する
–  ナビゲーションや集計の軸を増やす
l  SensorBeeを使うとストリームデータに機械学習を適⽤用できる
–  そ...
是⾮非使ってみてください!(スター付けてくださいw
38
https://github.com/sensorbee
http://sensorbee.io/
We're  Hiring!!
l  Deep  Learning系
–  ビジョン、⾳音声、時系列列データ、強化学習
l  データベース/ストリーム処理理系
–  ストリーム処理理のデファクトを⾃自分で切切り開きたい⼈人
–  エキスパー...
Copyright  ©  2014-‐‑‒2016
Preferred  Networks  All  Right  Reserved.
Upcoming SlideShare
Loading in …5
×

Elasticsearchと機械学習を実際に連携させる

26,409 views

Published on

SensorBeeとfluentdを使ってElasticsearchに機械学習適用後のツイートを流し込んで検索や可視化を助ける話

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Elasticsearchと機械学習を実際に連携させる

  1. 1. Elasticsearchと機械学習を 実際に連携させる Preferred  Networks,  Inc. 2016/03/16
  2. 2. ⾃自⼰己紹介 l  久保⽥田展⾏行行(@nobu_̲k) –  CTO@Preferred  Networks,  Inc.  (PFN) u  US勤務  (Preferred  Networks  America,  Inc.  in  San  Mateo) –  元々Preferred  Infrastructure  (PFI)のチーフアーキテクト u  分散全⽂文検索索レコメンドエンジンSedueの開発者 l  専⾨門 –  検索索エンジン(作る⽅方の⼈人)、データベース、分散システム l  趣味 –  ⾳音ゲー:beatmania  IIDX  SP/DP皆伝、右⽚片⼿手九段 2
  3. 3. 前回のテーマ:機械学習で全⽂文検索索をリッチにする l  機械学習によって検索索対象の情報を増やす –  ⽣生データからそのままでは分からない情報を得る l  増えた情報を検索索エンジンで活⽤用する –  ナビゲーションの軸にする –  全⽂文検索索と組み合わせてキーワード毎に集計・可視化する 3
  4. 4. 前回のテーマ:PFIのデモ 4 l  年年齢 –  5段階+ボット l  性別 –  男⼥女女+ボット l  職業 l  地域 –  今いる場所 l  情報を提供して いないユーザの 個⼈人情報を機械 学習で推定(怖い
  5. 5. 今回のテーマ l  前回できなかった話 –  実際にどうやって機械学習を適⽤用すれば良良いのか l  PFNが2016/3/14にリリースしたOSSを使って実演 5 機械学習 Elasticsearchデータソース データをElasticsearchに入れる前に 機械学習を適用し、データをリッチにする ここ実際どうすんの?
  6. 6. その前に・・・ 6
  7. 7. 復復習:機械学習とは l  経験(データ)によって賢くなるアルゴリズムの研究 –  データから知識識や⼈人間が定義するようなルールを⾃自動的に獲得する –  ⼈人⼯工知能(AI)の分野の⼀一つ 7 学習データ
  8. 8. 今⽇日扱う機械学習の問題設定:⽂文書分類 l  教師あり学習の⼀一種 –  ⼈人が正解を教え、機械学習のアルゴリズムがそれを元に学習する l  よくあるタスク –  新聞記事やブログ記事のカテゴリ推定 l  先ほどのデモでの活⽤用例例 –  年年齢や性別をラベルとして分類 u  年年齢分類、性別分類などを独⽴立立したタスクとして解いている ‒  注:年年齢を"回帰"として推定することも可能だが、今⽇日は説明しない l  機械学習を使う⼿手順なども後ほど改めて復復習説明 8
  9. 9. 全⽂文検索索+機械学習のユースケース l  どの企業について つぶやいているか l  年年齢・性別 l  ポジネガ l  ユーザの地域 l  +固有表現抽出 –  ⼈人名 –  地名 9
  10. 10. 全⽂文検索索+機械学習のユースケース l  VOC向け l  商品種別の分類 l  既存情報 –  事故内容 –  傷病内容 –  デモグラ l  コールセンターの 対応内容の情報を、 オペレータの負担 なく増やす 10
  11. 11. Confidential ツールの紹介 11
  12. 12. 12 Lightweight Stream Processing Engine for IoT http://sensorbee.io/ (特に)ネットワークのエッジ/フォグで ストリームデータに対して 機械学習(特にDeep Learning)を利用した 非構造化データ向けのETLを 低レイテンシで適用することを目的としたツール
  13. 13. { "id": 123, "age": "35", "gender": "male", "location": { "x": 252.1, "y": 179.3 }, … } SensorBee™:  Stream  processing  engine  for  IoT 13 Camera Vehicle Router Sensor fluentd RDBMS Search Engine NoSQL Data Sources Data Destinations SensorBee™ focuses on transformation of and information extraction from structured and unstructured streaming data at the edge of the network, in the Fog, and in the Cloud. Machine learning and Deep Learning perform data transformation and information extraction. SensorBee™ enriches information content and adds new value prior to data being loaded to data processing systems. ETL くらいのバランス
  14. 14. SensorBee™:  Transform 14 Camera Vehicle Router Sensor fluentd RDBMS Search Engine NoSQL Data Sources Data DestinationsSensorBee™ BQL, an SQL-like language •  Filter •  Aggregate •  Join Data processing flow by a SQL-like language BQL is designed for stream processing. It is schema-less and uses JSON as its internal data model. CREATE SOURCE camera TYPE webcam_mjpeg WITH uri="http://host:port/path/to/video"; CREATE STREAM frames AS SELECT RSTREAM snowflake_id("general_id") AS id, * FROM camera1 [RANGE 1 TUPLES]; CREATE STREAM regions AS SELECT RSTREAM id AS frame_id, snowflake_id("general_id") AS id, * FROM detect_people("frames", "detection_config_parameters") [RANGE 1 TUPLES]; CREATE STREAM regions_with_metainfo AS SELECT RSTREAM classify("age_model", image) AS age, classify("gender_model", image) AS gender, * FROM regions [RANGE 1 TUPLES]; CREATE STREAM male_average_ages AS SELECT RSTREAM avg(age) AS age FROM regions_with_metainfo [RANGE 5 MINUTES] WHERE gender = "male";
  15. 15. SensorBee™:  Flexibility  and  Extensibility Camera Vehicle Router Sensor fluentd RDBMS Search Engine NoSQL Data Sources Data DestinationsSensorBee™ Plug-in Plug-in UDF Custom functionalities are added as User Defined Functions (UDFs) and User Defined States (UDSs) of BQL, such as Deep Learning transformations. Machine learning •  Classification •  Regression •  Object recognition •  Anomaly detection Machine learning algorithms supported in DIMo are online and do not require local storage. UDS
  16. 16. SensorBee™:  in  Deep  Intelligence  in  Motion 16 Camera Vehicle Router Sensor fluentd RDBMS Search Engine NoSQL Data Sources Data DestinationsSensorBee™ Deep  Learning   DeepIntelligence
 in-Motion(DIMo) Sta-s-cs   Computer   vision   Detect/Track/ Recognize   Reinforcement   learning   Distributed/ Curriculum   Time-­‐series   RNN  /   Representa-on   Sensor   fusion   Mul--­‐modal   Feedback/Ac-on   …   Libraries Plug-in Plug-in UDF UDF DIMo provides various libraries that use machine learning to support complex data processing flow. UDS
  17. 17. SensorBeeその他の特徴 l  Go製 –  今は全部static  linkだけど設定ファイル+buildコマンドでカバー –  Goのpluginパッケージ的なのができたら活⽤用の幅が広がる予定 l  Python連携のβ版あり –  Chainer連携⽤用!社内稼働実績豊富 u  ただまだベストなinterfaceが分からないのでβ(v0)扱い l  fluentd連携 –  トリビア:fluentd-‐‑‒forwarderはライブラリとしても使える u  moriyoshiさん&stanakaさん++ l  Raspi,  Windowsサポート 17
  18. 18. CES  2016のデモ 18
  19. 19. 実演 19
  20. 20. 内容 l  英語のツイートに対して年年齢と性別のラベルを振る l  そのうち⽇日本語ツイート版のチュートリアルも⽤用意する予定 –  今⽇日はひとまず英語をターゲットに・・・ 20
  21. 21. システム構成 21 利用規約が非デザイナーに辛い github.com/ChimeraCoder/anacondaをベースにした source plugin: github.com/sensorbee/twitter/plugin 今のところとりあえずSample APIから取得可能 Extract&Transform担当 前処理&特徴抽出&機械学習 Load担当 もちろんElasticsearch以外にもLoadできる 全文検索&データ分析担当 最終的にここがないと話にならない
  22. 22. なにはともあれとりあえず動かしてみる l  http://docs.sensorbee.io/en/latest/tutorial.html#using-‐‑‒machine-‐‑‒learning –  詳しいドキュメントは全部ここに l  go  get  github.com/sensorbee/tutorial/... –  機械学習のモデル(30MBくらい)が⼊入っているのでちょっと時間がかかる l  BQLは   https://github.com/sensorbee/tutorial/blob/master/ml/config/twitter.bql 22 $ cd %GOPATH/src/github.com/sensorbee/tutorial/ml/config! # 本当はディレクトリのコピーを作ってからの法外良いんだけど手抜きして・・・! $ build_sensorbee! $ ./sensorbee run –c sensorbee.yaml! ! # 別のターミナルで! $ ./sensorbee shell –t twitter! Twitter>!
  23. 23. Twitter  API周り l  Twitter  plugin  source:  https://github.com/sensorbee/twitter 23 CREATE SOURCE public_tweets TYPE twitter_public_stream! WITH key_file = "api_key.yaml";! ! CREATE STREAM en_tweets AS! SELECT RSTREAM! "sensorbee.tweets" AS tag, id_str AS id, lang, text,! user.screen_name AS screen_name,! user.description AS description! FROM public_tweets [RANGE 1 TUPLES]! WHERE lang = "en"; Twitter Source English Tweets
  24. 24. Elasticsearch周り l  デフォルトではlocalhostのin_̲forwardに向けて転送 l  fluentdからはelasticsearchプラグインでデータ投⼊入 24 CREATE SINK fluentd TYPE fluentd;! ! INSERT INTO fluentd from labeled_tweets;! labeled_tweets fluentd SInk…
  25. 25. 機械学習周り l  前回説明した機械学習の適⽤用⼿手順に沿って説明 25
  26. 26. 復復習:機械学習を使うために必要な5ステップ l  問題設定:バッチ/オンラインの教師あり学習による⽂文書分類 –  特定のライブラリやツールに依存しない⼀一般的な⼿手順を説明 1.  分類するラベル(カテゴリ)を決める 2.  分類対象のデータを集める 3.  教師データ(正解データ)を作成する 4.  学習する 5.  適⽤用する 26
  27. 27. 1.  分類するラベル(カテゴリ)を決める l  今回⽤用意したラベルは2種類 l  age –  10-‐‑‒19 –  20-‐‑‒29 –  30-‐‑‒39 –  40-‐‑‒49 –  50< l  gender –  female –  male 27
  28. 28. 2.  分類対象のデータを集める l  Sample  APIからデータを沢⼭山取ってきましょう l  SensorBeeを使っても集められる l  SensorBeeを起動したdirのraw_̲training_̲data.jsonlに貯まる 28 twitter> CREATE STREAM en_raw_tweets AS! SELECT RSTREAM * FROM public_tweets [RANGE 1 TUPLES]! WHERE lang = "en";! twitter> CREATE SINK training_data TYPE file! WITH path = "raw_training_data.jsonl";! twitter> INSERT INTO training_data FROM en_raw_tweets;! 機械学習のチュートリアルを起動してからsensorbee shellで:
  29. 29. 3.  教師データを作る l  ⾒見見本(会場限定) l  のようなJSONを1⾏行行1オブジェクトの形式で⽤用意 l  アノテーション(正解を付ける作業)は苦⾏行行ですので頑張りまし ょう!!!!! 29 { "age": "ラベル or 空", "gender": "ラベル or 空", … TwitterのAPIのレスポンス … }
  30. 30. 4.  学習する l  学習のステップ –  前処理理と特徴抽出  →  特徴ベクトルを作成 –  学習処理理 30
  31. 31. 4.  学習する:前処理理 l  それっぽい前処理理を施す 31 CREATE STREAM preprocessed_tweets AS! SELECT RSTREAM! filter_stop_words( -- stop_wordsの処理! nlp_split( -- スペースで単語分割、↓小文字化+記号除去! nlp_to_lower(filter_punctuation_marks(text)),! " ")) AS text_vector,! filter_stop_words( -- descriptionにも同じ処理を適用! nlp_split(! nlp_to_lower(filter_punctuation_marks(description)),! " ")) AS description_vector,! *! FROM en_tweets [RANGE 1 TUPLES];! ! 例: "I wanna eat sushi!! :(" -> ["i", "wanna", "eat", "sushi"]
  32. 32. 4.  学習する:特徴ベクトル l  単語の出現頻度度を重みとして利利⽤用 32 CREATE STREAM fv_tweets AS! SELECT RSTREAM! {! "text": nlp_weight_tf(text_vector),! "description": nlp_weight_tf(description_vector)! } AS feature_vector,! tag, id, screen_name, lang, text, description! FROM preprocessed_tweets [RANGE 1 TUPLES];! "feature_vector": {! "text": {! "word1": 2,! "word2": 1,! ...! },! "description": {... 似たようなデータ ...}! }!
  33. 33. 4.  学習する:モデルの作成 l  チュートリアルの中で使っているアルゴリズム:  AROW –  オンライン線形分類アルゴリズム –  Jubatusのjubatus_̲coreの実装をGoに移植 l  モデルはBQLのUser-‐‑‒Defined  State(UDS)として実現 33 CREATE STREAM age_labeled_tweets AS! SELECT RSTREAM * FROM fv_tweets [RANGE 1 TUPLES]! WHERE age != "";! ! CREATE STATE age_model TYPE jubaclassifier_arow! WITH label_field = "age", regularization_weight = 0.001;! CREATE SINK age_model_trainer TYPE uds WITH name = "age_model";! INSERT INTO age_model_trainer FROM age_labeled_tweets;! genderも同様
  34. 34. 5.  適⽤用する l  学習してできあがったモデルを利利⽤用して分類する –  データ1つ1つをオンラインで分類していくことも可能 34 CREATE STREAM labeled_tweets AS! SELECT RSTREAM! juba_classified_label(! jubaclassify("age_model", feature_vector)) AS age,! juba_classified_label(! jubaclassify("gender_model", feature_vector)) AS gender! tag, id, screen_name, lang, text, description! FROM fv_tweets [RANGE 1 TUPLES];! jubaclassify("age_model", feature_vector) {! "male": maleラベルのスコア,! "female": femaleラベルのスコア! }
  35. 35. その他 l  機械学習のチュートリアルにより詳しい情報が! –  http://docs.sensorbee.io/en/latest/tutorial.html#using-‐‑‒machine-‐‑‒learning l  BQLはこちら –  https://github.com/sensorbee/tutorial/blob/master/ml/config/twitter.bql 35
  36. 36. まとめ 36
  37. 37. まとめ l  機械学習を利利⽤用すると検索索の幅が広がる –  ⽣生データからはそのままでは分からない情報を取得する –  ナビゲーションや集計の軸を増やす l  SensorBeeを使うとストリームデータに機械学習を適⽤用できる –  その結果をElasticsearchやデータベースに⼊入れられる u  fluentdのおかげでね! l  時代はJSON  compatibility –  BQLはJSONをネイティブに扱えるSQL-‐‑‒likeな⾔言語 –  CouchbaseもN1QLと⾔言うJSON向けのSQL-‐‑‒likeな⾔言語をサポート! 37
  38. 38. 是⾮非使ってみてください!(スター付けてくださいw 38 https://github.com/sensorbee http://sensorbee.io/
  39. 39. We're  Hiring!! l  Deep  Learning系 –  ビジョン、⾳音声、時系列列データ、強化学習 l  データベース/ストリーム処理理系 –  ストリーム処理理のデファクトを⾃自分で切切り開きたい⼈人 –  エキスパートが少ないので⾃自分がエキスパートになるしかない –  ないものは⾃自分で作るしかない・・・! 39
  40. 40. Copyright  ©  2014-‐‑‒2016 Preferred  Networks  All  Right  Reserved.

×