機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

Stan:階層モデル②

はじめに 前回は階層モデルの基本的なことを書いた。 kento1109.hatenablog.com今回は実際のデータでもう少し基本を確認する。 過分散 今回は緑本(データ解析のための統計モデリング入門)で紹介されている階層モデルの導入部分を実践する。データとしては…

Stan:階層モデル①

はじめに 今回は「アヒル本」第8章について整理する。 階層モデルは簡単に説明すると、「説明変数だけでは説明がつかない、グループ(個人)に由来する差異」を扱うための手法。推定に使えるデータは大量にあるが、グループや個人当たりのデータは少ない場合…

Pytorch:テキストの前処理(torchtext)②

前回のtorchtextの使い方の続き。kento1109.hatenablog.com今回、実際の処理でどうすれば良いんだってなったところを確認する。 訓練用と検証用 訓練用と検証用のデータを取り込む。 Datasetクラスのsplitsメソッドが使用できる。使い方は以下の通り TEXT = …

Stan:ポアソン混合モデル

はじめに 今回は、アヒル本から離れて「ポアソン混合モデル」をモデリングする。 今回は前回の対数事後確率の計算が必要となる。 kento1109.hatenablog.com ポアソン混合モデル 例えば、ある非負の値を取る観測データが以下のような分布になったとする。 ヒ…

Stan:ベルヌーイ分布(対数事後確率計算)

はじめに 前回は、ベルヌーイ分布を用いて事前確率のことを書いた。 kento1109.hatenablog.com今回は、高度なモデルを作る際に避けては通れない「対数事後確率計算」についてまとめる。 対数事後確率計算 対数事後確率とは何なのか。 これはサンプル結果に出…

Stan:ベルヌーイ分布(事前分布の導入)

はじめに 前回は単回帰分析を見ながら基本的なことを確認した。 kento1109.hatenablog.com今回は、確率分布の問題としてなじみのある「ベルヌーイ分布」を見ていく。 また、事前分布の違いについても確認する。 無情報事前分布 まずは、以下のようにデータを…

Stan:単回帰分析

はじめに 統計モデリングの勉強の一環に「Stan」を触ってみる。 書籍は「アヒル本」(StnaとRでベイズ統計モデリング)を参考とする。初回は、統計モデリングの「Hello world」と言われる単回帰分析を扱う。(アヒル本のChapter.4) 前処理 データは、社員の…

Pytorch:RNNで名前を生成する(文章生成)

はじめに PytorchでのSeq2Seqの練習として、名前生成プログラムを実装する。実装は以下のチュートリアルを参考に進めた。Generating Names with a Character-Level RNN — PyTorch Tutorials 0.3.1.post2 documentation目標はSeq2Seqの理解であるが、まずは基…

Pytorch:単語のベクトル表現をセットする(torchtext)

はじめに Pytorchの処理で学習済みの単語分散表現(Word2Vec, Glove等)を使いたい場合がある。直接、Embedding層にセットする場合が以下の方法で問題ない。 kento1109.hatenablog.com前処理として、torchtextを利用する場合はそうはいかない。 torchtextは…

Pytorch:テキストのバッチ化(BucketIterator)

前回、torchtextに関する基本をまとめた。kento1109.hatenablog.com今回、もう少し実用的なことをメモする。 BucketIterator テキストを学習データとする場合、当然、文章の系列長は異なる。文章をバッチ化する場合、パディングして系列長を揃える必要がある…

Pytorch:Embeddingに学習済みの重みを使う

やりたいこと 事前にWord2Vecなどで学習した分散表現をネットワークの重みとして用いる。結論としては、Embedding層の重みにテンソル型に変換した分散表現行列をセットするだけで良かった。備忘録としてコードを残しておく。 (ここでは、Googleの学習済みの…

PyTorch:Bi-LSTM+CRF②(予測)

はじめに 前回は学習に関するコードを読んだ。 kento1109.hatenablog.com今回は「予測」の部分を読んでいく。 予測 予測時は、viterbi algorithm を用いて効率的に計算する。 最後に_viterbi_decode関数を確認する。 _viterbi_decode グラフの最短経路を求め…

PyTorch:Bi-LSTM+CRF①(学習)

はじめに 今回は、Bi-LSTM+CRFに関して整理する。 最近の深層学習を用いた系列ラベリングに関する論文は、この手法でSOTAを達成していることが多い。尚、Bi-LSTM+CRFの基本的なことに関しては、以前のTheanoでの記事で述べた。 kento1109.hatenablog.comTh…

PyTorch:LSTMの実践(CoNLL)

はじめに 前回、LSTMの基礎的な使い方を整理した。 kento1109.hatenablog.comだいたい、使い方は分かったので実際にタスクに取り組んでみる。今回は「固有表現抽出」で試してみる。 CoNLLについて CoNLLは、「Conference on Computational Natural Language …

PyTorch:LSTMの基礎

はじめに 今回はNLPでよく使われるLSTMネットワークについて整理する。 自分で各ゲートのパラメータを記述したTheanoに比べると簡単。 下記のTutorialのコードを説明しながらLSTMの書き方について理解していく。 Sequence Models and Long-Short Term Memory…

PyTorch:テキストの前処理(torchtext)①

torchtext NLP用のデータローダgithubはここ。 github.com下記のチュートリアルがとても丁寧だった。 github.comまた、日本語の説明だと下記が分かりやすかった。 [DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた- from Deep Learni…

PyTorch入門④:utilsを使う。(torch.utils.data)

torch.utils.data データセット読み込み関連ユーティリティ。 DataLoaderは、データのロード・前処理をするためのモジュール。 必ずしもこれを使わなければいけないことは無いが、前処理を楽にしてくれる。 データセットのバッチ化 データセットのシャッフル…

PyTorch入門③:Logistic Regression

Logistic Regression 今回はLogistic Regression。 下記のチュートリアルを参考に実装した。 github.com尚、コード全体はここに置いた。 github.com データセットだが、チュートリアルはMNISTを使っているが、今回はsklearnのdigits datasetを使った。 (ロ…

Kerasで中間層の出力結果を得る

中間層の出力結果を得たい場合の方法。FAQに書いてあることをまとめただけ。 FAQ - Keras Documentationやり方は2つある。 ①新しいモデルの作成 シンプルな方法は,着目しているレイヤーの出力を行うための新しい Model を作成する # build model from kera…

PyTorch入門②:Neural Network

ネットワークはtorch.nnパッケージを使用して構築する。今回は下記にあるサンプルコードを使う。 Learning PyTorch with Examples — PyTorch Tutorials 0.3.0.post4 documentationネットワークは「入力層ー中間層ー出力層」の三層構造で線型回帰問題を想定。…

PyTorch入門①:Tensors~Autograd

はじめに 流行りに乗っかってPyTorchを勉強する。 最近、PyTorchで実装する論文が急増しているらしく、とりあえずソースコードが読めるようになりたい。 Tensors Numpyのndarrays(多次元配列)のようなもの。 GPUの高速計算のために使われるオブジェクトと…

MNISTの読み込み&描画

調べたら描画方法が色々あり、少し迷った。 今後、無駄な時間を省くための備忘録。 ダウンロード from six.moves import urllib origin = ( 'http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz' ) urllib.request.urlretrieve(origin,'mnist.…

MeCabのコスト計算を理解する。

はじめに 久しぶりにMeCabをいじる必要があったのだが、形態素解析のコスト計算らへんで理解できてなかったところがあったのでまとめる。ある単語を形態素解析する場合、その候補が複数ある場合にどう考えるか。例えば、 日本テレビ東京 辞書に「日本テレビ…

Snorkelの識別モデルについて(実装編)

はじめに 前回は生成モデルの構築について確認した。 kento1109.hatenablog.com尚、識別モデルに関する理論的なことをはこっちにまとめた。 (大したこと書いてないが・・) Snorkelの識別モデルについて(理論編) - 機械学習・自然言語処理の勉強メモ生成…

Snorkelの生成モデルについて(実装編)

はじめに コードを読んでいく Generative Model Structure Learning はじめに 前回はラベリング関数の作り方を確認した。 kento1109.hatenablog.com今回はいよいよ生成モデルに関するチュートリアルを読んでいく。 尚、理論的なことはこっちにまとめた。 Sno…

Snorkelのラベリング関数について(実装編)

はじめに 前回は前処理(候補の抽出)の流れを確認した。 Snorkelの前処理について(実装編)① - 機械学習・自然言語処理の勉強メモ 前処理が完了すると、関係の候補となるペアが出来る。 ※「配偶者」の候補となる人物名のペアただし、抽出した候補はエンテ…

Snorkelの前処理について(実装編)②

はじめに コードを読んでいく DocPreprocessor CorpusParser TaggerOneTagger taggerone_unary_tags_cdr.pkl.bz2 chem_dis_mesh_dicts.pkl.bz2 PretaggedCandidateExtractor 最後に はじめに 前回はcandidateとして文章から人物名の組み合わせを抽出するチュ…

Snorkelの前処理について(実装編)①

はじめに 前回まででSnorkelの概要、生成モデル、識別モデルに関してまとめた。 Snorkelの概要 - 機械学習・自然言語処理の勉強メモ Snorkelにおける生成モデル - 機械学習・自然言語処理の勉強メモ Snorkelにおける識別モデル - 機械学習・自然言語処理の勉…

spaCyの基本操作

spaCyとは pythonで動かす自然言語処理ライブラリ。 品詞タグ付け、固有表現抽出、構文解析などが出来る。詳しくはここ。 spacy.io 基本操作 基本的な操作を備忘録として残す。 import spacy nlp = spacy.load('en') doc = nlp(u'Jeffrey Navin saw the girl…

Snorkelの識別モデルについて(理論編)

前回で生成モデルを用いてを推定するところをまとめた。 kento1109.hatenablog.com (論文の解釈に自信が無い部分もあるが・・)生成モデルにより、データに対応するラベルが生成できた。 https://hazyresearch.github.io/snorkel/pdfs/snorkel_demo.pdf教師…