鴨川にあこがれる日々

気持ちが強いほうのブログ

自然言語処理を自習したくなったら参考になりそうなサイトなど

雑にですが,知ってるサイトやチュートリアルをまとめたくなったのでまとめてみました.夏ですし.
適宜更新しています.

最終更新 2018年02月03日

チュートリアル

言語処理100本ノック

言語処理100本ノック 2015

東工大の岡崎先生が作られたチュートリアルです.
他大学の研究室でも利用されています.
簡単な内容からはじまるので,プログラミングの導入としてもいいと思います.

NLPプログラミングチュートリアル

Graham Neubig's Teaching

Carnegie Mellon UniversityのGraham Neubig先生のチュートリアルです.
Githubにサンプルコードが公開されています.
チュートリアルにはテストがついているので,実装が正しいかを確かめることができます.
扱っているトピックが広いので,かなり勉強になると思います.

ソフト

形態素解析

日本語は英語と異なり単語同士が繋がっているので,分割する必要があります.
そのためのツールです.


私的にはMecabを使います.
Java形態素解析したいときは,kuromojiを使ってます (使いやすいから).
Kyteaはレシピ用のモデルなどがあるので特定ドメインで使っています.

また,Twitter上で形態素解析したくなったら
twitter.com
を使います.オプションをつけることでkyteaだけでなくmecabとJUMANの解析結果も返してくれます.

例えば
入力


結果

こんなかんじ.

ベクトル表現

king - man + woman = queen あたりがきっかけで有名になった単語のベクトル表現を学習するソフトウェアです.

Chainerやgensimではword2vecが使えるので,学習した結果を使った応用などに使いやすいかと思います.

chainerとgensimは,word2vecを使えるだけでなく多様なモデルを扱えます.
詳細は割愛します.すみません.

ニューラルネット

深層学習,流行ってますね.

Chainer

日本でよく使われてる印象です(特にNLP2016に参加して思いました).
設計思想的にRNNを書きやすいため,Chainerを使うことがあるようです.

pytorch

FBが作ってるライブラリです.ChainerのforkしたところからはじまったのでかなりChainerに文法が近いです.作ってる場所の影響かChainerと比較すると再現実装がたくさんあるため,コミュニティの大きさというメリットもあります.

TensorFlow

Googleの出してるフレームワークです.
NLP関係だとRNNのチュートリアル(英語)があるのでそれが参考になるかと思います.これもGoogle製ということもあって,いろんな方の実装が転がってます.

Keras

TheanoとTensorFlowとCNTKのラッパーライブラリで,どれかをバックエンドに使うことができます.TensorFlowが公式にサポートもしています.とても記述しやすいです.ユーザも比較的多いこともあり,サンプルコードが見つかりやすいです.Kaggleというコンペサイトで頻繁に見ます.

その他NLPの研究者の方が開発していたり,特化しているライブラリをあげます:

文書分類器

分散表現の獲得と高速な文書分類の2つの機能を提供してるfacebookのfastTextがあります.

GitHub - facebookresearch/fastText: Library for fast text representation and classification.

文書分類に限らずSVMといって分類器はscikit-learn: machine learning in Python — scikit-learn 0.16.1 documentationが有名です.
前処理の関数なども提供されていますので重宝しています.

いろいろ

前処理など多様な機能が入ってるものとしてNLTKとspacyがあります.

データ

英語だとけっこうたくさんある気がします.
日本語はあんまりないかもしれません.

英語

2番目のNLTK_dataは,PythonのNLTKというライブラリから入手できるデータセットです.
データのみをダウンロードすることも可能です.
3番目のgutenbergは,例えるなら英語版青空文庫です.
4番目のサイトはText以外も含めてmatlabで扱う形式のデータ(生データも)を公開しています.Matlabがなくてもpythonであればscipyを使うことで読み込むことができます.

Textデータでは

  • NIPS: 論文データ
  • PNAS: ジャーナルデータ
  • Word Counts from Encyclopedia Articles

があります.

日本語

小説家になろう」はクロールする必要がありますが,青空文庫と同様にtxtファイルで入手できます.

研究者でないと難しいですが, 情報学研究データリポジトリ データセット一覧 からデータを入手することができます.
ここにはCookpadのデータやYahoo!の知恵袋データ,ニコニコ動画のコメントデータなどがあります.

辞書

ipadicだけでは新語に対応できないためにwikipediaの見出語やはてなキーワードで拡張することが多いです.
mecab-ipadic-neologdを使うことでその手間が省けます.

コンペ

チュートリアルだけやってると飽きてしまったりモチベが上がらないので,実用的に使いたくなります.例えばKaggleでしょうか.

機械学習全般ですが,実力試しにつかえます.
チュートリアルがついているものがあり勉強になります.

NLPのタスクですと映画のレビューを分類するものがあります.ここではword2vecを使います.
https://www.kaggle.com/c/word2vec-nlp-tutorialwww.kaggle.com

書籍

お恥ずかしいことですが,言語処理の本はあまり読んでおらず,中身について詳細に言及できる書籍はあまりないです.

機械学習/深層学習

言語処理のための機械学習入門

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

研究室に輪講で読んだ1冊です.
こちらはおすすめだと思います.

深層学習による自然言語処理

深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ)

深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ)

帯に「出た!」とあるので通称「出た!本」です.
同シリーズの青い深層学習本ではCNNとRNNなどを扱っている入門書ですが,こちらの書籍はNLPに特化した内容になっています.

ウェブデータの機械学習

ウェブデータの機械学習 (機械学習プロフェッショナルシリーズ)

ウェブデータの機械学習 (機械学習プロフェッショナルシリーズ)

NLP関連として評判分析と表現学習 (word2vec) について扱っています.
個人的に何かと後輩にお勧めすることが多い本です.

グラフ

Graph-based Natural Language Processing and Information Retrieval

Graph-based Natural Language Processing and Information Retrieval

Graph-based Natural Language Processing and Information Retrieval

洋書ですしもはや入門ですらないですが.
グラフのアルゴリズムNLPやIRの分野に適用した研究がまとまっています.
もちろんPageRankもあります.

入門書

自然言語処理

京大の黒橋先生の書かれた放送大学のテキスト

自然言語処理 (放送大学教材)

自然言語処理 (放送大学教材)

個人的にはこれが一番読みやすい印象です.

自然言語処理の基礎

東工大の奥村先生のNLP入門書

自然言語処理の基礎

自然言語処理の基礎

トピックモデル

私がよく使うアルゴリズムです.
日本語の書籍は2冊出ています.

機械学習プロフェッショナルシリーズのトピックモデルは,LDAのよりも単純なユニグラムモデルなどの導出から始まるため,LDAが理解しやすく,アルゴリズムが丁寧に書いてるので実装しやすいです.
正しい変形がやや天下りなので,ちゃんと式を追いたい人はもう一方をオススメします.

トピックモデル (機械学習プロフェッショナルシリーズ)

トピックモデル (機械学習プロフェッショナルシリーズ)


自然言語処理シリーズのトピックモデルによる統計的潜在意味解析は,式変形が詳しいです.
個人的には3章の周辺化ギブスサンプリングの導出がとても役に立っていて,LDAのグラフィカルモデルを少し拡張したモデルのサンプル式を求めることができました.
オンライン学習などにも触れているので読み応えがあります.

トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)

トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)

その他

首都大学東京の小町先生のページに書籍ついてまとまっているためこちらを参照頂ければと思います.
自然言語処理を学ぶ推薦書籍 - 首都大学東京 自然言語処理研究室(小町研)


他にもありそうですがざっとこんなもので.