NLTKは元もとペンシルバニア大学で作成されたPythonによる自然言語処理ライブラリー。
バイグラムは単語のペアである。コロケーションは頻繁に共起するバイグラム:例 red wine。
テキストコーパス
語彙資源:語彙項目(見出し語+品詞+語彙定義などで構成する)のリスト、語彙リストコーパス。ストップワードコーパス、発音辞書(単語+音素リスト)、比較語彙リスト(約200の単語をいくつかの言語で記す)
WordNet:シソーラスに似ているがよりリッチ。階層構造(概念として上位、下位、最上位語は一般的概念)、メロニムはある要素からそれを含む構成要素への関係(木を構成するのは幹、枝)、ホロニムは構成要素とそれを含む要素(木は森を形成する)、類似性(非常に具体的な上位語を共有する)。
生テキストの処理
グーテンベルグプロジェクト
トークン化で文字列を単語と句読点のような基本単位に分割する。
テキストの正規化
ステマー:単語から接辞を取り除くのをステミングという。
見出し語化:語形を辞書に記述されている語形に変換する。
単語分割では、単語の境界が視覚的にわかるように文字の後ろに単語境界があるかどうかを示す論理値を各文字に振る方法がある。(トークン化が多義的なときはどうするんだろう?)
単語の分類
品詞:名詞、動詞、形容詞、副詞など。単語を品詞分類し、タグ付けするのは品詞タグ付け、POSタグ付け、タグ付けという。品詞タガーまたはPOSタガー。REFuse(廃棄物:名詞)とrefUSE(拒否する:動詞)はアクセントが違う別の単語であり、同音異義語ではない。正しい発音には品詞タグ付けが必要。
オープンクラス(名詞など、あたらな語彙が生まれやすい)とクローズドクラス(長い時間をかけてゆっくり変化する:前置詞、冠詞、法助詞(should、mayなど)、人称代名詞など)
タグ付き単語の形式:(単語, タグ)。タグ付きコーパス
自動タグ付け:デフォルトタガー(例:すべてのトークンに同じタグをつける)、正規表現タガー(パターンマッチングでタグ付け)、ルックアップタガー
Nグラムタグ付け:ユニグラムタガーは一つの要素のみでタグ付けする。Nグラムタガーは現在の単語とその前のn-1個のトークンの品詞タグを文脈として利用する。
ブリルタグ付けはまず一度タグを推定し、戻って誤りを訂正する方法。教師あり学習。訂正ルールのリストを作る。
テキスト分類の学習
教師あり分類器
素性集合:分類に使われるそれぞれの入力の基礎的な情報を表すもの。素性集合とラベルのペアを機械学習のアルゴリズムに渡す。
素性抽出器は試行錯誤で構築されるのが普通である。
コーパスを開発セットとテストセットに分ける。開発セットは訓練セットと検証セットに細分する。
品詞タガーの場合、一般的な接尾辞を素性として使うと決定木分類器を訓練できる。
Pythonは、Cのような低レベル言語と比べて、学習アルゴリズムが時間とメモリを大量に消費する。
決定木:根節点からスタート、入力値の素性による判断で枝に分岐、次の決定節点で別の素性で分岐、葉節点でラベルが付く。エントロピーと情報利得を計算して決定株を決める。決定木の下になるほど、データ量が減るので過学習が起きやすくなる。
単純ベイズ分類器:ベイジアンネットワークグラフ。単純ベイズ仮定(独立仮定)とはすべての入力値がまずクラスラベルを選んだ後に、それぞれの素性を生成していると仮定する。
P(label|features)=P(features, label)/P(features)
最大エントリピー分類器:訓練コーパスの全体尤度を最大化する。
テキストからの情報抽出
構造化データと実体と関係が予測可能な形で組織化、正規化されているもの。例:企業名と住所を表の形で提供する。その時、住所から企業を探すのは簡単。自然言語は構造化されていないので文章から同じことが困難である。
情報抽出とは構造化されていないデータを構造化データに変換すること。パイプライン:生テキスト⇒文分割⇒トークン化⇒品詞タグ付け⇒固有表現認識⇒関係認識
チャンキング、チャンカ
文構造の分析
構文解析器は、入力文を文法の生成規則に従って処理して、文法に沿った一つ以上の構成素構造を作る。再帰下降構文解析、Shift-Reduce構文解析。
ChaSen形式:出現形、読み、原形、品詞、活用
日本語WordNet:
fcbond (Francis Bond) · GitHub
形態素:意味を持つ最小の言語単位。形態素解析とは与えられた文を形態素単位に区切ること。日本語では品詞など形態素の情報を記述した辞書を参照して形態素解析をする。
MeCab、Juman
JUMAN - LANGUAGE MEDIA PROCESSING LAB