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

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

メモ

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

はじめに torchtextの使い方メモ第三弾。前回の内容は下記参照 kento1109.hatenablog.com今回の内容は1つだけ。 POSやNERなどのTaggingを考える場合、どのようにtorchtextで読み込めばよいか。前回まではtorchtextでデータをファイルから読む際、想定されて…

Stan:混合モデルとラベルスイッチング

はじめに 前に混合ポアソンモデルについて勉強したが、混合モデルではラベルスイッチングの問題を考える必要がある。詳しくはユーザーガイド・リファレンスマニュアル「24.2. 混合分布モデルでのラベルスイッチング」参照。一番簡単な対策方法は、ポアソン分…

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の学習済みの…

MNISTの読み込み&描画

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

spaCyの基本操作

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

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…

KerasでEmbedding

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

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…

numpyの行列計算(tensor×matrix)

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

学習データのシャッフル

学習データがカテゴリ順になっていて、それをランダムな順序に変更したい、 でも、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…

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に渡され…

pickle(オブジェクトデータ構造を直列化・非直列化)

Python のオブジェクトを直列化・非直列化するための機能を提供。 直列化 (Serialize) ・・オブジェクトをバイト列などの表現に変換 非直列化 (Deserialize) ・・バイト列を元にオブジェクトを復元するpickle モジュールをC言語で再実装したcPickleモジュー…

matplotlibのscatter(散布図)

散布図を作るときは、scatterが便利。分類やクラスタリングを視覚化する場合、 ラベルの出力値に応じて自動で色分けしてくれる。以下のようにcにラベルを指定するだけ plt.scatter(x[:, 0], x[:, 1], c=crf.labels_) すると、こんな風に色分けしてくれる。

matplotlibの色指定

忘れがちなのでメモ。主要な色については 1 文字で指定可能b:青 (Blue) g:緑 (Green) r:赤 (Red) c:シアン (Cyan) m:マゼンタ (Magenta) y:黄 (Yellow) k:黒 (Black) w:白 (White)出力イメージ 尚、これらの情報はこちらを参考にさせて頂いた。(ほ…