PyConJP 2019 に参加してきたメモ
今年も PyConJP に参加してきた。
今年のテーマは「Python New Era」で Python の新時代の話をしようということだったが、 内容的にはやはり機械学習関連の話が多い。
1 日目は機械学習中心。 2 日目はそれ以外のテーマを中心に見ていくことにした。
Why Python is Eating the World
1 日目オープニングは最近和訳された「独立プログラマの作者」Cory Althoff さんによる Python がどうして流行っているかと、Python 習得してどのように職歴を積むとよいのか、という話。
発表者は特に数学などの成績が良かったわけでもなく、大学で Java を諦めたくらいだが、 Python を始めたおかげで今では高給をもらって豪邸に住むまでになったとのこと.
Python が世界を席巻している理由として挙げられていたのは以下の 3 つ: 1. 初心者が受け入れやすい 2. 企業からの需要がある 3. 良いコミュニティがある
Python でフリーランス始める場合に最初にやるおすすめの仕事は Web スクレイピングで、 比較的簡単は作業で高評価をもらってそれを足がかりに実績を積んでいくといよいらしい。 経験したことは LinkedIn に登録してそこからよい職を取るといよいという話だった。
フォローすべき Pythonista として次の人たちが紹介されていた。
- Mike Grouchy: a founder at Pycoders Weekly
- Julian Sequeira: a founder of PyBites
- Mariatta Wijaya: a core python develope
- Takayuki Shimizukawa: Python author and Sphinx contributor位
また Python 学習におすすめのサイトも紹介されていた。
感想
これから IT 業界に飛び込もうという人にはかなりいいんじゃないかと思える。 またこの言語を学ぶことで得られる恩恵がかなり具体的に・実体験付きで話されているので説得力高い(日本でも同じかどうかは 微妙だが…)。
Python と AutoML
サイバーエージェントの AI ラボの芝田 将([c_bata https://twitter.com/c_bata])さん Automated Machine Learning in Python
機械学習の自動化の話。 AutoML は Google のサービスでなく、機械学習自動化全般のことを指すみたい。
自動化のレベル分けと AutoML の要素技術
自動化は 3 つの観点 * ハイパーパラメータ最適化: 少ない試行回数でよりよいハイパーパラメータを得る * 特徴量エンジニアリング: 適切な特徴量を選択する * アルゴリズム選択: 適切な機械学習アルゴリズムを選択する
ハイパーパラメータの最適化
- ベイズ最適化: Gaussian Process, TPE, SMAC
- 早期停止: Successive Halving, Hyperband
おすすめライブラリ
- Optuna: TPE, SuccessiveHalving に対応
- scikit-optimize: GP に対応
特徴量エンジニアリング
特徴量エンジニアリングはすごく重要で、時間がたくさんかかる。
現在あるライブラリはどれも基本的なものだけ対応(ex, 欠損値保管、次元削減)
- 特徴量生成
- 特徴量選択
アルゴリズム選択
機械学習のアルゴリズムはチートシートがあるくらいに煩雑だが、 かといって自動化して嬉しいかどうか議論の余地ある。
機械学習におけるハイパーパラメータ最適化の理論と実践
こちらも機械学習の自動化の話。
- ハイパーパラメータ最適化
- Black-box 最適化
- Gray-box 最適化
おすすめソフトウェア
- Optuna
- defin-by-run スタイル
- ログも綺麗で使いやすい
- BoTorch -> AX
- from Facdbook
- adaptive experiment platform
- HPO より幅広いプラットフォームらしい
- バンディットアルゴリズムなども提供
- Ray
- 強化学習の RLib と相性がいい
- 分散環境得意
Python による日本語自然言語処理
nagisa をつかった日本語自然言語処理の話。
- 自然言語処理のよくある流れ
- コーパス→ 前処理 →データ →学習→モデル→評価
- nagisa
- feature
- BLSTMs による単語分割と品詞タグ付け
pip install nagisa
ですぐ使える- 単語、品詞推定、“語形変化の処理“ はない
- feature
- BLSTMs = Bidirectional LSTMs
- 前向き LSTM と後ろ向き LSTM を計算
- 入力全体の情報を各時間で考慮できる NN
- nagisa メソッド
- 実施
nagisa.tagging(text)
- 単語の抽出
tokens.words
- 品詞の抽出
tokens.postags
- ユーザ辞書への追加
new_tagger = nagisa.Tagger(..., single_word_list=[“あたらしい単語”])
- 実施
Python ウェブアプリケーションのためのプロファイラの実装 by Yusuke Miyazaki
- wsgi_lineprof
- line-by-line profiler for web app
- アーキテクチャ
- capture request/response
- get infromation on execution
- measure exec time per line
- WSGI middleware
- Implementing WSGI Middleware
- tracing
- wsgi perf では
PyEval_SetTrace
を使う
- wsgi perf では
- measuring time
- C 拡張を用意してプラットフォームごとに使い分け
- 使ったもの
- POSIX: clock_getitime()
- masOS: math_absolute_time()
Introduction to FEM Analysis with Python
Python で有限要素法を行う話
Python で切り開くあたらしい農業
TensorFLow の利用例としてきゅうり仕分け機が有名だが、 その開発時の試行錯誤の話などを聞けて興味深かった。
初期バージョンでは仕分けまでをコンベアを使ってやっていたが、きゅうりに傷がつく、結局どこかで人手がいりそう、なども問題があって完全自動化から人間の手助けをする方針に切り替えた。
他やってみてわかったこと:
- 熟練者のノウハウ継承の可能性
- ノウハウの継承 (熟練者→ AI → 初心者)
- 半年ぐらい使っていると、AI の助けがなくてもできるようになる
- 自動化だけじゃない DL の可能性
- 障害者も働きやすい環境作り
- 人間同士のコミュニケーションの支援
Inside a companion robot belm0
Lovot 内部の並行処理の話。
スピーカーの人はビブリボン!の開発にも携わっていたとのこと。
Lovot は 人間とインタラクションしながら表示を行ったり音をだしたりと、 並行処理の塊で、 GroovX社ではいろいろ工夫して生産性を上げていた。
並行処理で気をつけた点として以下が挙げられていた:
- 開発を妨げない
- 低レイヤを担当しないチームも含めて並行処理で患わせないようにする
- 適切な言語を選択する
- これは Python を使えば解決
- 並行処理の導入で不明になるような処理・わからなくなるような処理を出さない
- とりわけ mutable な状態・副作用とか
- プログラム内部を外部から観察・インタラクト可能にする
- 自家製のヴィジュ荒いぜーションツールを用意した
- (たぶんプロダクト or OSS に対する)
- Trio の開発者とコンタクトを取り、チームが変更を恐れずとれるようにした
上記の 3. のために、次のような戦略でシンプルな並行処理にする最適化をおこなった:
- 明確なコンテキストスイッチ/シングル OS スレッド
- 統合されたキャンセル処理
- 構造化した並行処理
- async/await
- コルーチン
このうち、「統合されたキャンセル処理」と「構造化した並行処理」のために TRIO
を採用した。他は Python ネイティブの機能で対応している。また TRIO の採用で並行処理のテストも簡単にできるようになった。
例えば次のようなコードで
async with trio.open_nursery() as nursery: await pause(1) nursery.start_soon(turn, pi/2) nursery.start_soon(play_sound)
turn(pi/2)
の処理で例外が起こった場合は、他の子(ここではplay_sound
)がキャンセルされ、また親れ例外が伝播するようになっている(統合されたキャンセル処理)。
婚活・恋活領域における Python を使ったマッチング最適化 Morioka Takashi
婚活のマッチングアプリ開発の話。 ほぼ Python の話でなく、婚活アプリでの苦労話とか。
- マッチング最適化への道
- 安定結婚問題
- -> Gale-Shapley法をベースに開発
- O(n2) で安定マッチング
- マッチング手順の改善
- 全対象→グループごとに並列実行
- 計算量を制御できるが、マッチング精度の低下・少数派への悪影響がある
- 全対象→グループごとに並列実行
- 環境の改善
- A/Bテストの実施
- 改善のための基盤を準備
- ユーザをタグ付けし、これを元にスコアリング処理を切り替える
- 改善のための基盤を準備
- 機械学習の適用
- 安定結婚問題
When AI meets 3000-year-old Chinese Palmistry Kai Hsu
手相を機械学習してみた話。
Chinese Palmistry = 手相学になる模様。
機械学習の話としてはかなりベタだった。 健康、恋愛、仕事の 3 つの項目を手のひらの画像で学習していた。 手相学の方が新鮮だったくらい。
メディアが運用すべき持続可能な VTuber をつくる技術 @hirosaji
Vtuber とタイトルにあるが、音声に関する機械学習の話が中心だった。 1 人の Vtuber の中の人が変わっても問題ないようにするには声質変換処理が良いだろうとのこと。
pytestによるCIレボリューション あべんべん
pytest と CircleCI の話だった。