走り出してから考えよう

午前中は自然言語処理の授業である。先々週は台風で休講、先週は休日の授業日だったので、今日がいわば本当の1回目のような感じ。

先週みんな出てきていたかどうか分からなかったので(何人かはいなくなり、逆に何人かは新しく来ていた)、授業の講義の部分は結局自分が解説することに。解説は各自自習・お互いに説明したほうが有用だと思うので(大学院の授業だし)、次回以降はちょっと検討したいものである。

演習に関しては、どうも自分の指示がよくなかったようで、失敗……。なぜかみんなやってきていないようなのでおかしいなと思ったのだが、やってきていた課題と違う指示を出していたようである(汗)たぶん授業で「これ解説して」と言われた学生もおかしいと思っていたのではないかと思うのだが、全員そう思いつつ進んでいたようで、授業のあとに研究室の学生に聞いてみて発覚し、驚愕。ちょっと自分のやり方を見直さないといけない。

午後は SLP(自然言語処理の教科書)の輪読。隠れマルコフモデル動的計画法(forward)アルゴリズムの説明である。動的計画法を知らなくても自然言語処理のツールは問題なく使えるだろうが、やはり裏側のアルゴリズムを知っておいたほうがいいのではないかと思う。自分で実装するときには、理解していないと作れないし……(そもそも、自分で実装する必要性が出てくる人は、自然言語処理の研究室に入った学生でも、多く見積もって2〜3割だと思うが)。

自分は元々オープンソースソフトウェア開発からこの業界(?)に入ったし、以前も書いたように自然言語処理オープンソースソフトウェア開発であれば後者の方にご恩を感じるので、基礎か応用か、という議論であれば確実に応用寄りの立場である(理論なんて知らなくても、ほとんどの場合全く問題なく開発できるので)。ただ、自分は体系的に情報科学の基礎を身につけようと思って大学院に進学したし、実際ちゃんとデータ構造やアルゴリズム、プログラミングなどについて学んでみると、それまでできなかったことができるようになったし、ある種の仕事をしよう(したい)と思うと基礎を知らないとできないことがあり、それは大学を出てから身につけるのは難しいと思われるので、大学にいるうちは基礎をやるとよいと思っている。応用がやりたいなら働き始めれば大部分の仕事はそうだし、学生の身分でもオープンソースソフトウェア開発に参加したりもできる(というか、大学の授業だけでは明らかに開発に必要なスキルをカバーしていない)。まあ、基礎か応用かどちらかではなく、基礎も応用も両方やれ、というのが正解である。

もっとも、数年間オープンソースソフトウェア開発に従事して、それはそれで楽しい経験だったし、一時はそれを仕事にすることも真剣に考えた(海外で働くとすると、現実的には自分のできる仕事はそれくらいだったし)。結局「ずっとこういう仕事(インフラの設計や運用)がしたいんだろうか」と自問自答して、方向転換してアルゴリズムを一から学びなおすことにしたので、最初は基礎的なことはともかくしばらく手を動かせるタスクである程度回してみて、これならやっていける、という感覚を持つのも大事なのかなと思う。それから理論を学ぶと「ああ、そういうことだったのか」という体験をすることができるし、順番が逆だとそういう感動がなく、基礎が好きな一部の人でないとおもしろいと思わないだろうし……。

そういえば、[twitter:@tanichu] さんから「イラストで学ぶ人工知能概論」をいただいた。

イラストで学ぶ 人工知能概論 (KS情報科学専門書)

イラストで学ぶ 人工知能概論 (KS情報科学専門書)

この本、広く人工知能の各テーマを扱っているが、こだわるところはこだわっていておもしろい(深層学習についても書かれていたり)。学部2年生以降が対象のようだが、恐らく意欲のある高校生は読めるし、外さないところはしっかり書いてあるので、入門書としておすすめである(ちなみに、自然言語処理の部分は自分がチェックしたので、その部分はコンパクトによくまとまっていると思う)。カバーされているトピックもさることながら、「導出された形は簡潔なので細かい理論は知らなくても実装することは難しくないが、背景にこういうアルゴリズムや理論があることは押さえてほしい」というようなメッセージが散りばめられていて、文章を読むのがおもしろいのである(高村さんの「言語処理のための機械学習入門」にも、そのような「ほとんどの教科書には書かれていないが、初学者に向けたポイントとなるメッセージ」がときどきあって、素敵な本だなぁと思ったものである)。

夕方は DL(deep learning = 深層学習)勉強会。人工知能学会誌の深層学習の連載記事をとりあえずみんなで輪読し、勉強しようという目的である。初回は「ディープボルツマンマシン入門―ボルツマンマシン学習の基礎―」であるが、話を聞いていて、なるほどなと納得した部分もあり(一応学会誌が届いたときにさらっと読んでいるのだが)、大変理解が深まった。やはり常に新しいことを学び続けないと、研究者としての成長も止まってしまうし、流行り物だからと敬遠することなく(研究者は他人と同じことはしたがらない人が多いので、スピード勝負に乗らない人もいる)、流行り物だからこそ、陳腐化するのを恐れず試してみる、という姿勢もありかなと思った。

夜に翌日の授業の準備をする。英語の構文解析のできるツール、ということで Stanford CoreNLP を入れてもらおうとしたのだが、なかなかよい GUI のツールがなく、やりたいのは実際のところ単語の頻度の集計と共起の分析だし、それなら AntConc でよいか、ということで AntConc に切り替えてもらう。日本語に関しても、ChaKi.NET で……(本当は CaboCha も入れてほしいのだが、AntConc に揃えるとすると MeCab だけでよい)。よくよく見ると SegmentAnt が日本語にも対応しているようなので、ぶっちゃけこれでいいのかも。