素人の言語処理100本ノック:まとめ

  • 190
    いいね
  • 4
    コメント

言語処理100本ノック 2015の挑戦記録のまとめです。

挑戦した環境

Ubuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。
問題00問題01だけはPython 2.7です。)

第1章: 準備運動

テキストや文字列を扱う題材に取り組みながら,プログラミング言語のやや高度なトピックを復習します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題00 スライス、print()
問題01 スライス
問題02 Anaconda、zip()itertools.zip_longest()、イテラブルの前に*をつけると引数にバラしてくれる
問題03 len()list.append()str.split()list.count()
問題04 enumerate()、Python3.3以降ではデフォルトでハッシュがランダム化される
問題05 n-gram、range()
問題06 set()set.union()set.intersection()set.difference()
問題07 str.format()string.Templatestring.Template.substitute()
問題08 chr()str.islower()input()、3項演算子
問題09 Typoglycemia、random.shuffle()str.join()

第2章: UNIXコマンドの基礎

研究やデータ分析において便利なUNIXツールを体験します.これらの再実装を通じて,プログラミング能力を高めつつ,既存のツールのエコシステムを体感します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題10 [UNIXコマンド]manの日本語化、open()、シェルスクリプト、[UNIXコマンド]wc,chmod、ファイルの実行権限
問題11 str.replace()、[UNIXコマンド]sed
問題12 io.TextIOBase.write()、[UNIXコマンド]cut,diff、UNIXコマンドの短いオプションと長いオプション
問題13 [UNIXコマンド]pastestr.rstrip()、Pythonの「空白文字」の定義
問題14 [UNIXコマンド]echo,read,head
問題15 io.IOBase.readlines()、[UNIXコマンド]tail
問題16 [UNIXコマンド]splitmath.ceil()str.format()//で切り捨ての除算ができる
問題17 set.add()、[UNIXコマンド]cut,sort,uniq
問題18 ラムダ式
問題19 リストの内包表記、itertools.groupby()list.sort()

第3章: 正規表現

Wikipediaのページのマークアップ記述に正規表現を適用することで,様々な情報・知識を取り出します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題20 JSONの操作、gzip.open()json.loads()
問題21 正規表現、raw string記法、raisere.compile()re.regex.findall()
問題22 [正規表現]貪欲マッチ,非貪欲マッチ
問題23 [正規表現]後方参照
問題24
問題25 [正規表現]肯定の先読み、sorted()
問題26 re.regex.sub()
問題27
問題28
問題29 Webサービスの利用、urllib.request.Request()urllib.request.urlopen()bytes.decode()

第4章: 形態素解析

夏目漱石の小説『吾輩は猫である』に形態素解析器MeCabを適用し,小説中の単語の統計を求めます.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題30 conda、pip、apt、[MeCab]インストール,使い方、形態素解析、ジェネレータ、yield
問題31 [形態素解析]表層形
問題32 [形態素解析]原形・基本形、リストの内包表記
問題33 [形態素解析]サ変接続の名詞、2重ループのリストの内包表記
問題34
問題35 [形態素解析]名詞の連接
問題36 collections.Countercollections.Counter.update()
問題37 [matplotlib]インストール,棒グラフ,日本語表示,軸の範囲,グリッド表示
問題38 [matplotlib]ヒストグラム
問題39 [matplotlib]散布図、Zipfの法則

第5章: 係り受け解析

『吾輩は猫である』に係り受け解析器CaboChaを適用し,係り受け木の操作と統語的な分析を体験します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題40 [CaboCha]インストール,使い方、__str__()__repr__()repr()
問題41 [係り受け解析]文節と係り受け
問題42
問題43
問題44 [pydot-ng]インストール,有向グラフ、Pythonで作られているモジュールのソースの確認方法
問題45 [係り受け解析]格、[UNIXコマンド]grep
問題46 [係り受け解析]格フレーム・格文法
問題47 [係り受け解析]機能動詞
問題48 [係り受け解析]名詞から根へのパス
問題49 [係り受け解析]名詞間の係り受けパス

第6章: 英語テキストの処理

Stanford Core NLPを用いた英語のテキスト処理を通じて,自然言語処理の様々な基盤技術を概観します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題50 ジェネレータ
問題51
問題52 語幹、ステミング、snowballstemmer:使い方
問題53 [Stanford Core NLP]インストール,使い方、subprocess.run()、XMLの解析、xml.etree.ElementTree.ElementTree.parse()xml.etree.ElementTree.ElementTree.iter()
問題54 [Stanford Core NLP]品詞,レンマ、XMLの解析、xml.etree.ElementTree.Element.findtext()
問題55 [Stanford Core NLP]固有表現、XPath、xml.etree.ElementTree.Element.iterfind()
問題56 [Stanford Core NLP]共参照
問題57 [Stanford Core NLP]係り受け、[pydot-ng]有向グラフ
問題58 [Stanford Core NLP]主語,述語,目的語
問題59 [Stanford Core NLP]句構造解析,S式、再帰呼び出し、sys.setrecursionlimit()threading.stack_size()

第7章: データベース

Key Value Store (KVS) やNoSQLによるデータベースの構築・検索を修得します.また,CGIを用いたデモ・システムを開発します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題60 [LevelDB]インストール,使い方、str.encode()bytes.decode()
問題61 [LevelDB]検索、Unicodeコードポイント、ord()
問題62 [LevelDB]列挙
問題63 JSONの操作、json.dumps()
問題64 [MongoDB]インストール,使い方,インタラクティブシェル,バルクインサート,インデックス
問題65 [MongoDB]検索,ObjectId、JSON形式の変換表にない型の扱い
問題66
問題67
問題68 [MongoDB]ソート
問題69 Webサーバー、CGI、HTMLエスケープ、html.escape()html.unescape()、[MongoDB]複数条件の検索

第8章: 機械学習

評判分析器(ポジネガ分析器)を機械学習で構築します.さらに,手法の評価方法を学びます.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題70 [機械学習]自動分類,ラベル,教師あり学習・教師なし学習
問題71 ストップワード、アサーション、assert
問題72 [機械学習]素性
問題73 [NumPy]インストール,行列演算、[機械学習]ロジスティック回帰,ベクトル化,仮説関数,シグモイド関数,目的関数,最急降下法,学習率と繰り返し回数
問題74 [機械学習]予測
問題75 [機械学習]素性の重み、[NumPy]ソートした結果のインデックス取得
問題76
問題77 正解率、適合率、再現率、F1スコア
問題78 [機械学習]5分割交差検定
問題79 [matplotlib]折れ線グラフ

第9章: ベクトル空間法 (I)

大規模なコーパスから単語文脈共起行列を求め,単語の意味を表すベクトルを学習します.その単語ベクトルを用い,単語の類似度やアナロジーを求めます.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題80 単語のベクトル化、bz2.open()
問題81 [単語ベクトル]複合語の対処
問題82
問題83 オブジェクトの直列化・シリアライズ、pickle.dump()pickle.load()
問題84 [単語ベクトル]単語文脈行列,PPMI(正の相互情報量)、[SciPy]インストール,疎行列の扱い,直列化、collections.OrderedDict
問題85 主成分分析(PCA)、[scikit-learn]インストール,PCA
問題86
問題87 コサイン類似度
問題88
問題89 加法構成性、アナロジー

第10章: ベクトル空間法 (II)

word2vecを用いて単語の意味を表すベクトルを学習し,正解データを用いて評価します.さらに,クラスタリングやベクトルの可視化を体験します.

投稿へのリンク 主に学んだこと、コメントで教えていただいたことなど
問題90 [word2vec]インストール,使い方
問題91
問題92
問題93
問題94
問題95 スピアマンの順位相関係数、インスタンスへの動的メンバー追加、**でべき乗ができる
問題96
問題97 クラシフィケーション、クラスタリング、K-Means、[scikit-learn]K-Means
問題98 階層的クラスタリング、Ward法、デンドログラム、[SciPy]Ward法,デンドログラム
問題99 t-SNE、[scikit-learn]t-SNE、[matplotlib]ラベル付き散布図

100本ノックを終えて

8ヶ月もかかってしまいましたが、なんとか100本ノックに耐えることができました。このような素晴らしい課題をデータ・コーパス付きで公開されている岡崎先生に大変感謝しております。

また皆さんから、コメント、編集リクエスト、いいね、ストック、フォロー、ブログやSNSでのご紹介などをいただき、本当に励みになりました。最後まで続けられたのは皆さんのおかげです。ありがとうございました。

投稿した記事が、後に続く方の参考になることがあれば幸いです。