この回答が一般的すぎたり、理解できないことがあっても心配しないでください。これは学術的なものであり、基本的な準備が必要です。必要に応じて、質問があれば気軽に連絡してください (コメントまたは簡単な方法で私のメールを求めてください。何か解決します)。
この質問はCrossValidatedにより適していると思います。
とにかく、最初に行う必要があるのは、トレーニング セットを作成することです。理由のある文書をできるだけ多く見つけて、注釈を付け、理由を特定するフレーズをマークする必要があります。ドキュメントは多ければ多いほどよい。ユーザー レポートを使用する場合は、サンプル レポートを使用して、トレーニング データと実際のデータが同じソースから取得されるようにします。これが、処理用のある種のコーパスを構築する方法です。
次に、必要な機能を指定する必要があります。これは、POS タグ、n-gram 機能、レンマ/ステムなどである可能性があります。これには、実験と練習が必要です。ここでは、いくつかの n-gram 機能 (おそらく 2-gram または 3-gram) と、Wordnet に基づく知識を使用します。
最後のステップは、チャンカーまたはアノテーターを構築することです。これは、トレーニング セットを取得して分析し、何をマークすべきかを学習するコンポーネントです。「セマンティック ギャップ」と呼ばれるものに遭遇します。この用語は、プログラムが必要以上に何かを「学習」した場合の状況を表します (簡略化したものです)。たとえば、チャンカーが理由フレーズの代わりに「I don't」フレーズを見つけることを学習するような一連の機能を使用できます。これは、トレーニング セットと機能セットに大きく依存します。その場合は、機能セットを変更してみてください。しばらくしてから、代表的なものではない可能性があるため、トレーニング セットで作業してみてください。
そのようなチャンカーを構築する方法は?あなたの場合、HMM(隠れマルコフモデル)または-さらに良い-CRF(条件付きランダムフィールド)を使用します。これら 2 つはストリーム アノテーションに一般的に使用される統計的手法であり、テキストは基本的にトークンのストリームです。別のアプローチは、任意の「標準」分類子 (単純ベイズから、いくつかの決定トレス、NN から SVM まで) を使用し、テキスト内のすべての n-gram でそれを使用することです。
もちろん、機能セットの選択は、選択した方法に大きく依存するため、それらについていくつか読んで、賢明に選択してください。
PS。これは単純化しすぎた回答であり、トレーニング セットの準備、機能の選択、コーパスの前処理、それらのソースの検索などに関する多くの重要事項が欠落しています。
PPS。確かではありませんが、NLTK には CRF または HMM が実装されている可能性があります。そうでない場合は、Markov にはscikit-learn を、CRFにはCRFP++をお勧めします。注意してください-後者は強力ですが、インストールしてJavaまたはpythonから使用するのは難しいです。
==編集==
機能について簡単に説明します。
まず、どのような特徴を想像できるでしょうか。
- lemma/stem - コーパス内の各単語の語幹または補題を見つけ、最も重要なものを選択し (通常、それらの頻度が最も高いか、少なくともそこから開始します)、各単語/n-gram をバイナリ ベクトルとして表します、ステミング/レンマタイゼーションの後に表現された単語またはシーケンスにその機能レンマ/ステムが含まれているかどうかを示します
- n-gram - 上記と似ていますが、単一の単語の代わりに長さ n の最も重要なシーケンスを選択します。「n-gram」は「長さ n のシーケンス」を意味するため、たとえば「I sat on a bench」のバイグラム (2-gram) は、「I sat」、「sat on」、「on a」、「a bench」のようになります。 "。
- skipgrams - n-gram に似ていますが、元の文に「ギャップ」が含まれています。たとえば、"Quick brown fox jumped over something" (申し訳ありませんが、このフレーズを今思い出せません :P ) のギャップ サイズが 3 の biskipgram は、["Quick", "over"], ["brown", "なにか"]。一般に、ギャップ サイズ m の n-skipgrams は、単語を取得する、m をスキップする、単語を取得するなどの方法で取得されます (n 単語がない場合を除く)。
- POS タグ - 私はいつも "positional" タグと間違えていましたが、これは "Part Of Speech" の頭字語です。一般的な単語ではなく、一般的な文法構造を持つフレーズを見つける必要がある場合に便利です。
もちろん、それらを組み合わせることができます。たとえば、見出し語のスキップグラム、見出し語の POS タグ、または見出し語の POS タグの *-gram (お気に入りを選択してください:P) を使用することもできます。
LemmaのPOSタグを使う意味は?それは単語の基本的な形の品詞を説明するので、「これは複数の女性名詞です」ではなく「これは名詞です」のような事実に特徴を単純化します。
機能の選択はプロセス全体の中で最も重要な部分の 1 つであることを忘れないでください (もう 1 つはデータの準備ですが、これは 1 学期のコースに値するものであり、機能の選択は 3 ~ 4 回の講義で処理できるため、基本はこちら)。チャンクを「探している」ときは、ある種の直感が必要です。たとえば、色に関するすべての表現を見つけたい場合は、おそらく 2 グラムまたは 3 グラムの単語を使用してみてください。 gram には、最も一般的な色の名前と修飾子 (「明るい」、「暗い」など) と POS タグが含まれています。いくつかの色 (「マゼンタ」など) を見逃していたとしても、学習した知識を十分に一般化した方法 (これも CRF を使用します。これはこの種のタスクには素晴らしいツールです) であれば、テキストでそれらを見つけることができます。