2

仕事中の私のプロジェクトでは、ユーザーが作成した一連のテキストを処理することを任されており、そのテキストの一部には、インターネット サービスをキャンセルする理由と、その理由が発生する頻度が含まれています。彼らが引っ越している、単に気に入らない、サービスが悪いなどの可能性があります。

これは必ずしも Python の質問ではないかもしれませんが、NLTK または Textblob を何らかの方法で使用してキャンセルの理由を判断できる方法があるかどうか疑問に思っています。このような特殊なタスクのために自動化されたものがあることは非常に疑わしく、ニューラル ネットワークを構築する必要があるかもしれないことは理解していますが、この問題に取り組む方法についての提案をいただければ幸いです。

1) ステミングとトークン化を使用し、最も頻繁に使用される単語を集計します。簡単な方法ですが、それほど正確ではありません。2) n グラム。計算集約的ですが、ある程度の見込みがあるかもしれません。3) POS のタグ付けとチャンキング。「because」などの接続詞に続く単語を見つけることができます。4) すべてのテキスト フィールドを手動で確認し、キャンセルの理由をメモします。効率的ではなく、何らかのアルゴリズムを見つけるという目的全体を無効にします。5) NN さん、まったくわかりませんし、実現可能かどうかもわかりません。

これに関するアドバイスをいただければ幸いです。

4

2 に答える 2

2

この回答が一般的すぎたり、理解できないことがあっても心配しないでください。これは学術的なものであり、基本的な準備が必要です。必要に応じて、質問があれば気軽に連絡してください (コメントまたは簡単な方法で私のメールを求めてください。何か解決します)。

この質問は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 を使用します。これはこの種のタスクには素晴らしいツールです) であれば、テキストでそれらを見つけることができます。

于 2015-07-23T07:33:04.573 に答える