はじめに
自然言語処理の基礎を楽しく学べる問題集として長らく親しまれてた言語処理100本ノック、その2020年版が4/6に公開されました!これは5年振りの改訂です。
2015年版をやったけど興味ある人、15年版のQiita記事が役立たなくなって残念に思ってる人、15年版を途中までやってたけど20年版が出て心が折れそう、という人のために、どこが変わったのかをまとめていきます。もちろん非公式なので変更箇所の見逃し等はあるかもしれません。
改訂の概要
4/7現在、公式の更新履歴によると、次の3点が大きく変わったようです。
- 深層ニューラルネットワークに関する問題を追加
- 第8, 9, 10章が全て新規に作成された問題になっている
- 英語版の公開(39番まで)
- 40番以降も順次公開予定とのこと(著者Twitter)
- 旧第6章(英語テキストの処理)が英語版に移動
- 該当する英語版は未公開。作成中のようだ(Github)。
後述しますが、日本語版を私が見比べた限りでは2015年版の第1~5章は変更無し、第8章はタスクが変更、第9・10章は簡易化、残りは削除という感じです。それ以外では、ダウンロードするファイルのURLが全面的に変更されています(文字コードやリンク先の問題を気にしてのことでしょうか?)。
(6/10 追記)
Rev 1がリリースされました。日本語版は問題文の表記が微修正され、英語版も10章まで完成したようです。
具体的にどこが変わったか
旧第1章: 準備運動
- 変更無し
- 英語版も"パタトクカシーー"が"schooled"になった以外の違いは無さそう
旧第2章: Unixコマンドの基礎
- タイトルが「Unixコマンド」に変更
- tsvファイルが変更。行数も増えた。
- 問題文に変更無し
旧第3章: 正規表現
- 問題文に変更無し
- 日本語Wikipediaデータが更新された
- 英語版では英語版Wikipediaのデータを使う
旧第4章: 形態素解析
- 旧33番「サ変名詞」は削除され、代わりに新37番「『猫』と共起頻度の高い上位10語」追加
- テキストファイルのURLが更新された
- 英語版は"POS tagging"で、Alice’s Adventures in Wonderlandをダウンロードするスクリプトが付属している
- 日本語版ではMeCabが指定されているが、英語版でPOS taggerの指定は無い
旧第5章: 係り受け解析
- 問題文に変更無し
- (6/10追記) Rev 1でテキストファイルが変更され、またCaboCha縛りが無くなった。
旧第6章: 英語テキストの処理
- 概要に書いた通り、英語版に移動
旧第7章: データベース
- 削除
- 旧第7章だけNLP感が無かったので妥当な変更だと思います
旧第8章: 機械学習
- 新第6章に移動
- ただし細かい変更点が多い
- 後半の、深層学習を用いた手法への導入を意識したのかもしれません
- ただし細かい変更点が多い
- タスクが極性分析(2値分類)からカテゴリ分類(多クラス分類)に変更
- 新版のダウンロード先を開こうとすると、証明書が期限切れの可能性という警告が出る
- 旧78番では分割交差検証を行っていたが、新版では代わりにホールドアウト検証を行う
- データセットのサイズが大きくなったので妥当な変更だと思います
- これに伴い、新版では50番でデータを学習データ・検証データ・評価データに分割する
- 旧71番「ストップワード」は削除
- 旧72~75, 77はほぼそのまま新版に移動
- 素性→特徴量など、細かい変更は有り
- ストップワードに続きステミングもオミットされた
- 時の流れの影響かと...
- 旧76番「ラベル付け」は削除され、代わりに新55番「混同行列の作成」追加
- 元々存在意義が微妙な問題ではあった
- 旧79番「適合率-再現率グラフの描画」は削除され、代わりに新58番で正解率-正則化パラメータグラフを描画する
- 新59番「ハイパーパラメータの探索」が追加
旧第9・10章: ベクトル空間法
- 新第7章「単語ベクトル」に移動
- 旧版では単語ベクトルを自力で学習していたが、新版では学習済みのものを利用することになった
- それ以外でやることは旧10章と同じ
- 評価データがリンク切れになっていたが、更新された
新第8章: ニューラルネット
- PyTorch, TensorFlowなどを用いて単層(フィードフォワード)ニューラルネットワークを作成する
- 行列作成→予測→損失と勾配の計算→ミニバッチ化→GPU化→多層化、という具合に、段階的に実装していく構成
新第9章: RNN, CNN
- 自然言語処理の研究でかつてよく使われていたRNN・CNN(の簡易なモデル)を実装する
- 89番はBERTなどの事前学習済み言語モデルを用いて転移学習してみよう、というものになっている
- 現在自然言語処理の様々なタスクで採られているアプローチである
- ライブラリをサンプル通り動かすだけになりそうだが、それも重要な経験だと思います
新第10章: 機械翻訳
- 既存のツールを活用してニューラル機械翻訳を行う
- 機械翻訳は自然言語処理の中心的な分野であり、ツールを使うだけでも重要な経験になると思います
- 99番では機械翻訳の結果がブラウザ上で表示されるデモを作成する
- 旧69番「Webアプリケーションの作成」は何も知らない人にとっては難問でしたが、妥当な形になったと思います
個人の感想
最新の自然言語処理研究の潮流が反映されており、研究室の学生の新人研修に使われる問題集として、よりふさわしいものになったと思います!
余談
- Pythonをほとんどに知らずに100本ノックに取り組みたい人におすすめの記事はこちら→言語処理100本ノックでPythonに入門
- 新10章を解くとき何を使えば良いか迷った人におすすめの記事はこちら→ニューラル機械翻訳ライブラリのざっくりとした紹介