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
nishiba
May 30, 2019
Technology
7
5.5k
機械学習関連の開発を 効率化した話
nishiba
May 30, 2019
Tweet
Share
More Decks by nishiba
See All by nishiba
gokartを作った話
nishiba
2
8.3k
m3 ai team
nishiba
36
47k
Graph Convolutional Networksを使った 推薦システム
nishiba
6
8.5k
エムスリーの機械学習チームビルディングの考え方
nishiba
13
7.4k
Graphの推薦システムへの応用
nishiba
6
8.8k
AI・機械学習チームにおけるデータパイプライン構築
nishiba
8
27k
エムスリーにおける 機械学習活用事例と開発の効率化
nishiba
3
6.7k
医療用語に注目した文書の類似度計算
nishiba
6
5k
WSDM 2018 論文読み会 Hyperbolic Representation Learning for Fast and Efficient Neural Qestion Answering
nishiba
0
1.8k
Other Decks in Technology
See All in Technology
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
1.8k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
2
6.3k
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
2
360
OPENLOGI Company Profile
hr01
0
67k
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
3
12k
Delta airlines®️ USA Contact Numbers: Complete 2025 Support Guide
airtravelguide
0
340
なぜ私はいま、ここにいるのか? #もがく中堅デザイナー #プロダクトデザイナー
bengo4com
0
1.3k
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
270
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.6k
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.7k
ビギナーであり続ける/beginning
ikuodanaka
3
720
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
4 Signs Your Business is Dying
shpigford
184
22k
Designing for humans not robots
tammielis
253
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Code Review Best Practice
trishagee
69
18k
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
質問どうぞ〜