学生募集‎ > ‎

自然言語処理を独習したい人のために

首都大学東京自然言語処理研究室(小町研)に入学する人たちは、入学後に自然言語処理・離散数学・機械学習・プログラミングの基礎勉強会を行なうため、特に事前に学習することはありませんが、入学前に勉強しておいたほうがよいことはあるか、と問い合わせがあるので、自然言語処理の独習用の情報を書いておきます。(主に人文系の学部生を対象にしています。)

数学

ほとんどの大学の入学試験で微分積分・線形代数が必須となっているので、理工系の学部1年生程度の微分積分・線形代数の知識は身につけましょう。機械学習(最適化数学)を勉強するに当たって、微分積分・線形代数の知識が必要になります。微分積分・線形代数については研究室でフォローアップはしませんし、大学でも基礎講義はない(履修できるが単位にならない、という意味ではなく、そもそも 日野キャンパスでは補習的な授業は開講されていない)ので、大学院入試がきっかけだと思って、入学前に勉強しておいてください。

自然言語処理で用いられる機械学習では高校数学の範囲は全て登場します。よく使うのは「ベクトル(内積)」「連立方程式」「確率(同時確率・条件付 き確率、確率変数・確率分布)」「数列(等差数列・極限)」「微分(対数関数・指数関数の導関数、合成関数の微分、関数の極大・極小および最大・最小)」 「行列(固有値、逆行列)」あたりです。人文系の人は、高校の教科書と大学受験の参考書でよいので、復習しましょう。未習の人は苦しいかもしれませんが、もしこれらの数学を勉強するのがどうしても無理な場合、東大の言語情報科学専攻のように人文系を対象とした大学院に進まれたほうがよいと思います。

入学してからは、機械学習に関する研究をしなければ微分積分や線形代数が出てくることはほとんどなく、離散数学(要はデジタルな値に対する数学)が主に登場する数学になります。(ただし、割合は研究室によって異なりますが、うちの研究室では、8割の学生が機械学習を何らかの形で用いる研究テーマに取り組みます。)

ちなみに小町は哲学科から情報科学研究科に専攻を変えたため、M1のとき「行列のテンチ」が分からず(漢字も知らず、かつ漢字を聞いてもなんのことか分からない)、授業中先生に質問したくらいですが、学部1年生程度の線形代数をちゃんと勉強していれば、「行列の転置」は知っているものと思います(そんな自分が博士後期課程では行列演算を駆使した研究テーマに携わることになったので、将来は分からないものです)。NAIST は情報科学・数学・プログラミングの基礎講義を大学が用意してくれるので、入学前に知識が十分になくても大丈夫です。基礎知識に不安がある人は、NAIST に進学しましょう。

英語

自然言語処理に限らず情報工学分野ではほとんどの最新の研究成果は英語で発表されるため、英語で論文を読むことが必須です。エンジニアとして就職する場合も、英語で発表された論文を読んでプログラムとして実装する、ということが主な業務になったりするので、英語の読解能力は必須であると考えてください。具体的には大学院入学前に TOEIC 600 以上、修士を卒業するころには 700 以上を目指しましょう。(もっとも、ここ10年で学生の英語力は格段に向上し、人文系出身の人は TOEIC 700点台は普通にあり、時々900点台もいる、という状況だと思いますので、人文系の人にとってはあまり気にならないと思います)

ちなみに話したり書いたりというアウトプットができるととてもよい(海外でインターンシップをしたい人などはアウトプット能力必須)ですが、博士後期課程に進学しない場合は、必ずしも論文を英語で書く必要はないので、ひとまず読解能力(論文に書かれている内容を他人に説明できるくらい理解して、プログラムに落とす能力)を身につけるようにしましょう。

英語力がそれなりにある(目安としては TOEIC 700点以上)場合、自然言語処理は海外にインターンシップまたは留学に行く機会もふんだんにありますが、大学院から自然言語処理に専門を変えた場合は専門知識が足りずに行けない、あるいは就職活動とバッティングして行けない場合が多いので、海外に行ってみたい人は博士後期課程への進学を検討してください。D1/D2 は余裕があるので数ヶ月〜1年程度海外の大学・研究機関等に行くことは可能ですし、進学予定であれば就職活動をしなくてよいので、M2 の時期に行くことができます。

プログラミング

大学院入試ではプログラミング能力について問われる(合否に関係する)ことはほとんどありませんが、入学後にプログラミング能力がどれくらいあるかによって、研究のスピードが大きく異なります。自然言語処理分野で多く使われている言語は、Python・Java・C++ といったところです。当研究室では、Python を「公式」言語とし、デフォルトは Python で書いています。他に得意な言語・好きな言語がある場合は、それを大事にされるとよいかと思いますが、どの言語でもよいので、リファレンスを見なくてもやりたいことがすらすら書けるくらいの言語を一つ作ってください(複数の言語に手を出してどれも中途半端になるより、一つの言語でも使いこなせているほうが、遥かに望ましいです)。

プログラミングについて自信がない人は、入学前にたとえば CodingBat にある問題(Python と Java のみ)や Codecademy を全部解いてみて、何も見ないですらすらと解けるようになるまで繰り返してください。Aizu Online Judge も練習に適しています(ただし、Python だと時間切れになってしまう問題が多いので、Python でやる場合は全部完璧に解こうとはしない方がいいと思います)。参考書としては「みんなの Python」を勧めています。ウェブで参照できるものとしては「お気楽 Python プログラミング入門」(Algorithms with Python)がよいでしょう。

機械学習

現在9割以上の自然言語処理の研究では機械学習を用いた手法が提案されています。従って、機械学習は自然言語処理の研究をするに当たっては、避けて通れない道です。学部3年生と一緒に高村「言語処理のための機械学習入門」(コロナ社, 2010)を半年かけて読み、演習問題を全部解きますので、もし独習されたい方はそちらをお読みください(読むだけでなく、演習問題も飛ばさず全て解きましょう。全部の問題に、解答がついています)。

内容が難しすぎる、と感じる場合は恐らく数学の基礎知識が不足しているので、入学前に機械学習の勉強を独学でがんばるよりは、数学の勉強をしてみてください(機械学習は、研究室の中で基礎勉強会を行なうので入学後でもよいですが、微分積分や線形代数に関しては、研究室の中でも大学の中でも講義・演習がないので、入学後に勉強することが困難であるためです)。

自然言語処理

入学後にもう一度学び直すので、あえて独習する必要はありませんが、独習されたい場合は Python による日本語自然言語処理 をお勧めします。実際のプログラムもついているので、実行しながら学ぶことができます(ただし、記述が古いため、そのままでは動かないようです)。独習に向いているのは言語処理100本ノックですが、入学後に新入生は全員解きます。

研究に関してはACL Anthology というサイトに自然言語処理の論文誌・国際会議の発表論文がほぼ網羅されているので、この中の論文タイトルをざっと見てみたり、おもしろそうなタイトルの論文を見つけたら中を読んでみたりしてください。お勧めは ACL, NAACL, EMNLP, COLING, TACL です。

本を1冊挙げるなら黒橋「自然言語処理」(放送大学出版, 2015)をお読みください。薄いながら、しっかり必要な分野をカバーしています。また、大学図書館にアクセス可能なら、人工知能学事典の第7章「自然言語処理」もコンパクトにまとまっていて、お勧めです。

Comments