自然言語処理
自然言語処理(しぜんげんごしょり、natural language processing、略称:NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。「計算言語学」(computational linguistics)との類似もあるが、自然言語処理は工学的な視点からの言語処理をさすのに対して、計算言語学は言語学的視点を重視する手法をさす事が多い。データベース内の情報を自然言語に変換したり、自然言語の文章をより形式的な(コンピュータが理解しやすい)表現に変換するといった処理が含まれる。応用例としては予測変換、IMEなどの文字変換が挙げられる。
自然言語の理解をコンピュータにさせることは、自然言語理解とされている。自然言語理解と、自然言語処理の差は、意味を扱うか、扱わないかという説もあったが、最近は数理的な言語解析手法(統計や確率など)が広められた為、パーサ(統語解析器)などの精度や速度が一段と上がり、その意味合いは違ってきている。もともと自然言語の意味論的側面を全く無視して達成できることは非常に限られている。このため、自然言語処理には形態素解析と構文解析、文脈解析、意味解析などをSyntaxなど表層的な観点から解析をする学問であるが、自然言語理解は、意味をどのように理解するかという個々人の理解と推論部分が主な研究の課題になってきており、両者の境界は意思や意図が含まれるかどうかになってきている。
自然言語処理の基礎技術にはさまざまなものがある。自然言語処理はその性格上、扱う言語によって大きく処理の異なる部分がある。現在のところ、日本語を処理する基礎技術としては以下のものが主に研究されている。
現状発達している言語AI技術は、多次元のベクトルから、単語や文書の意味の近さを、その相互関係から推定しているもので、「AIの言語理解」は「人間の言語理解」は根本的に別物である。
「自然言語理解は、AI完全問題と言われることがある。なぜなら、自然言語理解には世界全体についての知識とそれを操作する能力が必要と思われるためである。「理解; understanding」の定義は、自然言語処理の大きな課題のひとつでもある。
人間とコンピュータの間のインタラクションのインタフェース(ヒューマンマシンインタフェース)として、自然言語がもし使えたら非常に魅力的である、といったこともあり、コンピュータの登場初期(1960年頃)には自然言語処理にある種の過剰な期待もあった。SHRDLUなどの初期のシステムが、世界を限定することで非常にうまくいったことにより、すぐに行き過ぎた楽観主義に陥ったが、現実を相手にする曖昧さや複雑さがわかると、楽観的な見方や過剰な期待は基本的には無くなったが、何が簡単で何が難しいのか、といったようなことはなかなか共有されなかった。
やがて、21世紀に入ってしばらく後に「音声認識による便利なシステム」がいくつか実用化・実運用され多くの人が利用したことで、何が簡単で、どういう事に使うのは難しいのかが理解されるようになりつつある模様である。
2013年のGoogleのWord2vecは今でも使われている。
2019年、GPT-2、BERTなど、ディープラーニングを応用した手法で大きなブレークスルーがあった。
自然言語処理(理解)における課題をいくつかの例を用いて示す。
次の2つの文、
は、品詞としては全く同じ順序の並びである。しかし、they が指すものは異なっていて、前者では猿、後者ではバナナとなっている。この例文の場合、theyの指す内容は英語の文型の性質によって決定することができる。すなわち、「they(主語)= hungry(補語)」の関係が成り立ち、補語には主語の性質を示すものがくるので、hungryなのはthe monkeys、したがって、「they = the monkeys」と決まる。後者も同様に、over-ripeというのはthe bananasの性質だから、「they = the bananas」となる。つまり、これらの文章を区別し正しく理解するためには、意味、すなわち、猿の性質(猿は動物で空腹になる)とバナナの性質(バナナは果物で成熟する)といったことを知っていて解釈できなければならない。
単語の文字列を解釈する方法は様々である。例えば、
という文字列は以下のように様々に解釈できる。
典型的には、比喩として、「時間が矢のように素早く過ぎる」と解釈する。
「空を飛ぶ昆虫の速度を矢の速度を測るように測定せよ」つまり (You should) time flies as you would (time) an arrow. と解釈する。
「矢が空を飛ぶ昆虫の速度を測るように、あなたが空を飛ぶ昆虫の速度を測定せよ」つまり Time flies in the same way that an arrow would (time them). と解釈する。
「矢のように空を飛ぶ昆虫の速度を測定せよ」つまり Time those flies that are like arrows と解釈する。
「"time-flies"(時バエ)という種類の昆虫は1つの矢を好む」この解釈には集合的な解釈と個別的解釈がありうる。
「TIMEという雑誌は、投げると直線的な軌跡を描く」
英語では特に語形変化による語彙の区別をする機能が弱いため、このような問題が大きくなる。
また、英語も含めて、形容詞と名詞の修飾関係の曖昧さもある。例えば、"pretty little girls' school"(かわいい小さな少女の学校)という文字列があるとする。
その学校は小さいだろうか?
少女たちが小さいのだろうか?
少女たちがかわいいのだろうか?
学校がかわいいのだろうか?
他にも次のような課題がある。
中国語、日本語、タイ語といった言語は単語のわかち書きをしない。そのため、単語の区切りを特定するのにテキストの解析が必要となり、それは非常に複雑な作業となる。
音声言語において、文字を表す音は前後の音と混じっているのが普通である。従って音声から文字を切り出すのは、非常に難しい作業となる。さらに、音声言語では単語と単語の区切りも(音としてのみ見れば)定かではなく、文脈や文法や意味といった情報を考慮しないと単語を切り出せない。
多くの単語は複数の意味を持つ。従って、特定の文脈においてもっともふさわしい意味を選択する必要がある。
自然言語の構文(構文規則)は曖昧である。1つの文に対応する複数の構文木が存在することも多い。もっとも適切な解釈(構文木)を選択するには、意味的情報や文脈情報を必要とする。
主語の省略や代名詞の対応などの問題(照応解析)。音声におけるアクセントのばらつき。構文上の誤りのある文の解析。光学文字認識における誤りの認識など。
文章は文字通りに解釈できない場合がある。例えば "Can you pass the salt?"(塩をとってもらえますか?)という問いに対する答えは、塩を相手に渡すことである。これに "Yes" とだけ答えて何もしないのはよい答えとは言えないが、"No" はむしろありうる答えで、"I'm afraid that I can't see it" はさらによい(塩がどこにあるかわからないとき)。
統計的自然言語処理は、確率論的あるいは統計学的手法を使って、上述の困難さに何らかの解決策を与えようとするものである。長い文になればなるほど、従来型の自然言語処理では解釈の可能性の組合せが指数関数的に増大していき、処理が困難となる。そのような場合に統計的自然言語処理が効果を発揮する。コーパス言語学やマルコフ連鎖といった手法が使われる。統計的自然言語処理の起源は、人工知能の中でもデータからの学習を研究する分野である機械学習やデータマイニングといった分野である。
一見、統計的自然言語処理は確率モデル型自然言語処理にのみ適用されるように見えるが、実は4大自然言語処理の1つである注意モデル型自然言語処理にも統計の概念が必要なのである。
自然言語処理の応用技術として、以下のような技術が研究・実用化されている。また、言語学への応用も考えられている。