機械学習エンジニアレスな機械学習プロダクト支援プロジェクト、DAWNの紹介

# 概要
> 機械学習プロダクト作成支援のための5カ年プロジェクト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147520/9f7e0eec-d45f-e1c2-38eb-6757288336c3.png)

DAWN (Data Analytics for What’s Next) はStanford 大学の行なっている  **機械学習をもっと身近にしよう** という プロジェクトです。

Stanford 大学は昔からこの手の機械学習の知見を機械学習の専門家でない人間が簡単に扱えるようにする研究を行なっており、例えば [DeepDive](http://deepdive.stanford.edu/) (知識ベース開発支援ツール) や [Snorkel](https://www.snorkel.org/) (ラベリング支援ツール) などが先行プロジェクトとして挙げることが出来ます。

一般的に機械学習を製品化するには、博士とつよつよ論文Accept数を引っさげた **つよつよ機械学習エンジニア** とその製品が解決するための **各問題への専門家** (例えば株価予測なら株取引についての専門家)、それと **インフラ** などの管理が必要ですが、これを解決することが本プロジェクトの目標になっています。

このプロジェクトの面白いところは、支援を行なっている団体が、Google や vmware 、そして NEC が入っていた、というところです。NTTやYahooが入っていることは多く見られますが、NECは自分の見てきた限りあまりなかったのでちょっとびっくりしました。

# このプロジェクトのやりたいこと

DAWN の目的は、 **End-to-End な機械学習開発環境の提供** です。

但し昨今の BERT のような意味での End-to-End ではなく、データ収集(Data Accquisition)→データの整形(Feature Extraction)→機械学習のトレーニング(Model Training)→プロダクト化(Productionizing)までを支援する、という意味での End-to-End です。

下の図は、それぞれをどのような要素で支援していく、ということを示した概要図になります。例えば Interface の要素として簡単に紹介できるものとしては、 機械学習のためのラベリングを支援するツール、Snorkel を挙げることが出来ます。こいつの使用方法については先行のものがあるので、[こちら](http://kento1109.hatenablog.com/entry/2018/01/09/121048) を参照して下さい。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147520/597be76f-535c-92e1-c44c-4717695e661c.png)


## プロジェクトの3つの柱
目的はあっても広すぎるので、本プロジェクトは更に3つの柱を建てています。

1. Target end-to-end ML workflows. 
   
   DAWNは現状の機械学習における問題として、データの前処理や製品化を上げています。これらは高コストな上に、かなりの専門知識が必要になります。そのためこれらを一貫した枠組みに落とし込むことが1つ目の柱になっています。
2. Empower domain experts.    

   機械学習プロダクトの成功には **そのプロダクトが解決する問題に対しての専門家の助力** が必須です。彼らが機械学習プロダクトの開発に参入できるようにするには、扱いやすいインターフェースや説明可能な機械学習モデルの提供が必要になります。
3. Optimize end-to-end.

機械学習モデルのプロダクト化や訓練には高級なハードウェアが必要になるケースが多くあります。これらをより低コストにするためのハードウェアエンジニアリングも、柱の一つとして組み込んでいます。

# 研究の具体例
研究の具体例として、いくつかの論文を簡単に紹介します。全体は[プロジェクトページから見ることが出来ます](https://dawn.cs.stanford.edu/papers/)。

##  Learning from Dialogue after Deployment: Feed Yourself, Chatbot!

対話システムをプロダクトに放出した後、継続的にその対話システムが学習できるようにする枠組みの提案。うまい対話が出来たのではないか？という別のツールの判定に基づいてそれぞれを正例、不例として新しい教師データとする、みたいなことをする。

非常に良い結果が得られているため、対話システムの研究の最先端として十分読む価値がある。

```text:論文中で紹介された対話例(和訳)
Bot: これからチャットボットと対話をします。何か適当な言葉を入力して下さい。
Human: やあ、こんにちは
Bot: やあ
Human: 調子はどう？
Bot: 良いよ、お肉でも食べる？
Human: そいつは美味しそうな話だね。ところで僕は今Youtubeを見ているんだよね。
Bot: そうなんだ…僕はスターウォーズを見るのが特に好きだなぁ。
Human: わかる。スターウォーズは面白い映画だよね。
Bot: ホラー映画/動画とかはどう？僕は両方みるんだけど
Human: うん。そういったものも見るよ
Bot: 僕はオズの魔法使いみたいな古典的な映画もみるんだよね
Human: ところで泳ぐのは好き？
Bot: ビーチで自転車こいだりするのが好きなんだ。
Human: そいつは面白そうだね
Bot: 公園でハイキングもするんだ
Human: 他には何かすることあるの？
Bot: 中央公園を走ったりもするよ
Human: へぇ、君はニューヨーク出身かい？
Bot: ニューヨークの北の方だね
Human: それはすごい、僕はカナダに住んでいるんだ
```

## Deep Text Mining of Instagram Data Without Strong Supervision

インスタグラムのある投稿についてのリプライの中から特定の属性(服に関する感想とか)を抽出するための研究。これは公開されるラベルデータセットは高価かつ入手困難であるという側面から、様々な既存ツールの予測を組み合わせた所謂ランダムフォレストみたいなことをして予測を行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147520/8124ec2e-3d10-6f28-3ff8-d8f7fe639757.png)

## Fonduer: Knowledge Base Construction from Richly Formatted Data

知識ベース構築のためのライブラリ Founder とその実用例の紹介。かなりデータフォーマットが厳しいが、そういったデータフォーマットに従わせることさえできれば、うまいこと知識ベースが構築できる、らしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147520/67ec5d20-149d-620b-e8f4-c850f7967a28.png)


## Automating the Generation of Hardware Component Knowledge Bases

ハードウェアの製品仕様書から知識ベースを構築する手法の提案。
主にはPDFの図から似た使えそうな情報を抽出する、というような内容になっている。
これはライブラリ Founder というものを使って研究されており、再現実験は難しいが、実世界への応用の敷居が低いと考えられる。（とはいえメモリ1TBとかストレージ36TBとかなかなかぶっ飛んだマシンが必要）


# 次に読んだら良いかも

- Snorkel DryBell

Google が Snorkel を応用して作ったテキストのクラス分類のためのフレームワーク。実験内容も実験に使ったデータも黒塗りだけど、実際に Snorkel を用いることでラベリングが圧倒的に楽になったという結果を確認することが出来る。

 
# 感想
Azure や Google、Sony(?) の **機械学習を手軽に〜** の先駆けかな？というのが第一印象でした。しかしその中身は彼らのそれに比べると大分本格的に、ハードウェアまでを手広くカバーする内容になっていました。

実際このプロジェクトは 2017 年からかなりの量の論文を通しており、SOTAな界隈とは違った面白さがあるなぁと思いました。


# 関連リンク
- 本家のプロジェクトサイト    
https://dawn.cs.stanford.edu//
- 下書き    
https://github.com/MokkeMeguru/seminar/blob/master/cybozu-labuse/dawn/intro.org