自然言語処理を学ぶ推薦書籍

自然言語処理を学ぶ推薦書籍を紹介します。2021年03月現在、自然言語処理を勉強したい理工系の学生・エンジニアの人は、以下の本を推薦します。

    1. (概要)自然言語処理(放送大学出版)

    2. (理論)言語処理のための機械学習入門+深層学習による自然言語処理

    3. (実装)Python 機械学習プログラミング 第3版

自然言語処理を勉強したい、非理工系・非エンジニアの人には、以下の本を推薦します。

    1. (数式なし)自然言語処理の基本と技術

    2. (数式あり)自然言語処理(放送大学出版)

オライリーから出ている「入門 自然言語処理」は特殊な本(詳しい人がこれを使ってレクチャーしてくれるならともかく、独習に向いていない)で、Python 2 で書かれているだけでなく、すでに動かなくなったコードも多々あり、2019年時点では読まない方がいい本です。(それでもどうしても、意地でも読みたい人は、本家にある Python 3 対応した NLTK Book 英語版のほうを読んでください。)「入門 機械学習」も読むべきではない本です。

自然言語処理

自然言語処理の基礎(コロナ社 2010)

なにか1冊で自然言語処理について学びたい人はこの本が最適。薄いのですぐ読める。ところどころ、奥村先生の主張が挟まれていておもしろい。2015年に下記の放送大学テキストが出たので、この本は歴史的役割を終えたと思われる。(ただし、機械学習成分・統計的自然言語処理成分がやや少ないので、非理工系出身の人はこちらの方が読みやすいだろう)2021年に電子版も販売されるようになった。

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

放送大学の教科書で、薄い本ながら歴史から最先端の話題も含めコンパクトにまとまっている良書。2019年時点の教科書としては決定版(上記「自然言語処理の基礎」と比較して、こちらの方が機械学習の手法に詳しい)。実装には踏み込まないが、新しい手法のアルゴリズムも解説されている。現在の技術で精度がどれくらい、というような話題も書かれている。2019年3月の新しいバージョンでは深層学習の話題も更新されている(特に機械翻訳の章)。

(2019年度以降、都立大で「自然言語処理」を用いた自然言語処理の基礎勉強会を行なっています)

自然言語処理の基本と技術(翔泳社 2016)

小町が監修に関わった自然言語処理の入門書で、一般の人が興味を持つであろう応用から逆算して基本を解説する、というスタンスなので、非専門家をターゲットにしているところが主な特徴。できる限り数式を用いない説明を意識しており、必ずしも自然言語処理の研究・開発をしたいと思っていない人向け。自然言語処理に興味のある学生・エンジニアは上記の放送大学の「自然言語処理」を読むことをお勧めする。

(2016年度以降、都立大のオープンユニバーシティ講座や学部・大学院授業等で使用しています)

入門自然言語処理(オライリー 2010)

Python で書かれた NLTK (Natural Language Toolkit) というツールキットを使って自然言語処理を学ぶ本。英語版は NLTK Book と言って無料で公開されているので、買う前に内容をチェックしたほうがよい。また、日本語版に追記されている書き下ろしの章は Python による日本語自然言語処理 として公開されている。こちらも、購入前に全文を読むことができる(内容はウェブで読める日本語処理の解説としてはトップクラスに詳しくかつ分かりやすい)ので、買う前に内容を見て、それでも買いたい場合は購入するとよい。オライリーから出ている、かつ「入門」だからと購入する人が多いようだが、萩原さんの書いた(ウェブで読める)「Python による日本語自然言語処理」以外の内容は、あまり分かりやすくない。また、上記リンク先の Python コードは最近ではそのままだと動かないので、コードを試しながら理解する、という使い方ができなくなってしまったのが残念。

深層学習による自然言語処理 (講談社 2017)

深層学習時代の自然言語処理の教科書としてベストだった1冊。2015年くらいまでの状況がカバーされているので、自分で自然言語処理の研究開発をしたい人は、これを読むことをお勧めする。ただし、2016年以降の状況がカバーされていないので、別に補う必要がある。ある程度の数学の知識および実装力は前提とされているので、「言語処理のための機械学習入門」に加え、「IT エンジニアのための機械学習理論入門」「Python 機械学習プログラミング」あたりを先に読んでおく必要があると思われる(あるいはそちらを読んでから再読したら理解が深まるだろう)。この本を読んでから次に実装したい場合は「ゼロから作る Deep Learning (2) 自然言語処理編」を読むとよい。

(2018年度以降都立大で「深層学習による自然言語処理」を用いた深層学習の基礎勉強会を行っています)

機械学習・深層学習による自然言語処理入門(マイナビ出版 2020)

前半半分が機械学習(scikit-learn)、後半半分が深層学習(TensorFlow+Keras)を用いた自然言語処理入門。下記の「Python 機械学習プログラミング」が自然言語処理以外も扱っているのに対し、こちらは自然言語処理に特化した内容で、かつ実装にも踏み込んでいて親切。「Python 機械学習プログラミング」のほうがしっかり理論も解説しているのに対し、こちらは実装寄りで丁寧に書かれている(そのため、理論的なところはさておき実装できればいい、というソフトウェアエンジニアの人は、この本が一番読みやすいだろう)。カバーしているトピックも妥当で、深層学習時代の自然言語処理の教科書はかくあるべき、という趣でよいのだが、丸々1冊自然言語処理を扱っている割にはあまり言語の匂いがしないので、自然言語処理の教科書としてはこの本1冊でいいかというと微妙な気がする。言い換えると、自然言語処理の「教科書」であれば本当は「正解」をどう決めるか、つまりどのようにデータが作られているか、という話が避けて通れないと思うのだが、この本は「正解」は外から与えられるというスタンスで、実装のみに特化した本であるため、自然言語処理そのものについて、そして深層学習の理論については他の本と組み合わせて読む必要がある。

日本語入力を支える技術(技術評論社 2012)

Ruby 風の疑似コードを用いて日本語入力を題材に機械学習アルゴリズムを解説。実装力がそれなりにある人向け。「言語処理のための機械学習入門」のあと、もしくはそれとあわせて読むとよい。ただし、本格的な自然言語処理の知識を仮定しているので、すでに自然言語処理を学んだことのある人か、あるいは形態素解析レイヤー(単語分割、品詞推定)に興味がある人でないと、読むのは厳しいかもしれない。他の解説は、たとえば 社員数500人の会社としての大学 を参照。

機械学習

言語処理のための機械学習入門(コロナ社 2010)

機械学習を用いた自然言語処理を研究・開発する人の必読書。豊富な演習問題に、それぞれ解説もついているので、独習することもできる。自然言語処理を学習するに当たって必要な線形代数・微分積分の知識がどの程度か知りたい人も、同書を眺めてみるとよい。深層学習時代にも必要な基礎知識がコンパクトに学べ、かつ研究室に配属されないと知り得ないような豆知識も書いてある。教科書としては「わかりやすいパターン認識(第2版)」も合わせて読むとよい。

(2013年度以降都立大で「言語処理のための機械学習入門」を用いた機械学習の基礎勉強会を行なっています)

わけがわかる機械学習(技術評論社 2019)

機械学習がなぜこのようになっているのか、という背景について解説した本。この本だけで機械学習の基礎を理解することはできないと思うが、機械学習のプログラムは書けるようになったが、なぜこのようになっているのか興味が出た人、あるいは「言語処理のための機械学習入門」を読んだけどなんでそうなっているのか分からなかった人、というあたりが読むと腑に落ちる人がいるかもしれない。類書がないので、「言語処理のための機械学習入門」を読んだあと、一読することをお勧めする。プログラミングについては特に触れていないので、そういうものを期待する人には不向き。

ITエンジニアのための機械学習理論入門(技術評論社 2015)

こちらも Python を用いて機械学習の理論を学ぶという内容。そこそこ過不足なく機械学習の理論について解説されており、サンプルコードも配布されているので、実行しながらパラメータの意味を理解したりすることができるのはとてもよい。「言語処理のための機械学習入門」は機械学習とプログラミングをつなぐことができないのが唯一の弱点だったが、それをこの本は補うことができるのでお勧め。ただし、Python の使い方(NumPy や matplotlib、pandas、ipython)は全く解説されないので、以下の「Python によるデータ分析入門」を先に読んだ方がよい。

入門機械学習(オライリー 2010)

Rで機械学習をいろいろなタスクに応用するという内容。個々の機械学習アルゴリズムはほとんど説明されていないが、どのようにしたら機械学習を自分のデータに適用できるか、ということを知ることができる。オライリーの本なので読みたがる人が多いが、Rを既に知っているのでRのほうが分かりやすい、というのでなければ先に『Python 機械学習プログラミング』を読んだほうがよい。実際に機械学習手法を用いて解析したい人は、この本で入門しないほうがよい。サンプルコードもひどい。

実践機械学習システム(オライリー 2014)

Python を用いていろいろな機械学習システムを実装するという内容。機械学習の理論について深く解説されているわけではないが、言語処理から画像処理まで幅広くカバーされていて、バランスがよい。和訳はこなれているというわけではないが、致命的に読みにくいわけではなく、サンプルコードも一応参考にしてもよいレベル。「Python 機械学習プログラミング」登場前はこれが良かったと思うが、「Python 機械学習プログラミング」のある今、この本を先に読む必要はない。

Python 機械学習プログラミング第3版(インプレス 2020)

機械学習の基本から最新の深層ニューラルネットワークまでカバーしている意欲的な本。scikit-learn 準拠で、線形代数の知識(Python 的には NumPy/SciPy)はそれなりに仮定されているが、深層学習についても触れられていて、理論、数式とコードをちゃんと付き合わせて理解できる、という意味で決定版の良書。ソースコードはすべて GitHub で公開されているので、自ら動かすことができる。英語版は出版社から買えば PDF で購入できるので、リンクを飛んだりできて便利。「言語処理のための機械学習入門」「Python によるデータ分析入門」と合わせて読むとよい。

(2020年度以降、都立大の学部授業で使用しています)

Python ではじめる機械学習(オライリー 2018)

scikit-learn 準拠で機械学習の基礎を学ぶ良書。ただ、深層学習に関する話題はないので、これだけで最先端の内容までカバーできるわけではなく、上記の「Python 機械学習プログラミング第3版」のほうがよいと思う。

Python によるデータ分析入門 -- NumPy、pandas を使ったデータ処理 第2版(オライリー 2018)

NumPy/SciPy という強力な数値計算ライブラリや matplotlib による可視化、pandas によるデータ分析、ipython による操作など、かゆいところに手が届く大変な良書。scikit-learn について紹介されていればデータマイニング・機械学習入門としても完璧であったが「Python ではじめる機械学習」と合わせて読むと良いと思う。他の解説はたとえば 詳しい人が読んでも楽しめる入門書は良書 を参照。

ゼロから作る Deep Learning (2) 自然言語処理編 (オライリー 2018)

深層学習を用いた自然言語処理の開発の本といっても TensorFlow や PyTorch といった深層学習フレームワークを使う他の本と一線を画し、この本は自分で深層学習部分も含めて実装する、という点がユニークで、一つ一つのパーツを作りながら学ぶことができ、細かいところまでなぜそうなっているのか、ということが理解できる。逆にいうと、全部が積み上げで書かれているので、途中分からなくなるとそこから先全部分からなくなるし、そもそも(深層学習で)サクッと自然言語処理したい(データはあるので何かアプリケーションやサービスを作りたい)という人が読む本ではない。あと、(1) を読まないで (2) だけ読んで理解できる人はすでにかなり詳しい人だと思うので、どうしてもこれを読みたい人はまず(実装しないまでも)(1) の方を先に読んだ方がいい。個人的にはほとんどの人は「Python 機械学習プログラミング第3版」を先に読んだ方がいいと思うし、深層学習を用いた自然言語処理に興味があるという人は、この本より「機械学習・深層学習による自然言語処理入門」の方が求める本であろうし、それらを読んである程度読み書きできるようになってから読んでも遅くないと思う。