Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
cyberagent
PDF, PPTX
13,145 views
Amebaにおけるレコメンデーションシステムの紹介
2016年7月25日開催 「夏真っ盛り!Spark + Python + Data Science祭り」
Engineering
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 27
2
/ 27
3
/ 27
4
/ 27
5
/ 27
6
/ 27
7
/ 27
8
/ 27
9
/ 27
10
/ 27
11
/ 27
12
/ 27
13
/ 27
14
/ 27
15
/ 27
16
/ 27
17
/ 27
18
/ 27
19
/ 27
20
/ 27
21
/ 27
22
/ 27
23
/ 27
24
/ 27
25
/ 27
26
/ 27
27
/ 27
More Related Content
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
PDF
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
PDF
Marp Tutorial
by
Rui Watanabe
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
by
Yahoo!デベロッパーネットワーク
PDF
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
by
虎の穴 開発室
PDF
マルチコアを用いた画像処理
by
Norishige Fukushima
PDF
暗号技術の実装と数学
by
MITSUNARI Shigeo
PDF
hpingで作るパケット
by
Takaaki Hoyo
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
Marp Tutorial
by
Rui Watanabe
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
by
Yahoo!デベロッパーネットワーク
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
by
虎の穴 開発室
マルチコアを用いた画像処理
by
Norishige Fukushima
暗号技術の実装と数学
by
MITSUNARI Shigeo
hpingで作るパケット
by
Takaaki Hoyo
What's hot
PDF
PWNの超入門 大和セキュリティ神戸 2018-03-25
by
Isaac Mathis
PDF
目grep入門 +解説
by
murachue
PDF
ウェーブレット木の世界
by
Preferred Networks
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
PPTX
トランザクションをSerializableにする4つの方法
by
Kumazaki Hiroki
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
by
NTT DATA Technology & Innovation
PDF
Linux女子部 systemd徹底入門
by
Etsuji Nakai
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
PDF
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
by
Yahoo!デベロッパーネットワーク
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
by
NTT DATA Technology & Innovation
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
by
NTT DATA OSS Professional Services
PPTX
DockerコンテナでGitを使う
by
Kazuhiro Suga
PDF
AWS Elemental MediaConvert で動画変換
by
虎の穴 開発室
PDF
協調フィルタリング入門
by
hoxo_m
PDF
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
by
株式会社MonotaRO Tech Team
PDF
DeNAの大規模ライブ配信基盤を支える技術
by
DeNA
PDF
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
by
Shohei Okada
PWNの超入門 大和セキュリティ神戸 2018-03-25
by
Isaac Mathis
目grep入門 +解説
by
murachue
ウェーブレット木の世界
by
Preferred Networks
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
トランザクションをSerializableにする4つの方法
by
Kumazaki Hiroki
分散システムについて語らせてくれ
by
Kumazaki Hiroki
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
by
NTT DATA Technology & Innovation
Linux女子部 systemd徹底入門
by
Etsuji Nakai
マイクロにしすぎた結果がこれだよ!
by
mosa siru
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
by
Yahoo!デベロッパーネットワーク
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
by
NTT DATA Technology & Innovation
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
by
NTT DATA OSS Professional Services
DockerコンテナでGitを使う
by
Kazuhiro Suga
AWS Elemental MediaConvert で動画変換
by
虎の穴 開発室
協調フィルタリング入門
by
hoxo_m
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
by
株式会社MonotaRO Tech Team
DeNAの大規模ライブ配信基盤を支える技術
by
DeNA
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
by
Shohei Okada
Viewers also liked
PDF
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
by
Nagato Kasaki
PDF
広告におけるビッグデータの分析事例
by
Ken Takao
PDF
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
by
Insight Technology, Inc.
PDF
サラリーマンのための計算社会科学
by
Masanori Takano
PDF
How Do Newcomers Blend into a Group?: Study on a Social Network Game
by
Masanori Takano
PDF
How to work Tableau x Google Cloud Platform in CyberAgent AdTech Studio
by
Ken Takao
PDF
データにまつわるWeb業界の仕事について
by
Masanori Takano
PDF
データファースト開発
by
Katsunori Kanda
PDF
ソーシャル系Webサービスのデータを用いた社会科学 資料
by
Masanori Takano
PDF
社会関係の強さに基づく社会的グルーミング戦略の適応性
by
Masanori Takano
PDF
MapR Hadoop M7 in CyberAgent AdTech Studio
by
Ken Takao
PDF
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
by
Cloudera Japan
PDF
最新版Hadoopクラスタを運用して得られたもの
by
cyberagent
PPTX
AbemaTV モバイルアプリの開発体制と開発プロセスの話
by
Yuji Hato
PDF
AbemaTV デザインのBefore & After
by
Shunsuke Matsumoto
PPTX
Pythonで入門するApache Spark at PyCon2016
by
Tatsuya Atsumi
PPTX
SEGA : Growth hacking by Spark ML for Mobile games
by
DataWorks Summit/Hadoop Summit
PDF
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
by
Yahoo!デベロッパーネットワーク
PPTX
Case Study: OLAP usability on Spark and Hadoop
by
DataWorks Summit/Hadoop Summit
PPTX
データドリブン企業におけるHadoop基盤とETL -niconicoでの実践例-
by
Makoto SHIMURA
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
by
Nagato Kasaki
広告におけるビッグデータの分析事例
by
Ken Takao
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
by
Insight Technology, Inc.
サラリーマンのための計算社会科学
by
Masanori Takano
How Do Newcomers Blend into a Group?: Study on a Social Network Game
by
Masanori Takano
How to work Tableau x Google Cloud Platform in CyberAgent AdTech Studio
by
Ken Takao
データにまつわるWeb業界の仕事について
by
Masanori Takano
データファースト開発
by
Katsunori Kanda
ソーシャル系Webサービスのデータを用いた社会科学 資料
by
Masanori Takano
社会関係の強さに基づく社会的グルーミング戦略の適応性
by
Masanori Takano
MapR Hadoop M7 in CyberAgent AdTech Studio
by
Ken Takao
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
by
Cloudera Japan
最新版Hadoopクラスタを運用して得られたもの
by
cyberagent
AbemaTV モバイルアプリの開発体制と開発プロセスの話
by
Yuji Hato
AbemaTV デザインのBefore & After
by
Shunsuke Matsumoto
Pythonで入門するApache Spark at PyCon2016
by
Tatsuya Atsumi
SEGA : Growth hacking by Spark ML for Mobile games
by
DataWorks Summit/Hadoop Summit
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
by
Yahoo!デベロッパーネットワーク
Case Study: OLAP usability on Spark and Hadoop
by
DataWorks Summit/Hadoop Summit
データドリブン企業におけるHadoop基盤とETL -niconicoでの実践例-
by
Makoto SHIMURA
Similar to Amebaにおけるレコメンデーションシステムの紹介
ODP
Programming Collective Intelligence 100111
by
Sho Shimauchi
PDF
ゼロから始めるレコメンダシステム
by
Kazuaki Tanida
PDF
SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~
by
Naoto Tamiya
PDF
マイニング探検会#09 情報レコメンデーションとは
by
Yoji Kiyota
PDF
レコメンデーション(協調フィルタリング)の基礎
by
Katsuhiro Takata
PDF
レコメンドアルゴリズムの基礎と「B-dash」におけるシステム構成の紹介
by
Takeshi Mikami
PDF
情報推薦システム入門:講義スライド
by
Kenta Oku
PDF
JOI夏季セミ2014、集合知プログラミング_2、5
by
Kai Katsumata
PPTX
MultiRec: A Multi-Relational Approach for Unique Item Recommendation in Aucti...
by
harmonylab
PDF
協調フィルタリング with Mahout
by
Katsuhiro Takata
PDF
20130313 OSCA Hadoopセミナー
by
Ichiro Fukuda
PDF
Collaborativefilteringwith r
by
Teito Nakagawa
PPTX
レコメンド研究のあれこれ
by
Masahiro Sato
PPTX
Recommend system
by
ilove2dgirl
PPT
Big data解析ビジネス
by
Mie Mori
PDF
InfoTalk springbreak_2012
by
Hiroshi Bunya
PDF
20110517 okuyama ソーシャルメディアが育てた技術勉強会
by
Takahiro Iwase
PPTX
WebDB Forum 2015 pinterest webpagever
by
helro
PDF
Introduction to Recommender Systems 2012.1.30 Zansa #3
by
Atsushi KOMIYA
PDF
MP Joinを使った類似データ抽出
by
JAVA DM
Programming Collective Intelligence 100111
by
Sho Shimauchi
ゼロから始めるレコメンダシステム
by
Kazuaki Tanida
SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~
by
Naoto Tamiya
マイニング探検会#09 情報レコメンデーションとは
by
Yoji Kiyota
レコメンデーション(協調フィルタリング)の基礎
by
Katsuhiro Takata
レコメンドアルゴリズムの基礎と「B-dash」におけるシステム構成の紹介
by
Takeshi Mikami
情報推薦システム入門:講義スライド
by
Kenta Oku
JOI夏季セミ2014、集合知プログラミング_2、5
by
Kai Katsumata
MultiRec: A Multi-Relational Approach for Unique Item Recommendation in Aucti...
by
harmonylab
協調フィルタリング with Mahout
by
Katsuhiro Takata
20130313 OSCA Hadoopセミナー
by
Ichiro Fukuda
Collaborativefilteringwith r
by
Teito Nakagawa
レコメンド研究のあれこれ
by
Masahiro Sato
Recommend system
by
ilove2dgirl
Big data解析ビジネス
by
Mie Mori
InfoTalk springbreak_2012
by
Hiroshi Bunya
20110517 okuyama ソーシャルメディアが育てた技術勉強会
by
Takahiro Iwase
WebDB Forum 2015 pinterest webpagever
by
helro
Introduction to Recommender Systems 2012.1.30 Zansa #3
by
Atsushi KOMIYA
MP Joinを使った類似データ抽出
by
JAVA DM
More from cyberagent
PDF
WWW2019で見るモバイルコンピューティングの技術と動向 山本悠ニ
by
cyberagent
PDF
Web フィルタリング最前線: 「「検閲回避」回避」 角田孝昭
by
cyberagent
PDF
WebにおけるHuman Dynamics 武内慎
by
cyberagent
PDF
Webと経済学 數見拓朗
by
cyberagent
PDF
Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み
by
cyberagent
PDF
継続的な開発スタイル AbemaTVのiOSアプリを週1でリリースしている話
by
cyberagent
PDF
AbemaTVにおける推薦システム
by
cyberagent
PDF
AbemaTV レコメンド開発エンジニアによる RecSys 2018 参加レポート
by
cyberagent
PDF
機械学習エンジニアを見せたAWSの再:発明とは? 〜re:Invent 2018 参加レポート〜
by
cyberagent
PPTX
インターネットテレビ局「AbemaTV」プロダクトの変遷
by
cyberagent
PDF
番組宣伝に関するAbemaTV分析事例の紹介
by
cyberagent
PDF
WWW2018 論文読み会 Webと経済学
by
cyberagent
PDF
WWW2018 論文読み会 WebにおけるHuman Dynamics
by
cyberagent
PDF
WWW2018 論文読み会 Web Search and Mining
by
cyberagent
PDF
サイバーエージェントの機械学習エンジニアが体験したGoogle I/O 2018
by
cyberagent
PDF
ログ解析基盤におけるストリーム処理パイプラインについて
by
cyberagent
PDF
Orion an integrated multimedia content moderation system for web services
by
cyberagent
PDF
Orion an integrated multimedia content moderation system for web services
by
cyberagent
PDF
「これ危ない設定じゃないでしょうか」とヒアリングするための仕組み @AWS Summit Tokyo 2018
by
cyberagent
PPTX
"マルチメディア機械学習" の取り組み
by
cyberagent
WWW2019で見るモバイルコンピューティングの技術と動向 山本悠ニ
by
cyberagent
Web フィルタリング最前線: 「「検閲回避」回避」 角田孝昭
by
cyberagent
WebにおけるHuman Dynamics 武内慎
by
cyberagent
Webと経済学 數見拓朗
by
cyberagent
Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み
by
cyberagent
継続的な開発スタイル AbemaTVのiOSアプリを週1でリリースしている話
by
cyberagent
AbemaTVにおける推薦システム
by
cyberagent
AbemaTV レコメンド開発エンジニアによる RecSys 2018 参加レポート
by
cyberagent
機械学習エンジニアを見せたAWSの再:発明とは? 〜re:Invent 2018 参加レポート〜
by
cyberagent
インターネットテレビ局「AbemaTV」プロダクトの変遷
by
cyberagent
番組宣伝に関するAbemaTV分析事例の紹介
by
cyberagent
WWW2018 論文読み会 Webと経済学
by
cyberagent
WWW2018 論文読み会 WebにおけるHuman Dynamics
by
cyberagent
WWW2018 論文読み会 Web Search and Mining
by
cyberagent
サイバーエージェントの機械学習エンジニアが体験したGoogle I/O 2018
by
cyberagent
ログ解析基盤におけるストリーム処理パイプラインについて
by
cyberagent
Orion an integrated multimedia content moderation system for web services
by
cyberagent
Orion an integrated multimedia content moderation system for web services
by
cyberagent
「これ危ない設定じゃないでしょうか」とヒアリングするための仕組み @AWS Summit Tokyo 2018
by
cyberagent
"マルチメディア機械学習" の取り組み
by
cyberagent
Amebaにおけるレコメンデーションシステムの紹介
1.
Amebaにおける レコメンデーションシステムの紹介 2016 July 25 CyberAgent,
Inc. All Rights Reserved
2.
内藤 遥(ないとう よう) ●2012年サイバーエージェント入社 秋葉原ラボ所属 ●やっていること 推薦基盤や検索基盤の開発、運用 ●趣味 カラオケ、炭水化物ダイエット
3.
タイトル TITLE事業内容 インターネット広告事業 メディア事業
ゲーム事業 広告代理事業 自社広告商品 (アドテク) など など など
4.
本日のアジェンダ ①レコメンデーションシステムの概要について ②Item-to-Item Collaborative FilteringのSpark実装について
5.
本日のアジェンダ ①レコメンデーションシステムの概要について ②Item-to-Item Collaborative FilteringのSpark実装について
6.
秋葉原ラボが提供しているレコメンデーションシステム ● A.J.A. Recommend
Engine ○ 外部メディア向けのテキスト類似度を基にしたレコメンド ● Phoenix(プロジェクト名) ○ 協調フィルタリングによるレコメンドがメイン ○ Spark を使って推薦結果を作成 ● バトルレコメンド ○ 各種ゲームのギルドのバトルなどのマッチングをするシステム 以降、レコメンデーションシステム = Phoenix のレコメンデーションシステムとして話を進めていきます 今回のお話
7.
レコメンデーションシステムの利用
8.
Seasparrow (データ解析基盤) レコメンデーションシステム概要 HDFS YARN Spark HBase ZooKeeper Services アクティビティログ ・閲覧 ・購入 ・いいね ・お気に入りなど ● アクティビティログの転送 ○
購入履歴や閲覧履歴といったユーザの行動のログを データ解析用のHadoopクラスタに転送する
9.
Seasparrow (データ解析基盤) レコメンデーションシステム概要 HDFS YARN Spark HBase ZooKeeper Services Job Scheduler Recommendation Program ●
サービスごとに必要なデータソースや推薦アルゴリズムを選択 ● 推薦結果の作成 submit 推薦アルゴリズム ・Matrix Factorization(MLLib) ・Item-to-Item Collaborative Filtering(実装) ・PLSA(実装) など 外部データソース
10.
Seasparrow (データ解析基盤) レコメンデーションシステム概要 HDFS YARN Spark HBase ZooKeeper Services Recommendation Program ● 推薦結果をHBaseに格納 rowkey:
<ソルト(<> ハッシュ値の先頭1byte)> _<推薦ID(service + algorithm)> _ <user or itemID>_<version(timestamp)> value: <> に対する推薦結果(アイテムID, スコアなどのリスト)をシリアライズ ● ZooKeeper上の推薦IDに紐づくversion情報を更新 API notification 推薦ID: version
11.
Seasparrow (データ解析基盤) レコメンデーションシステム概要 HDFS YARN Spark HBase ZooKeeper Services ● 推薦リクエスト ●
imp, clickログの転送 Services Zero (リアルタイムカウンタ) API ・時間 ・推薦ID (service + algorithm) ・枠ID (どの面で推薦結果を表示したか) ・推薦対象 (user or itemID) ・推薦結果 ・imp/click など LB request response ・user or itemID ・推薦ID ・version
12.
Seasparrow (データ解析基盤) レコメンデーションシステム概要 HDFS YARN Spark HBase ZooKeeper Services ● CTRのレポーティング、CTRを基にした推薦結果のリランキング Services Zero
(リアルタイムカウンタ) Counting Program reporting API LB 推薦結果のimp/click バンディットアルゴリズム CTRを基にリランキング counting
13.
本日のアジェンダ ①レコメンデーションシステムの概要について ②Item-to-Item Collaborative FilteringのSpark実装について
14.
Item-to-Item Collaborative Filtering ●
ユーザベースの協調フィルタリング ○ ユーザ間の類似度をアイテムの評価を要素にしたベクトルで求め、自分とよく似 ているユーザの評価が高いアイテムを推薦する ○ 問題点 ■ アイテムの評価が少ないと精度が悪い ■ 計算量が多く、オンラインでの推薦が困難 ● アイテムベースの協調フィルタリング ○ アイテム間の類似度をユーザの評価を要素にしたベクトルで求め、対象のアイテ ムと同じように評価されているアイテムを推薦する ○ 購入履歴などの評価情報をリクエストに含めることで、オンラインでの推薦が可 能 ○ アイテムの評価が少なくても精度の良い推薦ができる
15.
Item-to-Item Collaborative Filtering user
item1 item2 item3 item4 A ◯ ◯ ◯ B ◯ ◯ ◯ C ◯ D ◯ ◯
16.
Item-to-Item Collaborative Filtering user
item1 item2 item3 item4 A ◯ ◯ ◯ B ◯ ◯ ◯ C ◯ D ◯ ◯ アイテム間の共起数 (ユーザの重複数)、 アイテムを評価したユーザ数 がわかればよい
17.
Sparkでの実装(Java) ● 事前準備として、各itemを int
のIDに変換する(データ量によってはuserも) Sparkではzip関数でユニークなIDを付与することもできるが、long型であまり メモリ効率がよくないため、int型のIDに変換する内製のIDMakerを利用している (user ID, item ID) の評価データの集合のRDDを生成する JavaPairRDD<Integer, Integer> userItemPairData = ...
18.
Sparkでの実装(Java) アイテムを評価したユーザ数の取得 JavaPairRDD<Integer, Integer> itemCountData
= userItemPairData.mapToPair(tuple -> { return new Tuple2<>(tuple._2, tuple._1); }).groupByKey().mapToPair(tuple -> { return new Tuple2<>(tuple._1, Iterators.size(tuple._2.iterator())); }); Int2IntMap itemCountMap = new Int2IntOpenHashMap(itemCountData.collectAsMap()); Broadcast<Int2IntMap> broadcastItemCountMap = context.broadcast(itemCountMap);
19.
Sparkでの実装(Java) アイテムを評価したユーザ数の取得 JavaPairRDD<Integer, Integer> itemCountData
= userItemPairData.mapToPair(tuple -> { return new Tuple2<>(tuple._2, tuple._1); }).groupByKey().mapToPair(tuple -> { return new Tuple2<>(tuple._1, Iterators.size(tuple._2.iterator())); }); Int2IntMap itemCountMap = new Int2IntOpenHashMap(itemCountData.collectAsMap()); Broadcast<Int2IntMap> broadcastItemCountMap = context.broadcast(itemCountMap); user, itemの並び替え item ごとに user を連結 Guavaライブラリ
20.
Sparkでの実装(Java) アイテムを評価したユーザ数の取得 JavaPairRDD<Integer, Integer> itemCountData
= userItemPairData.mapToPair(tuple -> { return new Tuple2<>(tuple._2, tuple._1); }).groupByKey().mapToPair(tuple -> { return new Tuple2<>(tuple._1, Iterators.size(tuple._2.iterator())); }); Int2IntMap itemCountMap = new Int2IntOpenHashMap(itemCountData.collectAsMap()); Broadcast<Int2IntMap> broadcastItemCountMap = context.broadcast(itemCountMap); fastutil ライブラリを使って省メモリ・高速化 メモリ量はそんなに大きくならないため、ブロードキャスト変数を利用して各ワーカーに転送 複雑なJoinの操作がなくなり、処理がシンプルに書ける
21.
Sparkでの実装(Java) アイテム間の共起数の取得、コサイン類似度の計算 // アイテムと共起するアイテムリストのRDDを生成 JavaPairRDD<Integer, int[]>
itemCoItemsPairData = userItemPairData.groupByKey().values() .flatMapToPair(items -> { int[] itemArr = StreamSupport.stream(items.spliterator(), false) .mapToInt(i -> i).toArray(); return Arrays.stream(itemArr).mapToObj(i -> new Tuple2<>(i, itemArr)) .collect(Collectors.toList()); });
22.
Sparkでの実装(Java) アイテム間の共起数の取得、コサイン類似度の計算 // アイテムと共起するアイテムリストのRDDを生成 JavaPairRDD<Integer, int[]>
itemCoItemsPairData = userItemPairData.groupByKey().values() .flatMapToPair(items -> { int[] itemArr = StreamSupport.stream(items.spliterator(), false) .mapToInt(i -> i).toArray(); return Arrays.stream(itemArr).mapToObj(i -> new Tuple2<>(i, itemArr)) .collect(Collectors.toList()); }); ユーザごとのアイテムリストにフォーカス primitive の配列を使うとメモリ効率が良い アイテムごとに共起アイテムの配列を紐付け
23.
Sparkでの実装(Java) アイテム間の共起数の取得、コサイン類似度の計算 itemCoItemsPairData.groupByKey().mapToPair(tuple -> { Int2IntOpenHashMap
itemCoMap = new Int2IntOpenHashMap(); int item = tuple._1; Int2IntMap itemCountMap = broadcastItemCountMap.value(); for (int[] coItems : tuple._2) { for (int coItem : coItems) { if (item == coItem) continue; // 自身のitemは含めない itemCoMap.addTo(coItem, 1); } } for (Int2IntMap.Entry entry : itemCoMap.int2IntEntrySet()) { int coItem = entry.getIntKey(); int coCount = entry.getIntValue(); double similarity = coCount / (Math.sqrt(itemCountMap.get(item)) * Math.sqrt(itemCountMap.get(coItem))); ... // sort
24.
Sparkでの実装(Java) アイテム間の共起数の取得、コサイン類似度の計算 itemCoItemsPairData.groupByKey().mapToPair(tuple -> { Int2IntOpenHashMap
itemCoMap = new Int2IntOpenHashMap(); int item = tuple._1; Int2IntMap itemCountMap = broadcastItemCountMap.value(); for (int[] coItems : tuple._2) { for (int coItem : coItems) { if (item == coItem) continue; // 自身のitemは含めない itemCoMap.addTo(coItem, 1); } } for (Int2IntMap.Entry entry : itemCoMap.int2IntEntrySet()) { int coItem = entry.getIntKey(); int coCount = entry.getIntValue(); double similarity = coCount / (Math.sqrt(itemCountMap.get(item)) * Math.sqrt(itemCountMap.get(coItem))); ... // sort アイテムごとの共起アイテムの配列を集める 共起数をカウント コサイン類似度の計算
25.
Tips ● 推薦結果のアイテムを鮮度の新しいものだけにしたい ○ マスターデータから条件に合致する推薦候補のアイテムリストを作成して、ブロー ドキャスト変数として転送 ○
推薦結果作成時にバリデーションをかける IntSet validItemSet = IntOpenHashSet(); ... // 有効なアイテムの追加 Broadcast<IntSet> broadcastValidItemSet = context.broadcast(validItemSet);
26.
Tips ● Spark上のバッチアプリケーションをJMXでモニタリングしたいが、portの管理が面倒く さい ○ 事前にレコメンデーションが使うport
のレンジを決めておき、zookeeper上に最新 バッチで使用しているport番号をセットし、 バッチ実行の度にインクリメントしていく ○ curatorライブラリの DistributedAtomicInteger を使うと便利
27.
メンバーを募集しています! ●詳しくはコーポレートサイトまで! https://www.cyberagent.co.jp/recruit/career/jobs/ ●もしくはお気軽に内藤までお声かけ ください!
Download