はじめに
本書では、プログラムを作って、動かしながら自然言語処理を学びます。自然言語処理の理論や仕組みではなく、自然言語処理を使ってWebアプリケーションを開発するにはどうしたらよいかに焦点を当てていきます。
Webアプリケーション、ということに心配されているかもしれません。しかし、最近はとても簡単にWebアプリケーションが開発できるようになっており、今までWebアプリケーションを作ったことがない方でも、本書だけを読めば、問題なく作れるはずです。
読者の方には、実際にプログラムを書きつつ本書を読み進めながら、「自然言語処理をどのように使えば身の回りの業務や生活に役立つか」を考えていただければと思っています。
自然言語処理とは
人間が日常で書いたり話したりする言語を自然言語といいます。つまり日本語や英語などが、自然言語に含まれます。その自然言語で書かれたテキストデータをコンピューターで扱うための技術を自然言語処理といいます。
本書は、自然言語処理に、1.テキストデータの解析、2.解析したテキストデータの活用、の2段階があると捉えて解説を進めていきます。
1.のテキストデータの解析のフェーズでは、それぞれの単語の品詞や、文章が持っている文法構造を調べます。また正規表現のパターンや知識データなどを使って、名詞句に意味付けをします。
2.の活用のフェーズでは、解析したテキストデータを使って、テキストの分類や情報の抜き出しなどを行います。
テキストデータの解析は、人工知能の観点でいえば、テキストデータの理解と捉えるとわかりやすいと思います。しかし単にテキストデータを理解しただけだと、何の役にも立ちません。「本を読んで理解した」といっているのと同じです。活用のフェーズで、テキストデータを解析して得た情報を上手く使ってアプリケーションにすることで、はじめて役に立つようになります。
Memo
ところで、「テキストデータの理解」というのは、コンピューター内でテキストデータがどういう状態にあることなのでしょうか。そのことを定義するのは、なかなか難しいテーマです。人工知能の研究分野でも議論がなされたことがあります。興味のある方は、インターネットで「ジョン・サール 中国語の部屋」などをキーワードにして検索してみるとよいでしょう。
自然言語処理を使っていくときには、精度という概念に関して理解する必要があります。精度というのは、どのくらいコンピューターが正しく答えを返したかという指標で、人工知能分野全般で使われる概念です。
Memo
例えば、問題が10あった場合、そのうち1つを間違えると精度は90%になります。
残念ながら、現在の自然言語処理の技術レベルでは、コンピューターが100%正しく答えを返すことはできません。
自然言語処理は、人間がやっても精度が100%にならないものが多いのが特徴です。例えば、「大きな黒い瞳の少女」という文があったとき、瞳が大きいのか、少女が大きいのか、読む人によって解釈が異なるかもしれません。このように人間が書く文章は、意味が曖昧なものもあるため、読む人によっても解釈が異なってきたり、コンピューターが間違った答えを出しやすくなったりします。
本書は、あまり精度にはこだわらず、とにかく自然言語処理をいろいろ使ってみる、というスタンスで進めていきます。精度を上げる必要に迫られたときには、自然言語処理の理論や仕組みをより深く理解する必要があります。そのときには、
- 『入門 自然言語処理』(Steven Bird、Ewan Klein、Edward Loper 著、萩原正人、中山敬広、水野貴明 訳、オライリージャパン 刊)
- 『自然言語処理の基本と技術』(奥野陽、グラム・ニュービッグ、萩原正人 著、小町守 監修、イノウ 編集、翔泳社 刊)
- 『深層学習による自然言語処理』(坪井祐太、海野裕也、鈴木潤 著、講談社 刊)
などの書籍が参考になります。
また、より直接的に精度を上げるためのテクニックを知りたいときは、ACL(AnnualMeeting of the Association for Computational Linguistics)やColing(InternationalConference on Computational Linguistics)など自然言語処理の主要な学会の論文を調べてみるとよいと思います。
本書では、これらを事前に読んでいなくても、プログラムを動かしながら自然言語処理の使い方を学んでいけるようにしています。
本書のロードマップ
図2に、本書で自然言語処理を解説する順序を示します。最初に実行環境を整え、自然言語処理の対象となるテキストデータを収集します。次に、準備したテキストデータをデータベースに登録して、簡単にデータ管理や検索をできるようにします。続いて、テキストの文法的構造を解析したり、アノテーションと呼ばれる情報により名詞句の意味付けをしたりして、その結果をデータベースに書き込み、元のテキストデータをWebアプリケーションで扱いやすくしていきます。
Memo
アノテーションとはテキストデータに付与する注釈のようなデータで、第5章で詳しく説明します。
さらに、知識データとの連携をできるようにします。ここまでくれば、Webアプリケーションで使うデータの準備が整います。続いて、自然言語処理の技術を使いながら、実際にWebアプリケーションの形にしていきます。
第9章以降は、テキスト分類、情報抽出など、自然言語処理の技術名で章立てしており、それぞれの章で別々のWebアプリケーションを作っていきます。本書の全体像をつかみやすくするため、ロードマップをアーキテクチャの形にしたのが、図3です。
本書では、テキストデータをファイルで置いておくのではなく、データベースで管理します。データベースを使うのは面倒だと感じる読者もいるかもしれませんが、実験的なプログラムではなく、アプリケーションを作っていく場合には、データベースを使ったほうが楽なのです。
もちろんデータベースといっても、本書では簡単な使い方だけを紹介し、雰囲気を理解してもらうにとどめていますので心配は無用です。
前置きが長くなりましたが、それでは、いよいよ実際に手を動かしながら、自然言語処理を始めてみましょう!