この記事では、自然言語処理の問題集として有名な言語処理100本ノックの2020年版全100問のPythonによる解答例を紹介します。間違いやより良い方法など、お気づきの点があればぜひお気軽にコメントください。
なお、解答にはGoogle Colaboratoryを利用しており、各記事内のリンクより直接参照することができます。
目的別のオススメ解答順
言語処理100本ノックは、実務や研究で必要となる基礎力が幅広く習得できるようにとても練られて設計されているため、当然すべて解くというのが理想的なのですが、機械学習を勉強する目的によっては利用頻度の低い知識が含まれていることも事実です。
そこで、ここでは目的に応じて取り組むべき問題の例を参考として示します。
最速で機械学習コンペティションに参加したい
kaggleやSIGNATEといった機械学習コンペに参加したいと思った場合にも、言語処理100本ノックは強力な演習ツールとなります。一方で、コンペは実際に参加しないと得られないものも非常に多いため、ある程度の基礎を習得したあとは、実践にシフトすることが重要です。
そこで、オススメの取り組み順は以下のようになります。Pythonをある程度触ったことがある場合は、最初の導入本は省略してもOKです。
② 第1章: 準備運動
③ 第6章: 機械学習
④ 第8章: ニューラルネット
⑤ 機械学習手法本
以下、それぞれ解説します。
Python導入本
本当に初めてPythonを触る、という方は、演習の前にPythonの導入本を一冊軽く読みながら、実際にいくつかの例を実行してみることをオススメします。100本ノックに入ったあとの理解度が大きく変わるはずです。以下の2冊はどちらも分かりやすいので、好きな方を選んでみてください。
第1章: 準備運動
自然言語処理に限らないPythonによるデータの取扱いの基礎を習得することができます。この段階で、以下の書籍等を参照しながら、numpyやpandasといった基本的なデータ解析ライブラリにも触れておけるとなお良いです。
第6章: 機械学習
2~5章は大胆に省略します。6章では、実際のデータを使ってモデルを学習する意味やモデルの精度とは何か、といった核心的な知識を実際に実行しながら体験することができるため、コンペを目指す方には必須の章となります。
第8章: ニューラルネット
ご存じのとおり、現在多くのアプリケーションのベースやコンペの上位アルゴリズムはディープラーニング、つまりニューラルネットをベースとしています。この章では、とてもシンプルなニューラルネットの実装、および学習ループを自身で設計することを通して、将来避けては通れない発展的な技術を学ぶ上で必須となる基礎知識を習得することができます。
機械学習手法本
ここまでで、実際のデータからモデルを学習し、その精度を確認するといった一連の流れは実現できるはずです。あとは、実際のコンペに参加して実践の中で学んでいくことが一番ですが、最後に機械学習手法の理論・実装を横断的に解説している本を読んでおくことをオススメします。コンペでは、一つの手法がうまくいかない場合に、別の手法を次々に試すことが求められますが、その引出しを作っておくイメージです。
具体的には、以下の2冊が読みやすく、実践的です。
実務で使える機械学習の基礎力を習得したい
実務で機械学習を使いたいと思った場合、コンペと大きく異なるところは、データの取得や加工といった「分析以前」の作業が多くなることです。そこで、以下の取り組み順をオススメします。
② 第1章: 準備運動
③ 第2章: UNIXコマンド
④ 第3章: 正規表現
⑤ 第6章: 機械学習
⑥ 第8章: ニューラルネット
⑦ 機械学習手法本
第2章: UNIXコマンド
データの取得や加工にはコマンドを活用することが多いかと思います。この章では頻出のコマンドを実際に試しながら習得することができるため、「どのコマンドを知っておくべきか」という観点から、取り組んでおくべき章であるといえます。
第3章: 正規表現
コマンドの実際の利用シーンにおいては正規表現を組み合わせることが多々あります。2章で習得した内容を実践的なものとするために、併せて本章にも取り組んでおくと良いでしょう。
もっとも、本当に正規表現を活用しようと思うと、本章の内容だけではやや網羅性に欠けるため、余裕があれば以下の書籍のような読みやすく、かつ網羅性の高いものにもチャレンジできると良いかと思います。
自然言語処理の基礎をしっかり習得したい
言語処理100本ノックを全力で活用しましょう。もっとも、日本語の解析を予定していない場合は、4、5章は飛ばしてもよいかと思います。
② 第1章: 準備運動
③ 第2章: UNIXコマンド
④ 第3章: 正規表現
⑤ 自然言語処理概観本
⑥ 第4章: 形態素解析
⑦ 第5章: 係り受け解析
⑧ 第6章: 機械学習
⑨ 第7章: 単語ベクトル
⑩ 第8章: ニューラルネット
自然言語処理概観本
自然言語処理領域において、どのような目的でどのような手法が用いられているのか、といった内容を理解するために領域全体を概観できるような本を読んでおくと良いかと思います。今できること、できないこと、を踏まえて以降の章に取り組むことで、今後の自身の方向性を考えながらより密度の濃い演習ができるはずです。
オススメは超有名どころですが以下の1冊です。
第7章: 単語ベクトル
単語のベクトル化とは何か、実際にどのような計算ができるのか、といった内容を習得することができます。単語同士の距離感を定量化することで何ができるのかを理解するために必須の章です。
9、10章について、いずれも知っておいて損はないものの、各自が目的に応じて勉強を進める中で、必要な部分は必要なタイミングで出会うはず、と思われるためオススメ順には入れておりません。取り組む意義がない、という意味では決してありませんので、問題をご覧になって興味のあるものにはぜひ挑戦してみてください。
全100問の解答例
第1章: 準備運動
テキストや文字列を扱う題材に取り組みながら,プログラミング言語のやや高度なトピックを復習します.
第2章: UNIXコマンド
研究やデータ分析において便利なUNIXツールを体験します.これらの再実装を通じて,プログラミング能力を高めつつ,既存のツールのエコシステムを体感します.
第3章: 正規表現
Wikipediaのページのマークアップ記述に正規表現を適用することで,様々な情報・知識を取り出します.
第4章: 形態素解析
夏目漱石の小説『吾輩は猫である』に形態素解析器を適用し,小説中の単語の統計を求めます.
第5章: 係り受け解析
『吾輩は猫である』に係り受け解析器を適用し,係り受け木の操作と統語的な分析を体験します.
第6章: 機械学習
文書分類器を機械学習で構築します.さらに,機械学習手法の評価方法を学びます.
第7章: 単語ベクトル
単語の類似度計算や単語アナロジーなどを通して,単語ベクトルの取り扱いを修得します.さらに,クラスタリングやベクトルの可視化を体験します.
第8章: ニューラルネット
深層学習フレームワークの使い方を学び,ニューラルネットワークに基づくカテゴリ分類を実装します.
第9章: RNN, CNN
深層学習フレームワークを用い,再帰型ニューラルネットワーク(RNN)や畳み込みニューラルネットワーク(CNN)を実装します.
第10章: 機械翻訳
既存のツールを活用し,ニューラル機械翻訳モデルを構築します.
解答準備中
おわりに
言語処理100本ノックは自然言語処理そのものだけでなく、基本的なデータ処理や汎用的な機械学習についてもしっかり学ぶことができるように作られています。 オンラインコースなどで機械学習を勉強中の方も、とても良いアウトプットの練習になると思いますので、ぜひ挑戦してみてください。