feature image

2020年9月26日 | ブログ記事

言語処理100本ノック2020を打った話

この記事は,traP夏のブログリレー2020・26日目の記事です.

はじめに

YumizSuiと言います.貴重な18Bの新入部員です.SysAdでくねくねと活動をしています.

今年の夏休みはコロ助の影響でどうにも屋外活動する気になれない.かと言って無為な夏休みを消耗するのもナンだということで,岡崎研でやってると噂の言語処理100本ノック 2020をやってみました.

ちなみに言語処理100本ノックって何?

これ

言語処理100本ノックは,実用的でワクワクするような課題に取り組みながら,プログラミング,データ分析,研究のスキルを楽しく習得することを目指した問題集です.

らしいです.10本で1章×10で100本というスタイルになってます.

終わってみると色々と得るものがあったのでこの場を借りて紹介してみたいと思います.解説記事ではありませんのでご了承ください.

なお,自分は言語処理に関する知識はほとんどゼロに等しい状態からスタートしましたが,ググれば割となんとかなりました.詳細が気になる人はネットに答え転がっていたり解説記事が上がってるのでそういうの見るといいと思います.

環境

1〜5章

最初は手慣れた環境でやってましたが,windows10の環境構築がしんどすぎて脱北しました.condaをWindowsで動かしてたのが災いして一日環境構築で潰した結果うまく行かなかったという背景があります.Windowsでやるなら完全にWSL上で完結させるのが良いかと思います(そうするとGPUとか面倒そうだけど).

6〜10章

初心なる人々はLinuxを信ぜよ.さらば救われん.
ガチプロなおLinux以て精進を遂ぐ,況んや初心者をや.

と昔の人も言っています[要出典].初心者こそLinuxを使ったほうが良いということですね!(個人の見解です)

その他

実はGPUが使えてない!ことに10章で気がついた.というか10章は全体的に個人でやるにはやや辛いのでどのみちGoogle Colaboratoryに頼らざるを得なかった.無料でも使えるが,データが消えないように定期的にアクセスする必要があり,面倒なので結局Proにした.おかげでtesra v100のような強いGPUの効能が知れたので良かった.環境構築めんどくさいのでこれ使うのはアリだと思います.ただ手違いで学習したデータが消えると本当に萎えるのでメイン使いはちょっと…って感じでした.月額$9.99/月に過度な期待はしないでください.

やる

GitHubに上げたリポジトリのコミットログなどを漁ってどんな感じに進めていったのか記録していく.開始日は8/18

1.準備運動

終了日:8/18

pythonの基本的な使い方など.やる必要はなさそうだが100本ノックなのでやる.「パタトクカシーーってなんですか?」

2.UNIXコマンド

終了日:8/18

UNIXコマンドと同じことをするというやつ.前処理のすゝめ.1,2章は3時間くらいで終わった.やるぞ〜とみなぎっていたらしい.

3.正規表現

終了日:8/20

Wikipediaのデータをろ過していく章.言語処理,全体的に前処理で苦労するんだなあという気持ち.pythonの正規表現は触ったことがなかったので半日かかったっぽい.

4.形態素解析

終了日:8/20

形態素解析

吾輩は猫であるの形態素解析をMeCabを使ってやりました.この辺からいよいよ自然言語処理だ〜〜って感じですよね.

この辺までは順調に行っていたので,8月中には終わるだろうとか思ってましたが甘かったようです.

5.係り受け解析

終了日:8/23

wikipediaの人工知能の章をかかり受け解析します.この辺から間隔が空いてますね.一日5タスクくらいでやってました.100本ノック以外にも何かと精進もしていたらしい.

係り受け解析は大変でした.何が大変かというとCabochaの環境構築です! これを機にLinuxで作業するようになった.一日潰れた作業がLinuxでは秒で終わるなどして呻いてました.

6.機械学習

終了日:8/25?くらい

後半戦です.ここでは記事タイトルを元にカテゴリ分類を行うタスクを行います.上のように,素朴な機械学習でも9割くらいの性能が出ており,なるほど馬鹿にできない.このデータは以降の章でも使います.この辺は割と知ってるつもりでしたが,tqdmや,optunaなどは初めて使った.

7.単語ベクトル

終了日:8/27

word2vecを使って国をクラスタ分類をします.この辺はグラフで出力できるタスクが多く,いろいろ分析できて楽しかったです.環境を移行する中途でgithubのデータが消えてしまってた:sadparrot:

8.ニューラルネット

終了日:8/31

pytorch, pytorchです.カテゴリ初めて触りました.思ったより簡単でびっくりしました.ハイパーパラメータの調整で無限に時間を使ってました.↑のは少しでも学習率を上げるとまともに学習できないのですが,epoch20くらいまでは全然学習進まなくて大変でした.学習率の感度を下げるにはどうしたら良いんでしょうね.GPUが使えないので(この時点では気づいてない)学習が遅くて大変でした.

9.RNN,CNN

終了日:9/3?

CNN
LSTM

自然言語処理といえばRNNだと思ってましたが,LSTMにしないとまともにパフォーマンスがでなかった.この程度だとモデルの出来によってはCNNの方が良いという現象が起きるというのは手を動かさないと分からないなと思った.この辺はライブラリの力が強いのでそんな苦労しなかった気がする.

10.機械翻訳90~98

終了日:9/5?

これはニューラル機械翻訳の既存のツールを用いて機械翻訳をする回.この章は割とニッチな内容が多くて調べる時間のほうが多かった.fairseqのコマンドを叩いて学習していたので一応動くけど何だろうこれ? という感じではあったので,気が向いたら論文でも読もうかしらん.

ただ,この章はちょっと出来たとは言い難い.全然性能が出ない.答えを公開している人の数値と照らし合わせても数値が噛み合ってないので謎だった(損失が同じくらいなのにBLEUスコアが数倍違う等).

Google Colab Proを使ったのでtesla v100の計算力を体感できたが,それでもすごい時間がかかる.深層学習の発展が計算リソースの拡大に依るところが大きいのだな,というのは分かっていたけれど驚きがあった.

そして

最終課題: 99.翻訳サーバの構築

終了日:9/20

終わる目処が立ったので割とのんびりやってました.

最終課題のラスボス感しゅごい.

traPに入って少しずつwebに触れるようになったものの,自前で一個作ったことはなかったので,この機会にちゃんとやってみることにした.

実は,traPではWebエンジニアになろう講習会という,余裕で2-3単位くらい出そうな講習会をやっています.自分も新入生(18B)として参加しましたが,その最終回でも何かwebアプリケーションを作るという課題が出てました(ここまで到達した人は少なそうですが).

本当はtwitterクローンとかを作るのだけど,せっかくなので100本ノックと一纏めにしてやってみました(認証などをする必要ないのでこっちのほうが難易度は低いけど).

やる

Golang+Vue.jsでやります.作ったwebアプリケーションはshowcaseと呼ばれる静的なコンテンツを配信するための部内向けPaaSサービスを用いました.

やった

初めてにしてはという感じ.ちなみにロゴはfigmaで適当に作りました.

当初は公開する予定でしたが,モデルが大きすぎてこれをアップロードするのが流石に憚られるのでキャプチャするだけに留めておきます.

一応ハリボテのHonnyakuが立っています.APIを叩くと,翻訳はしないで決まった文章をレスポンスとして返します.

honnyaku

で,翻訳機能の方はどうなんですか?

…以上です.

完走した感想

言語処理100本ノックに挑戦する前の自分のスキルはおおよそ,

といった感じでした.これが,言語処理100本ノックを通じて,

こうなった.

手を動かしてゴニョゴニョするという方面で圧倒的成長!が感じられました.

もともとインプット過多アウトプット皆無型の人間だったので,このようにタスク型で進めていくスタイルが合っていたと思います.

一方で形態素解析やかかり受け解析,自然言語処理そのものの理論や,最終章の機械翻訳などはあまり理論が抑えられなかったので,あとで勉強したい.

機械学習に関しては副読本としてゼロから作るDeepLearning2を読んだのが結構良かった(7〜9章の理論的背景の基礎が手っ取り早く固められた).以前にDEEP LEARNING BOOKを輪講したことがありましたが,100本ノックを通して知識と実際の結びつけに成功したように思います.

言語処理100本ノックは各々の粒度に合わせて進めていけるのが良き!と思いました.調べてみるとpythonやったことないという人でも,自然言語処理を既に研究している,実務で使ってるという人でも楽しめる幅の広さがあるように思います.

おわりに

いかがでしたか?????

今年はイレギュラーが過ぎて,この状況が良いのか悪いのかもさっぱりしない様相ですが,それはそれとして今できることに手を付けてみるのも良いかと思います.

また,traPに入ってなければ,特に最終課題は完成させられなかったし(モチベ的な意味も含め),記事にすることもなかったと思うので,入部してよかったなと思いました.

明日はMochoさんのflashの希望と未来についてらしいです.お楽しみに!

YumizSui icon
この記事を書いた人
YumizSui

編のJK

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2017年11月14日
IBIS2017参加報告
Keijan icon Keijan
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年4月18日
ベズー係数とN項の拡張ユークリッドの互除法
0214sh7 icon 0214sh7
2021年9月21日
ISUCON11 traP CM制作についての小話
dan_dan icon dan_dan
2017年11月4日
文章をよしなに分散表現しよう
David icon David
2021年9月8日
五度圏⊃自然音階って…コト!?
kotoki_bis icon kotoki_bis
記事一覧 タグ一覧 Google アナリティクスについて