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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
680
gokartを作った話
nishiba
2
8.8k
m3 ai team
nishiba
38
52k
Graph Convolutional Networksを使った 推薦システム
nishiba
6
8.6k
エムスリーの機械学習チームビルディングの考え方
nishiba
13
7.6k
Graphの推薦システムへの応用
nishiba
6
9.1k
AI・機械学習チームにおけるデータパイプライン構築
nishiba
8
27k
エムスリーにおける 機械学習活用事例と開発の効率化
nishiba
3
6.9k
医療用語に注目した文書の類似度計算
nishiba
6
5.2k
Other Decks in Technology
See All in Technology
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
110
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
1
410
シンガポールで登壇してきます
yama3133
0
250
知らん間に、回ってる
ming_ayami
0
730
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
370
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.6k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
240
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
3.2k
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
920
AI Driven AI Governance
pict3
0
490
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
300
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
Navigating Weather and Climate Data
rabernat
0
370
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
390
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
280
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
4 Signs Your Business is Dying
shpigford
187
22k
The Cost Of JavaScript in 2023
addyosmani
55
10k
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
質問どうぞ〜