Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
機械学習関連の開発を 効率化した話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
nishiba
May 30, 2019
Technology
5.6k
7
Share
機械学習関連の開発を 効率化した話
nishiba
May 30, 2019
More Decks by nishiba
See All by nishiba
ジョブ理論: 顧客の「進歩」から発想する イノベーション設計の実践
nishiba
1
640
gokartを作った話
nishiba
2
8.7k
m3 ai team
nishiba
38
51k
Graph Convolutional Networksを使った 推薦システム
nishiba
6
8.6k
エムスリーの機械学習チームビルディングの考え方
nishiba
13
7.5k
Graphの推薦システムへの応用
nishiba
6
9k
AI・機械学習チームにおけるデータパイプライン構築
nishiba
8
27k
エムスリーにおける 機械学習活用事例と開発の効率化
nishiba
3
6.9k
医療用語に注目した文書の類似度計算
nishiba
6
5.1k
Other Decks in Technology
See All in Technology
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
200
職能の壁を取り払った先で見えた壁 -AI時代のクロスファンクショナル組織-
shimotaroo
1
110
レビューしきれない?それは「全て人力でのレビュー」だからではないでしょうか
amixedcolor
0
270
CDK Insightsで見る、AIによるCDKコード静的解析(+AI解析)
k_adachi_01
2
180
DevOpsDays Tokyo 2026 軽量な仕様書と新たなDORA AI ケイパビリティで実現する、動くソフトウェアを中心とした開発ライフサイクル / DevOpsDays Tokyo 2026
n11sh1
0
150
新メンバーのために、シニアエンジニアが環境を作る時代
puku0x
0
1.1k
NOSTR, réseau social et espace de liberté décentralisé
rlifchitz
0
200
クラウドネイティブな開発 ~ 認知負荷に立ち向かうためのコンテナ活用
literalice
0
100
AWS DevOps Agentはチームメイトになれるのか?/ Can AWS DevOps Agent become a teammate
kinunori
6
650
Introduction to Bill One Development Engineer
sansan33
PRO
0
410
AWS認定資格は本当に意味があるのか?
nrinetcom
PRO
1
260
Do Ruby::Box dream of Modular Monolith?
joker1007
1
290
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
180
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Balancing Empowerment & Direction
lara
6
1k
30 Presentation Tips
portentint
PRO
1
270
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
170
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
520
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
260
Crafting Experiences
bethany
1
110
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
320
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
機械学習関連の開発を 効率化した話 エムスリー株式会社 西場正浩(@m_nishiba) MLPP #2 会場&フードスポンサー: SmartNews
自己紹介 • エムスリー株式 • AI・機械学習チーム • 機械学習エンジニア • SNS ◦
https://twitter.com/m_nishiba ◦ https://note.mu/nishiba • 興味あるキーワード ◦ 自然言語処理、推薦システム、開発効率化、チームマネジメント、 PdM • 資料は公開済み。手元でも確認しながら聞いてください ~
今日話すこと • エムスリーの開発体制。 ◦ 1アルゴリズム、1MLエンジニア ◦ 1MLエンジニア、複数アルゴリズム • 開発で感じた難しさ。 ◦
データ取得のための SQL ◦ クラス設計 ◦ コードレビュー ◦ パラメータとモデル・データの紐づけ管理 ◦ 前処理後データの再利用 ◦ データのバージョニング • 行った解決方法。 ◦ luigiをラップしたgokart(GitHubで公開。pip install gokart) ◦ データ取得タスク群の m3mushroom(非公開)
エムスリーの機械学習チームの開発体制 • 状況 ◦ MLエンジニアは3人程度 ◦ 設立2年弱 ◦ プロダクト・プロジェクト数は 19程度
◦ 自然言語処理、推薦がメイン • 基本は1アルゴリズム、1MLエンジニア ◦ 相談や議論はする ◦ 責任を持つ人、実装する人は基本的に 1人 • 1MLエンジニア、複数アルゴリズム ◦ 同時に複数のアルゴリズムの改善や開発を行うこともある。 ◦ 新規開発中に他のプロジェクトが ABテスト中&要改善
プロダクトの開発順序 • なるべく共通部分が多くなるようにプロダクトを作る。 ◦ やらない例: 機械翻訳+非テキスト系のリコメンド +画像診断 ◦ やる例: テキスト系のリコメンド、テキストの類似度、テキストのタグ付け
開発で感じた難しさ
データ取得が大変 • データが色んなところにある ◦ オラクル、Postgres、BigQuey、社内API ◦ 2000年創業で20サービス以上あるので・・・ • 色々Joinやfilterしないとモデル開発上意味のあるデータにならない。 •
サービス横断で分析するためにはフォーマットが揃っておらず色々加工する必要がある。 ◦ すごいSQLを書かないと・・・
• そもそも設計難しい・・・ • 他のプロジェクトでも使えるようにしたい。 • システム開発よりMLに強みがある新卒も入社後すぐに開発する (本番で動く) ◦ 1アルゴリズム、1MLエンジニア •
おれおれクラス群のコードレビュー &保守は辛い・・・ • ログ設計難しい、解読辛い。 設計が難しい
パラメータとデータ/モデルの管理が大変 • pickleを作ったときのパラメータ等を一緒に管理するのが大変 ◦ e.g. 極端の話、雑なナンバリングになる ▪ data/some_data.pkl ▪ data/some_data_1.pkl
▪ data/some_data_20190530.pkl • (試行錯誤中)昨日、めっちゃ良いスコアが出たけど再現できない !!(パラメータが分からない ) • ちょっと前に他のプロジェクトで作った word2vecを使いたいけど大丈夫だよね ?? • 本番でエラーがでたけど再現できない ! DB変わっている??
解決方法
パイプラインのためのパッケージ Luigi を使う • バッチ処理のためのパイプラインを構築するためのパッケージ ◦ Spotifyが作っているOSS ◦ https://github.com/spotify/luigi Task
BiqQuey API DB S3
• Luigiを使うことのメリット ◦ classの設計から解放される ! ▪ requires, output, runの3つの関数を書けば良い !
◦ 設計が統一される!! ▪ 新しいメンバーもすぐにキャッチアップできる !! ▪ コードレビューが楽々 ◦ ログがすごく読みやすい ! ▪ どのタスクが成功したか ?失敗したかが一目瞭然 ◦ 修正後の再実行が簡単 ▪ 途中のタスクが失敗 → コードを修正 → 落ちたところから実行される。
さらにgokartを開発 • Luigiをラップしたパッケージ ◦ エムスリーが作っている OSS ◦ https://github.com/m3dev/gokart • gokartを使うことのメリット
◦ 更にコード量が減らせる ▪ 保守コスト等も減少 ▪ 特にファイルの入出力周り ◦ (中間)出力ファイルの管理が楽 ▪ タスクのパラメータによりユニークなファイル名になる ▪ ファイルが生成されたときのパラメータが保持される ◦ 各タスクの実行時間を確認できる。 ◦ 出力をs3にするかローカルにするかをパラメータ一つで切り替え ◦ ジョブ終了時にslackに通知。
データ取得を共通タスク化 • gokartを使ってデータ取得を共通タスク化した。 ◦ e.g. DownloadNewsItems( from_date=date(2019, 1, 1), to_date=date(2019,
1, 31)) ◦ SQL等を意識する必要がない。 ◦ Pandas.DataFrameとして出力される。 Task BiqQuey API DB
質問どうぞ〜