Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
機械学習関連の開発を 効率化した話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nishiba
May 30, 2019
Technology
5.7k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
機械学習関連の開発を 効率化した話
nishiba
May 30, 2019
More Decks by nishiba
See All by nishiba
ジョブ理論: 顧客の「進歩」から発想する イノベーション設計の実践
nishiba
1
780
gokartを作った話
nishiba
2
8.9k
m3 ai team
nishiba
38
52k
Graph Convolutional Networksを使った 推薦システム
nishiba
6
8.7k
エムスリーの機械学習チームビルディングの考え方
nishiba
13
7.6k
Graphの推薦システムへの応用
nishiba
6
9.2k
AI・機械学習チームにおけるデータパイプライン構築
nishiba
8
28k
エムスリーにおける 機械学習活用事例と開発の効率化
nishiba
3
6.9k
医療用語に注目した文書の類似度計算
nishiba
6
5.2k
Other Decks in Technology
See All in Technology
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
3
4.7k
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
290
Deep Data Security 機能解説
oracle4engineer
PRO
2
720
しろおびから始める!ログ活用の第一歩
shumei_ito
0
600
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
120
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
150
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
5
2k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
17
120k
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
320
自主式軟體工廠
philipz
0
240
自分で立ててみるLLMサービス
y_sera15
0
140
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
170
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
Six Lessons from altMBA
skipperchong
29
4.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Music & Morning Musume
bryan
48
7.4k
Prompt Engineering for Job Search
mfonobong
0
490
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
470
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
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
質問どうぞ〜