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

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

(論文)BERTによる日本語構文解析

今日は以下の論文についてまとめます。BERTによる日本語構文解析の精度向上(柴田ら 2019)昨年の「言語処理学会」で発表されたものです。日本語で分かりやすいのですが、整理もかねてまとめます。BERT自体の解説はググれば分かりやすい説明があります。 ま…

Negative Samplingの復習

はじめに 今更ですが、word2vecの高速化の計算手法である「Negative Sampling」について復習しました。 世は完全に「Transfomer」の趨勢ですが、勉強のために復習しました。前に「階層的ソフトマックス」を説明している論文を読んでいて、これってどう実装す…

Pytorch:CNNで文字表現の抽出

NLPにCNNを利用したモデルはすっかり当たり前になりました。少し前に「CNNでテキスト分類」という記事を書きましたが、 その時はPytorchでCNNを扱うための基本的なコードだけに留まっていました。 kento1109.hatenablog.com今回はNERなどで用いられる文字情…

pytorch-transformersを触ってみる⑤

はじめに 前回はBERTのfine tuningということで、NER(固有表現認識)を試してみました。 kento1109.hatenablog.com今回はfine tuningではなく、BERTの事前学習について見ていきたいと思います。 pre-training from scratch ただ、pytorch-transformersでの…

pytorch-transformersを触ってみる④

はじめに 前回はfine tuningということで、GLUEタスクのSST-2に取り組みました。 kento1109.hatenablog.comまた、GLUEタスクのfine tuningを実行するためのスクリプト(run_glue.py )のコードを眺めました。今回は、CoNLL(NERの共通タスク)のためのfine t…

pytorch-transformersを触ってみる③

はじめに 前回は日本語でのpytorch-transformersの扱い方についてまとめました。 kento1109.hatenablog.comこれまでpytorch-transformersの基本的なところを英語・日本語で動かしてみました。今回はもう一歩進んでfine tuningについてまとめてみます。ドキュ…

pytorch-transformersを触ってみる②

はじめに 前回はの入門ということで、QuikStartの内容を触ってみました。 kento1109.hatenablog.com前回は英語でしたが、日本語のテキストを扱う場合はそのまま使うことは出来ません。 ということで、今回はpytorch-transformersで日本語のテキストを扱って…

pytorch-transformersを触ってみる①

今更ながら、pytorch-transformersを触ってみます。 このライブラリはドキュメントが充実していて、とても親切です。 なので、今回はドキュメントに基づいて触ってみただけの備忘録です。 以下、有名どころのBERTで試してます。詳しいことはここなどを参照し…

tensorboardXの基本的な使い方①

はじめに 今更ですが、tensorboardを触ってみました。普段TensorFlowを使わないので、何となく避けてたのですが、 tensorboardXは「tensorboard for pytorch」ということで、 触ってみました。結論から言うとめちゃくちゃ簡単で便利でした。 なので、備忘録…

(論文)Cloze-driven Pretraining of Self-attention Networks

はじめに 2018年のNLPの主役は「BERT」で間違いないでしょう。 元の論文はGoogleから発表されており、Googleすごいってなりました。 黙っていないのがPytorchを開発した「Facebook」です。ってことで、彼らの手法でNERのタスクにおいて僅かですがBERTを抜い…

(論文)Pretrained language models

はじめに 以前にPretrained language modelsの基本について書きました。 kento1109.hatenablog.com今回はドメイン領域(Biomedical)での固有表現認識(NER)について適用した論文をまとめます。[1711.07908] Effective Use of Bidirectional Language Model…

(論文)BERT

今日も少し前に流行ったモデルの復習。 今日はBERTに関してまとめる。https://wikiwiki.jp/animegameex/%E3%83%90%E3%83%BC%E3%83%88これもまた既に素晴らしいまとめがあるのでそちらを参考にしながら復習した。 jalammar.github.io towardsdatascience.com …

(論文)Transformer

久しぶりにブログを更新する。今日は「Attention Is All You Need」に関する復習。もはや2年前の論文で、日本語でも丁寧な解説記事がたくさんある。deeplearning.hatenablog.comとっても今更感があるが、自分自身の理解の定着のためにまとめようと思う。 と…

gensimに依存しない単語の類似度計算

はじめに 前にgensimによる単語の類似度について書きました。 kento1109.hatenablog.com この手の記事はググればいっぱい出てくるので、gensimでモデルを作って単語の類似度を計算するのは難しくないと思います。ただ、LSTMなどで学習した後の単語の分散表現…

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

はじめに torchtextの使い方に関するメモ。入力の素性をカスタマイズしたい場合について例えば、各系列に付与したカラムを入力に含めたい場合 (0,1は系列の何らかの情報) a 1 b 0 c 1 d 0 e 1 f 0これをどうハンドリングするかについて少し考えた。 簡単な…

Stan:LDA

はじめに 自然言語処理の領域では広く知られいるLDA(Latent Dirichlet Allocation)について復習する。LDAはトピックモデルの1種であり、文書がどのようなトピックから構成されているかを推論するモデル。 推論するパラメータは以下の2つ。 トピック分布:…

Pretrained language modelsを理解する

はじめに 少し前に「A Review of the Neural History of Natural Language Processing」というまとめ記事を見ました。 blog.aylien.com自然言語処理の発展の歴史みたいなもので、近年のブレイクスルーをまとめてくれています。2018年の注目はELMoに代表され…

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

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

Neo4jを触ってみる

はじめに 自然言語処理を勉強していると、オントロジーやシソーラスってのが出てくる。 オントロジーやシソーラスを勉強すると、グラフ理論ってのが出てくる。 グラフ理論を勉強すると、グラフDBとして有名な「Neo4j」が出てくる。ということで、今回はNeo4j…

Stan:NMF

はじめに 今回はNMF(Non-negative Matrix Factorization)について勉強する。 日本語では「非負値行列因子分解」と言い、線形次元手法の1つ。 その名前の通り「観測データの非負性」を仮定したモデル。 「非負性」の制約を設けることで、これに適用可能な観…

Pytorch:ライブラリの誤差関数の構造を理解する

はじめに 今まで当たり前のように誤差関数を使っていた。 既に用意されたものであればそれで問題ない。しかし、誤差関数を自作したいと思った場合、 ライブラリの誤差関数の構造を理解している必要がある。そんなわけでライブラリの誤差関数について調べたの…

Stan:TwoCountryQuiz②

はじめに 前回は「コワイ本」のTwoCountryQuizのタスクに取り組んだ。今回はこの続きについてまとめる。 ラベルスイッチング 前回のモデルは事後分布が二峰性をもつような分布となっていた。 この原因として「ラベルスイッチング」が原因だと述べた。 混合モ…

Stan:TwoCountryQuiz①

はじめに 前回は「コワイ本」のTwentyQuestionsを取り組んだ。 kento1109.hatenablog.com今回はそれをもう少し難しくした「TwoCountryQuiz」に取り組む。 TwentyQuestionsのコードを少し変えるだけと思っていたが、実はとても難しく嵌りどころがたくさんだっ…

Stan:TwentyQuestions

はじめに 最近、色々なモデリング例を知りたくて「ベイズ統計で実践モデリング(通称コワイ本)」を呼んだ。 まだ途中だが、面白そうな内容があったのでまとめる。 今回、紹介するのは「第六章 潜在混合モデル」の「TwentyQuestions(二十の問題)」というス…

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

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

Stan:隠れマルコフモデル②

はじめに 前回は教師ありHMMについて勉強した。 kento1109.hatenablog.com今回は教師なしHMMについて勉強する。 今回のデータはセンサーデータのようなものを想定したものを用いる。例えば、以下のような時系列データがあったとする。 時点と 時点で何かしら…

Stan:隠れマルコフモデル①

はじめに 今回は隠れマルコフモデルをStanで実装する。 隠れマルコフモデル自体は以前に書いた。 kento1109.hatenablog.com今回は教師ありモデルを考える。 教師あり「隠れ状態」が既知のモデル。 前回の例で考えると、「晴れ→雨」などの遷移状態が与えられ…

Stan:階層モデルに関する考察

はじめに 今回もStanを使って階層モデルを勉強していく。今回は階層モデル(というよりベイズ学習そのもの)の基本的なことに関する疑問の解消を目指す。最尤推定ではなく、ベイズ推論を用いる目的の1つとして「ベイズ推論による機械学習」では以下のように…

Pytorch:CNNでテキスト分類

はじめに かなり前にTheanoでの実装例を解説した。TheanoでSentiment analysis (CNN)① - 機械学習・自然言語処理の勉強メモ今回は、Pytorchでの実装例を解説する。下記のコードを実装例としてみていく。 github.com前処理や学習のところは今回の本質ではない…

Stan:離散パラメータの扱い

隠れ変数の扱い 前回、ポアソン混合モデルを勉強した。kento1109.hatenablog.com前回は触れなかったが、ポアソン混合モデルのグラフィカルモデルは一般的に書きのように書ける。観測データは、k番目クラスタのパラメータのポアソン分布によって生成される。 …