今回は書評エントリーになります。
読んだのは『Foundations of Statistical Natural Language Processing』という20年くらい前の本です。
邦訳版として『統計的自然言語処理の基礎』という本が出ております。
読んだきっかけ
ぼく機械学習については少しだけ勉強した感じなんですけど、自然言語処理に関してはホントに素人だったんですよね。
最近だとBERTとかいう自然言語処理の手法が登場して結構ツイッターとかで話題になってたわけです。
それでずっと自然言語処理やってみたいなぁって思ってたんですけど、つい最近こんなイベントを発見したわけです↓
リクルートの自然言語処理ハッカソンというやつで、10人限定ながらもホテル4白5日の交通費付きという素晴らしい案件で、コレ見てなんか直感的に申し込むしかねえ!!!!ってなったんですよねw
まあそれで申し込んで、無理やり自然言語処理を勉強する理由を作ることに成功したわけです。
それで書店をぶらぶらしてたところ、この本の邦訳版が並んでて、その場でググってみたところこの原著PDFが拾えたのでやってみるか〜ってなったわけですね。
感想
ざっとひとことでまとめると
ニューラルネット全盛期を迎えるまでの自然言語処理の発達の歴史を学べる一冊
という感じになります。
自然言語処理というのは大きく分けて2つ手法があって、シソーラスとカウントベースがあります。
シソーラスについて、単語を辞書などで調べるとたくさん類義語なり関連ワードが出てきますよね?
例えば「カレー」を調べると「食べ物」とか「スパイス」、「インド」、「茶色」などなど....
そして同時に、ある単語を表す際に、その関連ワードたちは階層構造を持っているわけです。
このように、ある単語について関連ワードの階層構造を持って単語の意味をなすようにする手法がシソーラスというものです。
このシソーラスはWordNetという膨大なデータベースに蓄えられていて、それを用いればパソコンも自然言語の単語を意味をもって理解することができるわけですね。
しかし、このシソーラスは問題点があって、例えばデータベース構築の手間がめちゃくちゃかかるわけです。
シソーラスは単語の意味を認識する際には有用な手法ではあるのですが、取り扱いが難しいので自然言語処理がややしんどいと。
そこでシソーラスと別の手法がカウントベースです。
カウントベースとは、名前から想像できる通り単語の出現などを数えて処理しようというものです。
ここで自然言語の単語や文の総体をコーパスといい、カウントベースではコーパスにおける単語の出現頻度を統計的に処理して意味構造を抜き出そうというわけですね。
まあつまり機械学習の出番というわけです。わかりやすい。
で、実際の解析方法としてどうやるかというと、n-gramという連続する文をn語で分割するテキスト分割手法を用いて解析区分を仕切り、そうして隣接する単語を見るわけです。
具体的にどうするかというと、例えば"I apply the algorithm to the problem."という文章を見たとき、"apply"という動詞の出現に対して"to"が対応してそうと統計的にわかっている("apply"が出現した後に"to"が出現する確率が高い)という場合、このような語法があると知っているモデルを形成することができるわけですね。
また、別の例として、"He ate the cake."と"He ate an apple."では"He ate 〇〇"という形になっていて、文は似たような構造を持っていることから"the cake"と"an apple"は似たような意味を持ってそうだなと理解することができるわけです。
このような単語の類義語推定問題について、単語の分布マップ(知識空間と言ったりするらしい)において、"the cake"と"an apple"は近しい場所にマッピングされることになります。
まあこんな感じでシソーラスの対をなす自然言語処理の手法としてカウントベースがあるわけですね。
で、本書ではどんな感じのことを論じるかというと、このカウントベースについて単語推定モデルをいかに形成するかということを無限に展開していきます。
先ほどモデルを形成すると言いましたが、具体的な自然言語処理アルゴリズムとしては単語出現率を用いてベイズとEMアルゴリズム、SVMなどをひたすら振り回します(笑)
ここで解析手法としてEMアルゴリズムやSVMが登場するあたりやはり2000年前後の本なんだなぁ...となりますねw
今はニューラルネットの時代なのでアレですが、自然言語処理については基本はあまり変わっていないそうで、このモデル構成において単語の出現確率推定などをEMアルゴリズムからニューラルネットに置き換えた感じが最近の自然言語処理のようです。
一応ニューラルネットにおいてはword2vecやらseq2seq、Attension等で色々工夫して成功してるっぽいんですけど、今でも自然言語処理の基本構造は本書に書いてある感じなので、そういった意味で本書は自然言語処理の基礎を学ぶにあたって良い書籍なのかと思います。
まあぶっちゃけ読む必要があるかというと微妙なんですけど、読んで損することはないと思います。
実際にぼく自身かなり自然言語処理の勉強になりましたし、これなら今からでもニューラルネットでスクラッチで色々実装できそうな感じがしてます。
てことで地力をあげたい人には良い書籍です。オススメします。
# まとめ
今回は『Foundations of Statistical Natural Language Processing』を紹介しました。
本書を読んで、自然言語処理何もわからんマンだった身としてはちょっとだけ理解が進んだと思います。
ちなみに冒頭に述べたリクルートの自然言語処理ハッカソンなんですが、無事に選考を突破して参加者10人の中に入ることできたのでハッカソンに参加することになりました。
今回自然言語処理の理論的な勉強もしたし、ハッカソンではがんばってこようと思います〜
ではでは、お疲れ様でした!
よく知らない人の事についてtwitterで言及して謝罪させるとかお前何者だよ、黙って機械学習だけやってろ。
まあ主張の是非はさておき よく知らないことに物申すとケガするのでこれからは気をつけたほうがいいですよ 「あああ」さんのような敵が増えるだけでマイナスにしかなりません あなたはバズりたいだけのしょーもない人間じゃないでしょ?