こんにちは、taisa です。2018年5月31日(木) ~6月2日(土)にかけて行われた「PyCon APAC 2018 in Singapore 」に参加してきました。本レポートでは最後の2日間に行われたカンファレンスデイの様子やセッション以外の現地滞在の様子などを2回に分けて、当日参加したPyCon JPスタッフや元スタッフのメンバーがお届けします。
PyCon APACとは
(taisa )
PyCon APACとは、Pythonユーザの情報共有や交流を目的として世界各国で開催されているイベント「PyCon」のアジアパシフィック版のカンファレンスです。PyCon APACは2010年に初めてシンガポールで開催され、今年で9回目の開催となります。
PyCon APACはアジア太平洋の各国で年に1度開催されます。近年では、台湾・韓国・マレーシアで開催されました。私は昨年が初めての参加でしたが、今では年に1度の楽しみなイベントの1つになっています。近年に開催されたPyCon APACの様子は下記の参加レポートにてご確認できます。
PyCon APACは誰でも参加できるカンファレンスです。ですが「興味はあるが、1人では不安」という人もいるかと思います。そういう人のために、一般社団法人PyCon JP 代表理事の寺田さんが企画している「PyCon APAC参加ツアー 」というものがあります。こちらに申し込むとツアーで行くメンバーと一緒に参加することができるので是非興味のある方は次回参加してみてください。
シンガポールと今年のカンファレンス会場
(taisa )
今年の開催地はシンガポールでした。シンガポールはご存知の通り大変治安がよく、安心して生活することができました。ただ一方で、宿泊や飲食などの値段がやや高く(安いところもあります) 、大変なところもありましたが、タクシーやGrab の値段は安いので、移動に困ることはありませんでした。
カンファレンス会場は、シンガポール国立大学(NUS)でした。NUSは2016年から現在において、アジア大学ランキング1位の大学です。カンファレンスは、キーノート以外のトークセッションは「Data Science」「 Web Development / DevOps」「 Other」というジャンルに分かれ、3トラック並行で進行しました。
キーノートが終わると、まずブッフェ形式で朝食が振る舞われます。その後2つのトークセッション後、昼食がこちらもブッフェ形式で振る舞われます。どちらも大変美味しいので食べ過ぎには注意が必要です。またコーヒーや紅茶、水やジュースも常時用意されていました。トークセッションは基本的には聞くことがメインになりますが、スポンサーブースではスポンサーとして出展している企業の担当者と英語でコミュニケーションする機会が生まれるので、こちらも楽しみのひとつです。
ランチの模様
キーノート :“Tell me your secrets - Privacy in machine learning systems”―Katharine Jarmul
(taisa )
1日目のキーノートはKatharine Jarmul 氏によるセッションでした。Katharine Jarmul氏はkjamistan のFounderであり、KI Protect のCo-Founderでもあります。KI Protectでは「The security layer for data science and AI」という名のもとに、セキュリティに関するプロダクトを提供しています。
タイトルは「Tell me your secrets - Privacy in machine learning systems」で、現代におけるプライバシー保護に関する内容でした。このセッションの背景には、現在グローバル化やクラウドサービスの利用拡大、ビッグデータの大幅な増大があります。これにより、個人情報保護の重要性が高まり、同時にサイバー攻撃などによる個人情報漏えいのリスクも急速に高まっているという状況があります。
そんな中、欧州連合(EU)は、2018年5月25日に一般データ保護規則(GDPR) をという規則を施行しました。GDPRは「General Data Protection Regulation」の略で、「 EU内の全ての個人のためにデータ保護を強化し統合する」ことを意図しています。
このセッションの中では、GoogleやAppleがどのようにデータを集めているかの例をあげた上で、そのデータからあらゆる言語モデルを利用してデータを非匿名化する例(クレジットカード番号を見つけ出す方法など)を紹介していました。そこからデータサイエンスやAI時代におけるセキュリティの必要性を、自身のプロダクトを交えながら説明しました。
つまり、これからはクラウドに無条件でデータを渡すのではなく、自分のデータは自分で管理しましょうということだと思います。そして最後はそのメッセージを込めてみんなで「We are Data Guardians!」と唱和して終わりました。
みんなで「We are Data Guardians!」と唱和
本レポートと合わせて以下の記事を読むと理解が深まると思います。
セッションの感想
データサイエンスやAIが普及する中でGDPRの施行がはじまり、これまでとはまた違った新しいインターネットの流れが感じられるセッションでした。
セッション:“Build a Data-Driven Web App That Everyone Can Use”―Galuh Sahid, Data Engineer at Midtrans
(横山直敬)
こんにちは、横山です。初の海外カンファレンス参加ということで、英語でも理解できそうな入門的な内容のトークを聴きました。1つ目は機械学習モデルを組み込んだWebアプリの作成について紹介します。
データサイエンティストが自身の作った機械学習モデルを他の人に使ってもらいたいと考えたときに、どのような方法を取るでしょうか? スクリプトファイルを配って各自で実行してもらうということが考えられますが、リポジトリからダウンロードしてPythonコマンドで実行するといったいろいろな手間が発生します。機械学習モデルを組み込んだWebアプリを作ることで、そのような手間をかけずに、自分の作ったモデルを使ってもらうことができます。
この発表で作るWebアプリには以下の機能があります。
ユーザーは自分のデータを入力できる
入力されたデータに従ってサードパーティのAPIなどからデータを取得する
自分が作った学習済みモデルに、取得したデータを入力する
学習済みモデルが出力した予測結果をグラフとして画面に表示する
Webアプリを作るには、覚えるべきことがたくさんあるように思えます。ですが、HTMLとPythonだけで作ることができるのです。
機械学習はscikit-learnとPandas、WebアプリはFlask、結果の表示にはmatplotlibを使います。
機械学習モデルを組み込んだWebアプリの作成には、いくつかの注意点があります。
信頼できるデータを読み込んでいることを確認する
モデルの作成と予測で使う機械学習ライブラリはバージョンを揃える
それぞれのバージョンが異なると、意図しない結果が出ることもある
このような解説に合わせてコード例も提示されました。最後に、Webアプリをさらにインタラクティブにする方法として、ReactやVue.js, D3.jsなどJavaScriptとの組み合わせの提案と、実際に作ったWebアプリの事例の紹介がありました。
セッションの感想
要点を押さえた構成のスライドが読みやすく、コード例も提示されることもあって、英語が飛び交う海外カンファレンスに圧倒されつつあった私にとっても理解しやすい発表でした。
Pythonを学ぶWebサービスに携わっているため、Webと機械学習の融合には学習の応用の可能性として興味を感じました。
Flaskは軽量Webフレームワークで覚えやすいですし、機械学習についてもチュートリアルが充実しているので発表で得た学びを自分の手で試してみたいと思いました。
セッション:Teaching Computers ABCs: A Quick Intro to Natural Language Processing―Lory Nunez, Data Scientist/Data Engineer at J.P. Morgan
(横山直敬)
引き続き、横山です。2つ目に聴いた、自然言語処理のユースケースについての発表について紹介します。
自然言語処理のテクニックやツール、ユースケース、そしてオープンソースライブラリを使って自然言語処理アプリケーションを作る方法について解説する内容でした。
自然言語処理を使うことによって、テキストデータからさまざまな情報を得ることができます。
自然言語処理の手法として、Embedding(単語埋め込み・ベクトル化とも呼ばれる)というものがあります。この発表で紹介されたEmbeddingの手法は以下の2種類です。
単語の出現頻度で考える手法
単語数カウント・TF-IDF
ある単語の周辺に出現する別の単語の確率的に扱う手法
Word2vec
この発表ではEmbeddingを応用した2つのWebアプリをユースケースとして紹介しました。
Wikipediaのテキストをもとに人名同士の類似度を表示するWebアプリ
災害時のツイートの内容から緊急度を予測するWebアプリ
発表時のみの公開のようで、記事執筆時点ではアクセスできませんでした。
また、自然言語処理の応用する際の自然言語処理の流れ(データ取得、データ解析、前処理、ベクトル化、機械学習、モデルの評価)とそれぞれの部分で使われるライブラリが、コード例を交えながら解説されました。代表的なライブラリとしては以下のようなものがあります。
データ取得: json, Beautiful Soup
データ解析: re, scikit-learn
前処理: NLTK, gensim
ベクトル化: gensim, scikit-learn
機械学習: scikit-learn
モデルの評価: scikit-learn
セッションの感想
Embeddingの仕組みを表す図表やサンプルアプリの紹介を交えた説明があり、自然言語処理の初学者や未経験者にとってもEmbeddingがどのような手法なのかイメージしやすい発表でした。
日本語の文章を扱う自然言語処理では、単語を区切る処理が必要になります。そのためのライブラリを導入する必要があり、少し複雑になります。日本語での自然言語処理に興味のある方も、まずはここで解説された手法やライブラリを用いて、英文を対象にした自然言語処理から入門してみるのがよいでしょう。
セッション:Better Care and Feeding of Machine Learning Models―Jeanne Choo , Engineer at AI Singapore
(清田史和 )
こんにちは清田です。データサイエンティストでは無いのですが、見聞を広めるべくデータ系のトークを中心に参加しました。今回レポートするトークは、機械学習のモデルをいい感じで育て扱いましょう的な内容の、初級~中級者向けのトークでした。
まず、登壇者の経験から学んだことの説明がありました。その中で、"Reproducibility(再現性)"について整理を行い、どのように機械学習のモデルをマネージすることができるかという話でした。
そして、スライドにある"Reproducibility has different levels(再現性には段階がある)" の話しに入りました。
次の7段階に整理されていました。
フォルダーで管理
検索性の高いファイル名を設定
関数や自動化のスクリプトを利用したビルド系のツール準備
再現性のためのレポート
バージョンコントロール
モデル開発環境の標準化
コンテナ化
バージョンコントールまでは普段考えつくのですが、次の段階に課題があるという話でした。
次に、標準化の例として、以下のディレクトリ構造について紹介がありました。機械学習の管理構成がしっかりあると、複数人での作業の効率は確実に上がるという話でした。実際の構成例は以下になります。
ディレクトリ構造
├── LICENSE
├── Makefile <- Makefile with commands like `make data` or `make train`
├── README.md <- The top-level README for developers using this project.
├── data
│ ├── external <- 3rdパーティのデータ.
│ ├── interim <- 前処理された中間地点にあるデータ.
│ ├── processed <- 最終的に学習するために正準化されたデータ.
│ └── raw <- オリジナルのデータ.
│
├── docs <- Sphinx プロジェクトで構成されたドキュメント
│
├── models <- 学習モデル、モデルサマリー、モデル予測
│
├── notebooks <- Jupyter notebooks. 命名規則は数字をつかって序列する,
│ 製作者のイニシャルとダッシュ `-` 区切り文字で説明, 例.
│ `1.0-jqp-initial-data-exploration`.
│
├── references <- データ辞書、マニュアル、およびその他すべての説明資料.
│
├── reports <- HTML、PDF、LaTeXなどの生成された分析レポート.
│ └── figures <- レポート作成に使用される生成されたグラフィックスと図形.
│
├── requirements.txt <- 分析環境を再現するための要件ファイル、例.
│ 環境設定コマンド `pip freeze > requirements.txt`
│
├── setup.py <- pipによるインストールを可能する `pip install -e`
├── src <- このプロジェクトで使用するソースコード.
│ ├── __init__.py <- srcをPythonモジュールにする.
│ │
│ ├── data <- データをダウンロードまたは生成するスクリプト.
│ │ └── make_dataset.py
│ │
│ ├── features <- オリジナルデータから学習モデル用のデータを生成するスクリプト.
│ │ └── build_features.py
│ │
│ ├── models <- モデルをトレーニングし、訓練されたモデルを使用して予測を行うためのスクリプト.
│ │ ├── predict_model.py
│ │ └── train_model.py
│ │
│ └── visualization <- 理解の深まる内容を可視化するスクリプト.
│ └── visualize.py
│
└── tox.ini <- see tox.testrun.org
次に、"data diffs on top of code diffs" コードの差異の上でのデータの差異についての話があり、学習モデルの品質管理をするための例として"SHAP"の紹介がありました。
データの特徴がどのように学習モデルに影響するかなど可視化できるもので、学習モデルの品質管理に繋がるものなのかなと思います。
最後に、SpinnakerやKubeflowなどを利用し、それぞれのプロセスや環境をコンテナ化し独立させることでことで、学習環境、分析環境、学習モデルの管理を更に容易にしたいという話がありました。
セッションの感想
私の場合、仕事で画像を使ったDeep Learningの分野にも多少携わるのですが、教師付きデータ、学習ごとの設定、学習されたモデルの品質管理について何かよい方法がないか考えていたところでしたので、この話が聞くことができて参考になりました。先人たちが既に同じ様な課題にぶつかり、一定の解決方法を持っているのではないかと思っていました。
標準化までは何となくイメージはできたのですが、コンテナ化(Containerisation)について知らなかったので、触りが聞けてよかったです。
実際、私のようなソフトウエア/システムエンジニアにとっては、開発する場合、その環境準備をすることは当たり前になっていますが、データサイエンティストにとっては、まだ一般化していないことなのかなと思ったのとデータサイエンティストとソフトウエア/システムエンジニアがより近い存在になってきているのかなと思いました。
APACで発表を行ってみて
(寺田学)
一般社団法人PyCon JP代表理事の寺田です。PyCon APACには3年連続の参加となります。シンガポールでのAPAC開催への参加となると、初回開催の2010年以来の参加となりました。
スピーカーとして登壇
海外カンファレンスには毎年2回程度参加しています。最近はトークセッションを持とうと積極的に応募をしています。ここでは、海外カンファレンスのトークセッションスピーカーとなった経緯とその為に行ったことを、トーク挑戦者が増えることを期待してまとめていきます。
モチベーション
カンファレンスに参加するだけでも楽しく刺激的なのです。楽しさを追求すると、多くの人とコラボレーションしたり、発表者側になることだと思っています。国内のカンファレンスでもそうですが、海外に渡ると余計に、発表者になることが重要だと感じています。誰も知らなかったところから、発表者として認知され、場合によっては参加者から声を掛けてくれたりします。
さらに、英語での発表となると、今まで経験していないことをやり遂げる楽しさや、もっとうまく英語でも発表できるようになりたいと思え、自身の学習モチベーションにつながります。
応募
多くのカンファレンスでは、トークセッションの応募を事前に受け付けています。これをCfP(Call for Proposal)と呼んだりします。応募された中からスタッフ側が審査を行い、当落が決まります。
事前に、海外発表経験者である清水川さんのBlog や記事 などを参考にし、清水川さん本人にも意見を聞きながら、発表内容についてまとめ始めました。タイトルや概要、発表予定の内容リストを書き上げ、清水川さんを始めとした何名かにレビューをしてもらいました。
今回の発表内容は、「 Introduce syntax and history of Python from 2.4 to 3.6」というタイトルで、Pythonの歴史と文法の変更についての発表を応募しました。
準備
海外の発表で一番大変なのは準備です。英語でスライドを作成し、事前にスクリプトも用意しました。私の英語力では、語彙が少なくほぼアドリブができません。よって話す内容をスクリプトとして書き出す努力をしています。
スライドが完成した時点で、Pythonコミュニティの皆さんにレビューをお願いしました。これは、技術的な間違えなどを減らし、誤解を生まない表現にするために、大きなイベントの時は毎回実施しています。難しい指摘などもあり、すべての修正ができないこともありますが、修正することによりわかりやすく誤解を生まない表現になり良かったと思います。
スライドの作成の後が大変です。トークのスクリプトを書き上げ、英語の先生に文法的な間違いがないかなどのチェックを受けました。トークの練習や言い回しの難しい部分のスクリプトの修正を行いました。
今回の場合、スライドの修正とトーク内容の修正で出発ギリギリとなってしまい、ほとんど発表の練習ができませんでした。これは大きな反省です。
当日の発表
トークスタート
私のトークは初日のキーノート直後のRoom.2で行われました。直前が30分間の休憩時間を挟んでいたので、休憩をとらずに発表部屋に行き、スクリーンチェックを行い、ネットワークの確認、ピンマイクの取り付けなどをしてもらいました。
時間どおりに、司会者から私の紹介を受け、発表が始まりました。英語での発表は本当に大変で、思うように言葉が出てこなかったり、読む予定のトーク内容を飛ばしてしまって焦ったりしました。
今回の場合、前半にPythonの歴史を紹介し、後半にコードベースで解説しました。歴史の部分は英語で内容を伝えるのが難しく、苦戦しました。スライドの後半は、Pythonのコードベースでの比較しながら説明したので伝えやすかったです。
トーク後の質問時間が十分に取られており、そこで何個かの質問がでました。最初に発表の内容と関係が薄いPythonの文法の質問があり、質問内容が全く理解できませんでした。そんな時に、会場にいる参加者が私の代わりに回答をしてくれました。他の質問も、英語で理解するのが難しく、司会者に助けてもらったりし、なんとか乗り越えた感じです。
当日の発表資料
英語でのトーク登壇は非常にハードルが高く、うまくできませんでした。ただ、コードベースの内容には興味を持ってくれたと思います。次回は練習を重ねて発表に臨みたいと思います。
終了後に司会者から記念品の授与
PyCon APACミーティング
PyCon APACは、アジア各地で毎年開催地を決めて行われています。2010年にシンガポールで始まり、3年間シンガポールで開催された後、東京、台北(2年連続) 、ソウル、クアラルンプールと続いて、今年はシンガポールに戻ってきました。
イベント開催経験のある各国の代表者が中心になって、翌年の開催地をAPACイベント中に議論して決めたり、立候補を募ったりしています。また、APACイベント中に、オープンなディスカッションを行うことが通例となっています。今年も、初日のランチタイムを使い、各国からの参加者が集まりミーティングを行いました。
参加した各国は以下のとおりです。
シンガポール
マレーシア
インド
フィリピン
インドネシア
台湾
香港
タイ
韓国
日本
時間も限られていたことから、来年の開催地決定まではできませんでしたが、開催を希望している国々があることを確認しました。また各国の事情や今後のイベントスケジュールを共有しました。
このように毎年のように代表者が集まり、様々な議論ができることは非常にありがたいことだと思っています。
APACミーティング参加者記念写真
最後に
(taisa )
以上でDay1のレポートは終わりです。次回のDay2レポートも「キーノート」や「セッション」のレポートに加えて「はじめて海外カンファレンスに参加してみて」や「夜の懇親会について」「 シンガポールについて」のコラムもありますのでお楽しみにしてください。