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

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

2017-01-01から1年間の記事一覧

gensimでLDA

LDA(Latent Dirichlet Allocation) 1つの文書が複数のトピックから成ることを仮定した言語モデルの一種。 各文書には潜在トピックがあると仮定し、統計的に共起しやすい単語の集合が生成される要因を、この潜在トピックという観測できない確率変数で定式化す…

TheanoでNER(CRF)

前回まででメインとなるLSTM層を説明した。 kento1109.hatenablog.com今回はCRFによる出力部を見ていく。元となるコードを再掲 github.com CRF 簡単に言うと、「識別モデルを用いて系列ラベリングの問題を学習するもの。」詳しくは前回まとめた。 kento1109.…

CRFについて

CRF

はじめに CRFはConditional Random Fieldsの略。識別モデル(からを直接推定するモデル)の一種。HMMを識別モデル(最大エントロピーモデル)に適用したものと考えると分かりやすい。 それぞれは下記でまとめた。 隠れマルコフモデル(HMM)について - 機械…

隠れマルコフモデル(HMM)について

HMM

隠れマルコフモデル(HMM) 直前の結果のみから次の結果が確率的に求まるという「マルコフ性」を仮定して、事象をモデル化。 隠れマルコフモデル(以降HMM)では、過去の状態の遷移は不明(隠れている)な状態であり、その状態の出力結果より事象をモデル化…

最大エントロピーモデル(対数線形モデル)について

最大エントロピー原理 概要は 確率変数 X について、 X が条件 I を満たす事だけが分かっており、それ以外に X に関して何1つ知らなかったとする。 X について条件 I 以外には何も知らないのだから、条件 I の下で X の「不確かさ」が最大(エントロピーが最…

Theanoのdimshuffleについて

コードを読んでいると時々出てくる。 もう少し理解を深めるために色々試したのでメモ。Documantationは下記 Basic Tensor Functionality — Theano 1.0.0 documentation dimshuffle関数は簡単に言うと次元の置換を行う関数。一番簡単な例は下記(行列の転置と…

TheanoでEmbedding

kerasでは関数が用意されているが、Theanoの場合は自分で定義する必要がある。kerasについてはこっちでまとめた。 kento1109.hatenablog.comコードを読んでいても理解は難しくないが、実装する時にもう少し挙動を理解したいと思ったのでメモする。 Embedding…

Theanoのfunctionについて

inputsの書き方について ソースを読んでいた時、これを知らなくて嵌ったのでメモ。functionに渡すinputsは下記のように指定することが多い。 from theano import * import theano.tensor as T a = T.dscalar('a') b = T.dscalar('b') z = (a + b)**2 f = fun…

TheanoでNER(モデル構築)

前回は前処理部分を簡単に理解した。 kento1109.hatenablog.com 前回も載せたがコードはここ。 github.com今回はメインのモデル構築について整理していく。 モデル構築(model.py) train.pyの f_train, f_eval = model.build(**parameters) でモデルを構築…

TheanoでNER(前処理)

NER(Named Entity Recognition) 系列ラベリングの一種。 日本語では、固有表現抽出と言われるタスク。具体例としてはこんなの 太郎は5月18日に花子に会いに行った。 これに含まれる固有表現を抽出(タグ付け)すると以下となる。 <PERSON>太郎</PERSON>は<DATE>5月18日</DATE>の<TIME>朝9時</TIME>に<PERSON>花</person>…

KerasでEmbedding

EmbeddingKeras Documentationの説明 正の整数(インデックス)を固定次元の密ベクトルに変換します. Embeddingレイヤー - Keras Documentation使い方 model.add(Embedding(1000, 64, input_length=10)) 引数: input_dim: 正の整数.語彙数.入力データの…

TheanoでStacked Autoencoder

前回の続編で、今回はStacked Autoencoder(積層自己符号化器) kento1109.hatenablog.comこのdocumantationを整理する。 Stacked Denoising Autoencoders (SdA) — DeepLearning 0.1 documentation今回もStacked Autoencoderに関する基本知識は、「MLP 深層…

Theanoのreshapeについて

reshapeを使ったときに嵌ったのでメモ。たとえば、numpyでreshapeを使う場合、 import numpy as np a = np.array([1, 2]) print a.reshape(2, 1) [[1] [2]] こうすることで、ベクトルとして扱うことが出来る。同じことをTheanoでやりたい場合、 たとえば、こ…

TheanoのDebugメモ

Theanoで実装するとき、何ともデバッグが理解しにくいと思った。numpyでの計算とは違い、計算時にエラーがあったときに何が悪いか突き止めるのが難しい。使いこなせたらそうじゃないんだろが、初心者には難しく感じた。なので、備忘録としてTheanoでのDebug…

TheanoでDenoising Autoencoder

今回は下記のdocumantationを整理して、Autoencoder(自己符号化器)を理解する。Denoising Autoencoders (dA) — DeepLearning 0.1 documentation下記のまとめが分かりやすかった。sinhrks.hatenablog.com aidiary.hatenablog.com文献としては下記を参考とし…

TheanoでLSTM③

前回の続き kento1109.hatenablog.com前回は、lstm_layerの内容を見てきた。 このように呼んでいたので、 proj = lstm_layer(tparams, emb, options, prefix=options['encoder'], mask=mask) projには、lstm_layerの戻り値のhがセットされる。 ※hは文字の長…

TheanoでLSTM②

前回の続き kento1109.hatenablog.com今回はLSTM層の構築から見ていく。 lstm_layer nsteps = state_below.shape[0] if state_below.ndim == 3: n_samples = state_below.shape[1] else: n_samples = 1 state_belowは、emb、 つまり、nstepsは、文書の長さ ※…

numpyの行列計算(tensor×matrix)

ベクトル同士、行列×ベクトルだとイメージしやすいが、テンソル(※)×行列は頭の中でイメージするのが難しい場合がある。 ※ここでは、3階以上の階数の行列を指す結論を先に書いておくと、 3階テンソル 行列 内積 m×n×k k×p m×n×p また、 行列 3階テンソル 内…

TheanoでLSTM①

下記のdocumentationについて整理する。LSTM Networks for Sentiment Analysis — DeepLearning 0.1 documentation はじめに コードを読んでいく前に全体の概要を掴む。コードについては下記の2ファイル lstm.py : モデルの定義&訓練 imdb.py : IMDB データ…

numpyで特異値分解

特異値分解は、行列を複数の行列の積に分解する方法。こんな感じで分解。 import numpy as np X = np.array([[3,4,1] ,[7,3,2] ,[5,4,2] ,[1,2,1] ,[2,3,2]]) U, s, V = np.linalg.svd(X, full_matrices=True) print s >> [ 12.12789287 2.81497791 0.995044…

modelの保存・ロード(Keras)

一度、fitで学習させたモデル(と重み)は下記の方法で保存できる。 model_json_str = model.to_json() open('model.json', 'w').write(model_json_str) model.save_weights('weight.h5') ロードは下記の方法 from keras.models import model_from_json mode…

Kerasで早期打ち切り

Callback関数内のEarlyStoppingを使用する。マニュアルは下記 コールバック - Keras Documentation呼び方 EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto') monitor: 監視する値. min_delta: 監視する値について改善と…

学習データのシャッフル

学習データがカテゴリ順になっていて、それをランダムな順序に変更したい、 でも、X(学習データ),y(Xの各データに対応するラベル)の順序は維持したい場合の工夫。 import numpy as np X = np.array([[11, 12, 13], [22, 23, 26], [31, 33, 34], [40, 41, …

Pandasで結合

使い方のメモ df = pd.DataFrame(np.random.randn(50,2),columns = list("AB")) c1 = df[(df['A'] > 0.5)&(df['B'] > 0.5)] c2 = df[(df['A'] < 0)&(df['B'] < 0)] x = pd.concat([c1, c2], ignore_index=True) A B 0 1.471791 1.663181 1 1.484363 1.313088…

Pandasで行・列抽出

使い方のメモ。3 行目を取得 df.iloc[3] A 0.168538 B 1.550001 C 1.002619 D 0.518160 Name: 2013-01-04 00:00:00, dtype: float64 1,2,4 行目と 0-2 列目を取得 df.iloc[[1,2,4],[0,2]] A C 2013-01-02 0.496579 0.745850 2013-01-03 -0.220238 0.405202 2…

TheanoでRNN②

RNNの続きkento1109.hatenablog.com前回で、elman.pyの__init__部をまとめた。 今回は、elman-forward.pyのRNNインスタンス生成後のコードを呼んでいく。前回の内容で rnn = model(nh = s['nhidden'], nc = nclasses, ne = vocsize, de = s['emb_dimension']…

TheanoでRNN①

下記のdocumentationについて整理する。Recurrent Neural Networks with Word Embeddings — DeepLearning 0.1 documentation タスクについて assigning a label to each word given a sentence. It’s a classification task. とある通り、文章の各単語のタグ…

Pandasでcsvを扱う

Pandasでcsvを扱う場合のメモ。 Read import pandas as pd df = pd.read_csv('D:\python\data\wine.data') print df # show all column test_df = pd.read_csv('test.csv', header=None, skiprows=1, names=['番号', '数学','英語']) #ヘッダがない場合はhea…

TheanoのSCANについて

SCANとは theanoにおける繰り返し処理に対応する関数。基本的な理解のために下記ページを参考にさせて頂いた。 sinhrks.hatenablog.comfnの引数は、 fn に渡す引数は (最大で) 以下の 3 つになる。それぞれ、対応する引数がない場合は省略される (fnに渡され…

Sentiment analysis (CNN)③

前回の続き kento1109.hatenablog.com前回はMLPDropoutまで確認した。 前回まででモデルの定義は説明した。 なんで、新しく層のインスタンスを生成することはない。今回は残りの部分を確認する。 define parameters パラメータを定義する。 #define paramete…