2019年9月16日/17日に開催されたPyCon JP 2019で自分が直接/YouTubeで聴講したセッションについてのまとめです。主に下記の内容を書いています。
- スピーカーURL
- 配信動画
- スライド
- 発表内で出てきたライブラリなどのURL
- 自分の感想
「あのセッションで話していたライブラリなんだっけ」と思い出したい方やざっくり内容が知りたい方に読んでいただければ幸いです。PyCon JPに自分も発表者としても参加し、スタッフとして参加し、Webサイトの開発もしたので、それについては改めて書きたいと思います。
PythonとAutoML / 芝田 将
スピーカー: https://twitter.com/c_bata_
動画: https://www.youtube.com/watch?v=Whkwu46DgBs
スライド: https://www.slideshare.net/c-bata/pythonautoml-at-pyconjp-2019
HypterParameter Tuningの種類
- GP: Gaussian Process | Instruction of chemoinformatics by funatsu-lab
- SMAC: https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/
- SMACのベースになっているSuccessive Halving
- Successive Halvingの性能解析 | Research Blog
- TPE: TPE(tree-structured parzen estimator)について – Proof of Engineering
解説するライブラリ
Oputunaを使うとき
- SQLite3は使わない
- カーディナリティの高い質的変数は避ける
Feature EngineeringのAutoMLライブラリ
Feature EngineeringをするTool
- Featuretools | An open source framework for automated feature engineering Quick Start
- Feature Labsという企業が開発しているOSS
- tsfresh — tsfresh 0.12.0 documentation
- 時系列データに特化した特徴量生成・選択ライブラリ
DFS
- リレーショナルデータから特徴量を生成する
- Introduction to Automated Feature Engineering Using Deep Feature Synthesis (DFS)
特徴量選択のAutoML
- 3つの分類(by guyon03a.dvi)
- フィルター法
- sklearn.SelectBest
- ラッパー法
- sklearn.RFE
- 組み込み法
CASHプロブレム
- ハイパーパラメータチューニングとモデル選択を組み合わせた問題
Auto-sklearn
- SMAC3を用いたベイズ最適化
- Frank Hutter先生が開発・使用
TPOT
Automated Neural Architecture
- AutoKeras
- DEvol
- HyperAS
- AutoNet(未公開。そのうち公開)
機械学習におけるハイパーパラメータ最適化の理論と実践 / 野村 将寛
スピーカー: https://nmasahiro.com/
動画: https://www.youtube.com/watch?v=F1GGPQlra-E
スライド: https://speakerdeck.com/nmasahiro/ji-jie-xue-xi-niokeru-haihaharametazui-shi-hua-falseli-lun-toshi-jian
ハイパーパラメータ最適化
問題を抽象化するとBlack-box最適化問題として扱える
Black-box最適化
関数の中身がBlackboxで勾配情などが使えない
ベイズ最適化
- GP-EI
- GPによってモデル化し期待値最大化になるパラメータを選択する
- 最適化は多峰性があるので、EDAやCMA-ESなどを使う
- 空間全体をモデル化している
- TPE
- GP-EIと同様にEIによって最大化をするが
- GPでなく上位/下位どちらかに入るかの確率モデル
- HypyerOpsやOptunaでデフォルトで採用
- 上位空間と下位空間の「しきい値」を探索している
CMA-ES
- 探索空間内で正規分布をサンプリング&評価&重み付け、再度サンプリングというように更新していく
- 「確率分布を勾配降下法で更新している」イメージ
ベイズ最適化 vs CMA-ES
- GP-EI: t3、TPE: t、CMA-ES: 1
- 問題クラスを決めないと最適な最適化手法は選べない(ノーフリーランチ)
Gray-box最適化
例えばDNNにおいてEpochの途中の結果を最適化する方法
Successive Halving
- 中間の評価値は最終評価値と相関がある、という直感に基づいたアルゴリズム
- Optunaによる枝刈りとAsynchronous Successive Halving Algorithm - ぽよメモ
- 「途中まで悪いが最終的に良い、パラメータを捨ててしまう」問題点がある
Hyperband
Successive Halvingでの絞り込み方を変えながら行うアルゴリズム(改善)
BOBH
Hyperbandの絞り込み方をランダムでなくベイズ最適化で効率的に行う方法
BOHB: Robust and Efficient Hyperparameter Optimization at Scale
PBT
ベイズ最適化含むシーケンシャル的な手法とサンプリング的な手法を組み合わせたもの
Population based training of neural networks | DeepMind
マルチタスク問題
似た問題から情報を得て最適化を効率化する問題
MTBO
タスク間の関係をGPによりモデリングする手法
Multi-Task Bayesian Optimization
ツール群
- MTBO: Ax facebook/Ax: Adaptive Experimentation Platform
- FBが5月に発表
- Hyperband, PBT: Tune Tune: A Scalable Hyperparameter Tuning Library — Ray 0.8.0.dev4 documentation
Using Python in Music Signal Processing, Speech Recognition and Intent Classification in Chatbot / Renyuan Lyu
スピーカー: https://twitter.com/RenyuanLyu (凍結)
動画: https://www.youtube.com/watch?v=L1zaX0hQ9YQ
スライド: https://www.slideshare.net/tarzanlyu/py-conjp2019-renyuanlyu3-172389132
メモ/感想
- カラオケバトルシステムを作る話
- 選曲が、「中島みゆき」とか「美空ひばり」とかでスピーカーが実際にカラオケしていて面白かった
- 変数が半分くらい中国語でかなり新鮮だったw
- friture: RealTimeにスピーチのスペクトルなどを可視化する
- Pitch検出の古典的なアルゴリズムはAuto correlation method
- Speech Recognitionの基本的な流れ
Python による日本語自然言語処理 〜系列ラベリングによる実世界テキスト分析〜 / 池田 大志
スピーカー:
動画: https://www.youtube.com/watch?v=AH1TWVGhdcI
スライド: https://speakerdeck.com/taishii/pycon-jp-2019
nagisa
昨年発表されたBiLSTMを使用した形態素解析エンジン。池田さんが製作者。
taishi-i/nagisa: A Japanese tokenizer based on recurrent neural networks
nagisa: RNNによる日本語単語分割・品詞タグ付けツール - Qiita
nagisaの利用例
文章要約ツール: yubessy/textrankdemo: Demonstration of TextRank Algorithm コーパスから統計量抽出:BLKSerene/Wordless: An Integrated Corpus Tool with Multi-language Support for the Study of Language, Literature and Translation
redditの文章要約: NTT’s Machine Translation Systems for WMT19 Robustness Task
nagisaの特徴
- 未知語に強い
- 顔文字やURLの分割に強い
- 品詞でのフィルターが容易
- 独自の辞書の登録が容易
Dashとオープンデータでインタラクティブに日本経済を可視化する / 小川 英幸
スピーカー: https://twitter.com/OgawaHideyuki
動画: https://www.youtube.com/watch?v=WLbQYFZc-YY
スライド: http://pyconjp.herokuapp.com/
メモ/感想
- Plotly Express: Plotlyのラッパーライブラリ
- チュートリアル of Dash的な内容だった
ML Algorithm to Detect Rare Clinical Events / Haque Ishfaq
スピーカー: https://twitter.com/haqueishfaq
動画: https://www.youtube.com/watch?v=bsMgUhL1tb8
スライド:
メモ/感想
- ラベル分類問題でテストケースでレアなケースが出てくると予測する問題がある
- Triplet loss Based VA
- Tripletで生成した特徴量でVAEを作成する手法?
ListはIteratorですか? / 成瀬基樹
スピーカー: https://twitter.com/narusemotoki
動画: https://www.youtube.com/watch?v=Ig6X6VH15RY
スライド: https://docs.google.com/presentation/d/1mXOBuUIG_jlyKwxO792Nk6WQphyts2uuerPkDarwGFg/edit?usp=sharing
メモ/感想
- ListはIteratorではない
- あれ、そっか。となった。
- Iterableでした。
- 途中のビルドインオブジェクトの継承関係がかなりわかりやすかった
- SupportsInt知らなかった
pandasのStyling機能で強化するJupyter実験レポート / Tomoko FURUKI
スピーカー: https://twitter.com/komo_fr
動画: https://www.youtube.com/watch?v=T8lL9Nb3hMM
スライド: https://speakerdeck.com/komofr/pyconjp-2019
メモ/感想
- まだProvisoningフェーズ、しかし4年経過。ただメンテナンスはされている
- GitHubでは表示されないのでnbviewerを使う
Pythonで切り開く新しい農業 / 小池 誠
スピーカー: https://twitter.com/komo_fr
動画: https://www.youtube.com/watch?v=0bTPOsVvG7g
スライド:
メモ/感想
- 「Deeplearningできゅうり分別」の方
- 元々組み込みエンジニアだったとのこと
- それまでにPythonで作った「合わせ調味料自動生成装置」「スプラウト自動栽培装置」が面白かった
- きゅうり判別機は、学習させる前に「人間が正しく分類できるのを試すためにWebApp」を作っている
- 初期モデルは「おそすぎる」「いぼ(きゅうりの健康状態の証明)が取れてしまう」という問題があった
- 「AIが人間をサポートする」というモデルに切り替えた
- 時期による違いは、人間が調整可能な「キャリブレーション装置」を導入して解決した
- AIは「人と人との間に満ちていく」ものだと感じた
Modern development environments for Pythonistas / Dustin Ingram
スピーカー: https://twitter.com/di_codes
動画: https://www.youtube.com/watch?v=d3cj4f63u-A
スライド:
メモ/感想
- Docker使って、Package管理で
requirements.txt
やめようという話 - pip-tools · PyPI
- pip関連ツールでPythonのパッケージ管理を楽にする - Qiita
- Pythonパッケージを自動アップデートしてくれるpyup
- pip-toolsとpipenvとpoetryとの比較がなかったのでみんな質問していた
- 好みという回答だった
KubernetesとJupyterHubで構築する機械学習eラーニングサイト / 石田 光一
スピーカー: https://twitter.com/wapa5pow
動画: https://www.youtube.com/watch?v=VjH2P2xcJyg
スライド:
https://speakerdeck.com/wapa5pow/kubernetes-k8s-tojupyterhubdegou-zhu-suru-ji-jie-xue-xi-eraningusaito
メモ/感想
- STANDARD社のe-learningシステム構築の話
- 通常のアプリケーションにJupyterHubをインテグレーションしている
- おそらくCoursera も同じ構成
- k8sは自分が以前試したものと同じくhelmを使う方法
- 主な要素はLoadbalancerとCustom Auth
- 差分があったらgit pullしてくれるjupyterプラグイン
- 実行されてるか確認するためにnbconvertをCIで実行している
- Adminで生徒のJupyter Notebookにアクセスして採点している
- JupyterのExtensionで「どのくらいセルを実行したか」を送っている
- セルの実行時にフックしてJSからリクエストを送っている
- 採点してくれるjupyterのプラグイン
Python Webフレームワーク比較 / 寺田学
スピーカー: https://twitter.com/terapyon
動画: https://www.youtube.com/watch?v=drKDKvnWulc
スライド: https://speakerdeck.com/terapyon/python-webhuremuwakubi-jiao
メモ/感想
- Django: Django色が強い。機能が充実。固有の知識が必要。
- Flask: シンプル、自由。
- Pyramid: きっちりとしている。学習コスト高め。
- Zope: 歴史があるライブラリ(最古)。必要な機能はそろっている。
- Tornado: 非同期サポート
- Guillotina: コンテンツの階層化、非同期対応
- Bottle: シンプル(フラスクの元ネタ)
- Responder: 使われている事例が少ない。不安。
- Starlette:
- Flaskのasync版と言われている。
- encode/starlette: The little ASGI framework that shines. 🌟
Pythonで始めてみよう関数型プログラミング / 寺嶋 哲
スピーカー: https://twitter.com/meganehouser
動画: https://www.youtube.com/watch?v=hGfWInLzKHQ
スライド: Pythonで始めてみよう関数型プログラミング - Speaker Deck
メモ/感想
- Coconut: Python互換な言語(CPython bytecodeにコンパイされる)
- hylang: Pythonにコンパイルされる言語
- dg: HaskelっぽくかけるPython互換な言語
- macropy: AST生成時にフックして処理を実行する?
- fn.py: 関数合成やストリームなどScalaなどの関数型の機能を使えるライブラリ
- pampy: パターンマッチングが書ける
- 端的なバインド関数の説明がHaskellの勉強としてわかりやすかった
- Type-safe Monad: Pythonでmonadが書ける
- typesafe-monads · PyPI
- ↑の元パッケージ PyMonad · PyPI
Pythonでライブをしよう -FoxDotを使った新時代のPython活用法- / 田中 慎太郎
スピーカー: https://twitter.com/_sin_tanaka
動画: https://www.youtube.com/watch?v=lCQWLAJf6xQ
スライド:
メモ/感想
- そのDJたちは「コード」で踊らせる──人間と機械が“共創”するアルゴレイヴの世界|WIRED.jp
- SuperColider: 音楽生成ライブラリ
- FoxDot: SuperCliderをPythonから操作できるライブラリ
- デモがJupyterで実行されていて気軽にできそうな感じがしてよかった
- パターンオブジェクトは
__getitem__
を使っている - TOPLAP: ライブコーディングのコミュニティ
- 歴史自体は2000年くらいからある
- 録音する機能は?
- FoxDotやSuperColiderではないので、Macの録音機能など使う
入門 自作検索エンジン / ryo kato
スピーカー: https://twitter.com/_ryook
動画: https://www.youtube.com/watch?v=5EEH8MHfAyA
スライド: https://speakerdeck.com/ryook/the-first-step-self-made-full-text-search
メモ/感想
- 全文検索
- Grep型: linuxのGrepのように単純に上から下まで探索する
- インデックス型: 元々インデックスを作成する方法
- ベクトル型: ベクトル間の距離によって検索する方法。Googleなどはこれ
- インデックス型では「インデックスの作り方」が重要
- トークナイズ(形態素解析、Nグラム)
- シグニチャなど
- PyCon JPの検索エンジンんを作る
- 「機械学習」というワードをみんな説明文に入れ過ぎな「機械学習問題」w
- 情報検索の基礎 | Christopher D.Manning, Prabhakar Raghavan, Hinrich Schutze, 岩野 和生, 黒川 利明, 濱田 誠司, 村上 明子 |本 | 通販 | Amazon
知ろう!使おう!HDF5ファイル! / thinkAmi
スピーカー: https://twitter.com/thinkAmi
動画: https://www.youtube.com/watch?v=bSdRlfC2yqA
スライド: https://speakerdeck.com/thinkami/pycon-jp-2019-talk
メモ/感想
- 概要
- HDF: HDF Group(NPO団体)がサポート
- 5: バージョン
- Dataset: ファイルにあたる
- Group: フォルダにあたる
- Attribute: Dataset、Groupに紐付けられる
- 見るためのツール
- Pythonで使う場合
- h5pyの場合、10MBをDatasetに入れると170MBになってしまうので圧縮必要
- PyTableの場合はデフォルトで圧縮済
- HDF5のファイルをローカルに置くとかなり大きくなってしまう問題がある。
- HSDS
- バックエンドをクラウドにしたHDF5サーバー
- HDFGroup/hsds: Cloud-native, service based access to HDF data
- Kita
- HSDSを動かせる有償のサーバー
- Kita™ - The HDF Group
- AWS Marketplace: Kita Server
Getting Started with Asynchronous Python Web Development / Enzo Calamia
スピーカー: https://github.com/enzzc
動画: https://www.youtube.com/watch?v=3Me7IU-kjq0
スライド:
メモ/感想
- aiohttp: Async Http Client
- ベンチマークツールとして使っていたwrkが気になった
DjangoとJupyterで始めるPyData / 熊谷 拓也
スピーカー: https://twitter.com/kumappp27
動画: https://www.youtube.com/watch?v=QLRabej3I6E
スライド:
メモ/感想
- JupyerからDjangoのモデルをimportするといいよ、という話
- django-extensions: Djangoを拡張してくれるライブラリ
Python製シェルxonshの紹介 / Shunsuke Kawai
スピーカー: https://twitter.com/vaaaaanquish
動画: https://www.youtube.com/watch?v=UShlTE8wdzU
スライド:https://speakerdeck.com/vaaaaanquish/pycon2019-pythonzhi-sieruxonshfalseshao-jie
メモ/感想
- 読み方は「コンシュ」
- matplotlibがplotできるのすごい
- the xonsh shell — xonsh 0.9.11 documentation
- Pythonistaに贈るXonshのススメ - Stimulator
pythonで、処理をより効率化するためのTips集 / 長谷川大耀
スピーカー: https://twitter.com/Hase8388
動画: https://www.youtube.com/watch?v=UShlTE8wdzU
スライド: https://speakerdeck.com/hiroaki8388/pythonde-chu-li-woyorixiao-lu-hua-surutamefalsetipsji
メモ/感想
yield
で遅延処理- リクエスト送信時に
functools.lru_cache()
でキャッシュ化- 状態が変わるときはクリアする
- one-hot-encodingでは疎行列を使う
(ポスター)VS CodeとPYRIGHTで始める型のある生活 / Yuto Mizutani
スピーカー: https://twitter.com/tenajima
スライド: https://speakerdeck.com/tenajima/vs-codetopyrightdeshi-meruxing-falsearusheng-huo
メモ/感想
- pyright: MS製の型チェックツール
- Node製なのでCIのときどうするかという悩みがある
- mypyはPython製なので大丈夫
- ストレスに感じるほどではないがたまに遅いと感じる
- とりあえず使ってみようと思った
さいごに
自分が知らないライブラリやアルゴリズムを数多く知ることができ、大変有意義なカンファレンスでした。スピーカーの皆さん、スタッフの皆さん、ありがとうございました。
ちなみに自分は下の内容で発表してきました。