giantneco’s blog

技術メモ

PyConJP 2019 に参加してきたメモ

pycon.jp

今年も PyConJP に参加してきた。

今年のテーマは「Python New Era」で Python の新時代の話をしようということだったが、 内容的にはやはり機械学習関連の話が多い。

1 日目は機械学習中心。 2 日目はそれ以外のテーマを中心に見ていくことにした。

Why Python is Eating the World

www.youtube.com

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

pycon.jp

サイバーエージェントの AI ラボの芝田 将([c_bata https://twitter.com/c_bata])さん Automated Machine Learning in Python

機械学習の自動化の話。 AutoML は Google のサービスでなく、機械学習自動化全般のことを指すみたい。

自動化のレベル分けと AutoML の要素技術

  1. 手書きの予測機、自動化なし
  2. 手書きの特徴量、予測学習を自動化
  3. 手書きのアルゴリズム、特徴量と予測の学習を自動化
  4. 手書きなし、アルゴリズムの指定も含めてすべて自動化

slideslive.com

自動化は 3 つの観点 * ハイパーパラメータ最適化: 少ない試行回数でよりよいハイパーパラメータを得る * 特徴量エンジニアリング: 適切な特徴量を選択する * アルゴリズム選択: 適切な機械学習アルゴリズムを選択する

ハイパーパラメータの最適化

  • ベイズ最適化: Gaussian Process, TPE, SMAC
  • 早期停止: Successive Halving, Hyperband

おすすめライブラリ

  • Optuna: TPE, SuccessiveHalving に対応
  • scikit-optimize: GP に対応

特徴量エンジニアリング

特徴量エンジニアリングはすごく重要で、時間がたくさんかかる。

現在あるライブラリはどれも基本的なものだけ対応(ex, 欠損値保管、次元削減)

  • 特徴量生成
  • 特徴量選択

アルゴリズム選択

機械学習アルゴリズムチートシートがあるくらいに煩雑だが、 かといって自動化して嬉しいかどうか議論の余地ある。

機械学習におけるハイパーパラメータ最適化の理論と実践

pycon.jp

こちらも機械学習の自動化の話。

  • ハイパーパラメータ最適化
    • 機械学習にはチューニングすべきハイパーパラメータが多数ある
      • 例) ロジスティック回帰: がくしゅうりつ、正則化係数
    • 最適化の流れ
      1. 初期値を用いて train データに対して学習
      2. 誤差を見てパラメータを調整
          1. の繰り返し
  • Black-box 最適化
    • GP-EI
      • ベイズ最適化
        • HPO で一番人気
      • カテゴリカル変数用のカーネルを準備
      • 探索空間が狭くて多峰性が見込める場合は TPE より有利?
    • TPE
      • 目的関数のモデル化方法が GP-EI と異なり、カテゴリカル変数を直接扱える
      • 高次元で GP-EI より有利
    • CMA-ES
      • 進化計算における最も有力な手法の一つ
      • ハイパーパラメータ最適化への適用例も存在
      • 多変量正規分布から解を生成することで最適化
      • 時間計算量は良くない
  • Gray-box 最適化
    • successive halving
      • 経験的に、中間の評価値は最終評価値と相関がある
      • 各ポイントでの評価値を元に回の候補を絞り込む
      • 途中で見込みがなかったら打ち切り
    • Hyperband
      • 絞り込み方を変えながら successive halving
        • 積極的に絞り込む or もう少しゆっくり絞り込む or 全く絞り込まない or etc のトレードオフを考慮
    • BOHB
    • Population Based Training (PBT)
      • Sequential Search と Random Search のいいとこどり

おすすめソフトウェア

  • Optuna
    • defin-by-run スタイル
    • ログも綺麗で使いやすい
  • BoTorch -> AX
    • from Facdbook
    • adaptive experiment platform
      • HPO より幅広いプラットフォームらしい
      • バンディットアルゴリズムなども提供
  • Ray
    • 強化学習の RLib と相性がいい
    • 分散環境得意

Python による日本語自然言語処理

pycon.jp

nagisa をつかった日本語自然言語処理の話。

  • 自然言語処理のよくある流れ
    • コーパス→ 前処理 →データ →学習→モデル→評価
  • nagisa
    • feature
      • BLSTMs による単語分割と品詞タグ付け
      • pip install nagisa ですぐ使える
      • 単語、品詞推定、“語形変化の処理“ はない
  • 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

pycon.jp

wsgiミドルウェアとして実装されたプロファイラの話。

  • wsgi_lineprof
    • line-by-line profiler for web app
    • アーキテクチャ
      1. capture request/response
      2. get infromation on execution
      3. measure exec time per line
    • WSGI middleware
      • wrapper for WSGI app to ad features
      • why
        • HTTP リクエストを撮りたい
        • 既存のアプリケーションに組み込みたい
        • 簡単にオンオフしたい
    • Implementing WSGI Middleware
      • WSGI application
        • ただの Callable
      • WSGI middleware
        • app = Callable を受け取って Callable を返す
    • tracing
      • wsgi perf では PyEval_SetTrace を使う
    • 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

pycon.jp

Lovot 内部の並行処理の話。

スピーカーの人はビブリボン!の開発にも携わっていたとのこと。

Lovot は 人間とインタラクションしながら表示を行ったり音をだしたりと、 並行処理の塊で、 GroovX社ではいろいろ工夫して生産性を上げていた。

並行処理で気をつけた点として以下が挙げられていた:

  1. 開発を妨げない
    • 低レイヤを担当しないチームも含めて並行処理で患わせないようにする
  2. 適切な言語を選択する
    • これは Python を使えば解決
  3. 並行処理の導入で不明になるような処理・わからなくなるような処理を出さない
    • とりわけ mutable な状態・副作用とか
  4. プログラム内部を外部から観察・インタラクト可能にする
    • 自家製のヴィジュ荒いぜーションツールを用意した
  5. (たぶんプロダクト or OSS に対する)
  6. 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

pycon.jp

婚活のマッチングアプリ開発の話。 ほぼ Python の話でなく、婚活アプリでの苦労話とか。

  • マッチング最適化への道
    • 安定結婚問題
      • -> Gale-Shapley法をベースに開発
      • O(n2) で安定マッチング
    • マッチング手順の改善
      • 全対象→グループごとに並列実行
        • 計算量を制御できるが、マッチング精度の低下・少数派への悪影響がある
    • 環境の改善
      • Cloud Dataflow
      • pros
        • 大規模処理の水平分散を managed サービスに任せられる
          • BiGQuery, CloudStorage, Datastore のサポート
    • A/Bテストの実施
      • 改善のための基盤を準備
        • ユーザをタグ付けし、これを元にスコアリング処理を切り替える
    • 機械学習の適用
      • 機械学習経験者がいないので Google Cloud の AutoML を採用 → そこそこうまくいっているとのこと
      • Pros
        • BigQuery 連携が可能、バッチ予測・オンライン予測という
        • Cons
        • ブラックボックス部がおおい
          • モデルダウンロードできない

When AI meets 3000-year-old Chinese Palmistry Kai Hsu

pycon.jp

手相を機械学習してみた話。

Chinese Palmistry = 手相学になる模様。

機械学習の話としてはかなりベタだった。 健康、恋愛、仕事の 3 つの項目を手のひらの画像で学習していた。 手相学の方が新鮮だったくらい。

メディアが運用すべき持続可能な VTuber をつくる技術 @hirosaji

pycon.jp

Vtuber とタイトルにあるが、音声に関する機械学習の話が中心だった。 1 人の Vtuber の中の人が変わっても問題ないようにするには声質変換処理が良いだろうとのこと。

pytestによるCIレボリューション あべんべん

pycon.jp

pytest と CircleCI の話だった。