Chainerで「CS224d: Deep Learning for Natural Language Processing」
勉強の仕方
- Amazon Fire TV Stick
- Youtube
- 上記を使うと、字幕付きでお家のテレビで見られるの完全に近未来
リンク
- material
- video
- 講義まとめ:自然言語処理のための深層学習(CS224d) - Qiita
Chainerで「Python機械学習プログラミング」の例題を解く~感情分析~
目的
Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)
- 作者: Sebastian Raschka,株式会社クイープ,福島真太朗
- 出版社/メーカー: インプレス
- 発売日: 2016/06/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
- 上記の本の解説部分(1章~6章)は読み終わったので実際に例題を解いてみたい。
- どうせなら流行りのDeep LearningライブラリChainerを使って解いてみたい。
Chainerにコントリビュート ~Documentation編~
Chainerにコントリビュートしよう
- 以下がDocumentationに関するIssue。
- その中でも関数の説明に関するIssueがこれ。
作業手順
手順の確認
[WIP] Improve docs of functions and links · Issue #2182 · pfnet/chainer · GitHubに手順が書いてるので確認
gitレポジトリの準備
- 自分のスペースにchainerをforkする(pfnet/chainerのmasterと自分のmasterが追従するようにはここ )
- documentation用のbranchを作成する(ex. improve-docs-examples)
softmax関数にDocumentationを追加してみよう
- 様子を見る
- chainer/softmax.py at master · pfnet/chainer · GitHub
- 関数にはdocは付いているが、クラスにはついていない。
- 既にDocumentation済みの関数を見てみる
- 同様に、関数にはdocは付いているが、クラスにはついていない。
- ただ、よりtemplateに近い形になるように関数のdocが修正されている。
テンプレートを見る
真似して書く
- ちゃんと生成できるかチェックする
- プルリクエスト作成
Chainer導入
前提
Python
- Python 2.7.6+, 3.4.3+, 3.5.1+, 3.6.0+が入っている
- NumPy 1.9, 1.10, 1.11, 1.12が使える
- six 1.9が使える
- cythonが入っている
- virtualenvが使える
CUDA
- CUDA 8.0のインストールが済んでいる
- g++ 4.8.4+が入っている
Install
- 基本はここ
手順
- 適当な場所で
git clone git@github.com:pfnet/chainer.git
- virtualenvの環境作成
~/dev/chainer$ virtualenv venv --python=/usr/bin/python3.4 ~/dev/chainer$ source activate venv/bin/activate
- cuDNN用の環境マネージメントツールcudnnenvでcuDNNを入れる
$ pip install cudnnenv $ cudnnenv install v5-cuda8 $ cudnnenv activate v5-cuda8 $ cudnnenv version v5-cuda8
- 必要な環境変数を設定する
$ tail -n 11 ~/.bashrc #path for cuDNN export LD_LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LD_LIBRARY_PATH export CPATH=~/.cudnn/active/cuda/include:$CPATH export LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LIBRARY_PATH # path for chainer export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH export CFLAGS=-I~/.cudnn/active/cuda/include export LDFLAGS=-L~/.cudnn/active/cuda/lib64 export LD_LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LD_LIBRARY_PATH
- 開発者ようにchainerをビルドする
~/dev/chainer$ python setup.py develop ... ... Finished processing dependencies for chainer==1.21.0
これからのパーソナルデータの話(1) ~はじめに~
はじめに
個人の情報の活用が進む現在
日々、SNSやWebサービスを利用する中で、私たち自身の個人の情報がサービス提供者に収集され、私たちユーザーの利便性向上のために活用されていることを感じます。例えば、Twitter広告[1]では、広告主がユーザーの性別、行動履歴、興味などで広告を出したいユーザー層を指定することができます。これは、Twitterがユーザーの情報を収集することで実現ができています。同様のサービスは、Google、Facebook、国内ではヤフーなども提供しています。
個人の情報を利用してユーザーの利便性を向上を目指す動きは、広告分野だけではなく他の分野でも行われています。amazonなどのeコマース分野、Apple・Youtubeなどの音楽・動画配信分野、Facebook・LINEなどのSNS分野も挙がるでしょう。
個人の情報の活用の背景
上記を見るとわかるように、Webサービスを提供する大企業のほとんど全てが、個人の情報を用いてユーザーの利便性の向上を目指しています。この理由として、様々な要因が挙げられますが主に以下の3つが要因だと考えられます。
今回は項目として上げるだけで詳しくは話しませんが、簡単に説明します。上記3つの要因により個人のデータに対して以下のような変化が生まれました。
- 「スマートデバイスの普及」により大量のデータが生成されるようになった
- 「深層学習に代表される機械学習、AI技術の進化ハードウェア・ソフトウェア技術の進化」により対象のデータを分析できるようになった
- 「ハードウェア・ソフトウェア技術の進化」により大規模なデータを高速に利用できるようになった
このように、大規模なデータを生成・分析・利用できるようになったことが背景にあると考えられます。
この文章を書く理由
まだ、しっかりと書きたいことの方向性が決まっていませんが、以下のような疑問を持つようになり、それについて調べたいと思っています。
- パーソナルデータって何なの?
- 個人情報とパーソナルデータの法律的解釈
- 企業のプライバシポリシーの変遷
- これからのパーソナルデータの定義
- パーソナルデータはどのように活用されるの?
- パーソナルデータは大企業に専有されていいの?
- 大量のデータを持つ企業が勝ち残るのか
- 他の企業は生き残れないのか
- 個人としてパーソナルデータを活用するには?
- パーソナルデータの持ち主はだれか
- パーソナルデータをユーザー自ら活用できないのか
参考文献
JavaによるRESTfulシステム構築(2) ~RESTfulサービスの設計~
目的
- RESTfulな分散システム構築の勉強がしたい
- Restの実現方法の1例を学習したい
- Javaに触れてみる
概要
- 架空のEコマースWebストアを設定し、簡単なオーダーエントリーシステムに対応するRESTfulインタフェースを定義してみる
- オブジェクトモデルをチェック
- 分散IFを追加
- URI定義
- データフォーマットの定義
- HTTPメソッドの設計
オブジェクトモデル
- ユーザー機能駆動等でオブジェクトを列挙したい
- Order
- Customer
- LineItem
- Product
URIのモデル化
- 分散IFを作成するためには、システム内に分散する各エンドポイントを定義することが必要。
- RESTfulでは通常エンドポイントをリソースと呼び、URIを使って表現する。
- 例
- /orders
- /orders/{id}
- /products
- /products/{id}
- /customers
- /customers/{id}
- URI設計について
- URIはミニRPCメカニズムとして使用されるべきではなく、各操作(関数)を示すべきではない
- HTTPメソッドとデータ構造を組み合わせて、分散RESTfulシステムの操作が一意に鳴るように設計すべき
データフォーマットの定義
- ネットワーク経由でクライアントに送るリソースを決める必要がある。
- 通常はschemaでデータ構造を定義し、そのデータ構造にあったデータをやり取りする。
選択肢
HTTPメソッドの割当
- 個々のリソースに公開するHTTPメソッドと、その役割を定義する。
- 必要十分な機能を各リソースに割り当てるために必要である
全オーダー、全顧客、全製品の参照
- リソース
- /orders
- /products
- /customers
- GET
GET /products HTTP/1.1
GET /products?startIndex=o&size=5 HTTP/1.1
各オーダー別、各顧客別、各製品別のデータ取得
- リソース
- /orders/{id}
- /products/{id}
- /customers/{id}
- GET
GET /orders/232 HTTP/1.1
オーダー、顧客、製品の作成
PUT
- リソース
- /orders/{id}
- /products/{id}
- /customers/{id}
- PUT
PUT /orders/233 HTTP/1.1
POST
- リソース
- /orders
- /products
- /customers
- POST
POST /orders HTTP/1.1 Content-Type: application/xml <order> <total>199.02</total> ... </order>
オーダー、顧客、製品の削除
- DELETEを使う
オーダーのキャンセル
DELETEの意味のオーバーロード(あんまりよくない)
- リソース
- /orders
- DELETE
DELETE /orders/233?cancel=true
状態と操作
- ある操作がリソースの状態である場合、その状態をデータフォーマット内に定義するべき
PUT /orders/233 HTTP/1.1 Content-Type: application/xml <order> <total>199.02</total> <cancelled>true</cancelled> ... </order>
- cancelledのデータを一掃する
POST /orders/purge HTTP/1.1
keyword
- エントリーポイント
エントリーポイントとは、プログラムを実行するうえで、プログラムやサブルーチンの実行を開始する場所のこと。プログラム全体のエントリーポイントとなる場所を含むルーチンがメインルーチンである。C言語の標準では、mainという名前の関数(の先頭)がエントリーポイントであり、各関数のエントリーポイントは、それぞれの関数の先頭である。
- エンドポイント
- エンドポイント、というのは「きわ」という意味。クライアント側とサーバ側の境界線のところがエンドポイント。