回答:
ゼロから解決しましょう。分類(カテゴリ化とも呼ばれます)は、教師あり学習の例です。教師あり学習では、次のものがあります。
それでは、スパム分類の簡単な例を見てみましょう。トレーニングデータセットは、電子メール+対応するラベル-「スパム」または「スパムではない」のコーパスです。テストデータセットの構造は同じですが、いくつかの独立した電子メールから作成されます(通常、データセットを分割し、その9/10をトレーニングに、1/10をテストに使用します)。電子メールをモデル化する1つの方法は、それぞれを一連の単語(バッグ)として表すことです。単語が互いに独立していると仮定すると、Naive Bayes classifierを使用できます。つまり、各単語と各クラスの事前確率を計算し(トレーニングアルゴリズム)、ベイズ定理を適用して、新しいドキュメントの事後確率を見つけます特定のクラス。
したがって、基本的には次のとおりです。
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
ここで、オブジェクト(ドキュメント)を単語の袋として表したことに注意してください。しかし、唯一の方法はありますか?実際、生のテキストからさらに多くを抽出できます。たとえば、そのままの単語の代わりに、語幹や見出し語を使用したり、ノイズの多いストップワードを削除したり、単語のPOSタグを追加したり、名前付きエンティティを抽出したり、ドキュメントのHTML構造を調べたりすることもできます。実際、ドキュメント(および、一般に、任意のオブジェクト)のより一般的な表現は、特徴ベクトルです。です。たとえば、テキストの場合:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
ここで、最初の行は可能な機能のリストであり、後続の行はその機能がドキュメントで発生する回数を示しています。たとえば、最初のドキュメントには「actor」という単語はありません。「burn」という単語は1つ、名詞は5つ、形容詞は2つ、太字のテキストは2つあります。最後の列は、結果のクラスラベルに対応します。
特徴ベクトルを使用して、テキストのプロパティを組み込むことができます。優れた機能セットを見つけるには時間がかかる場合があります。
モデルとアルゴリズムはどうですか?ナイーブベイズに縛られていますか。どういたしまして。ロジスティック回帰、SVM、ディシジョンツリー -人気のある分類子はほとんどありません。(ほとんどの場合、「分類子」と言うのは、モデル+対応するトレーニングと分類のアルゴリズムを意味することに注意してください)。
実装に関しては、タスクを2つの部分に分割できます。
最初のポイントは、多くのNLPライブラリでうまく機能しています。2つ目は機械学習に関するものであるため、データセットに応じて、WekaまたはMLlibを使用できます。
トピックモデリングは、問題に非常に適した方法です。トピックモデルは、指定された(または発見された)トピックの数が、一緒に表示される可能性の高い単語のリストによって定義される、教師なし学習/発見の形式です。個別のステップで、主題の専門家を使用して各トピックにラベルを付けることができますが、3つのクラスターに到達することだけに関心があるため、目的にはこれは必要ありません。
各ドキュメントを単語の袋として扱い、ストップワードなどを削除する前処理を行います。最も簡単な方法では、トピックの数を事前に指定します。あなたの場合、カテゴリの固定制限である「3」を指定するか、より多くのトピック(10〜100)を選択してから、別の手順で、一般的に重要なドキュメントの3つのクラスターを形成します。トピック。K-meansまたは他のクラスタリング手法を使用できます。(後者のアプローチをお勧めします)
トピックモデリングソフトウェアをゼロからコーディングする必要はありません。これは、ソフトウェアライブラリ/パッケージを含む多くのリソースを含むWebページです。
Javaにはありませんが、Javaの下でC ++とPythonを実行する方法があります。
以下に、テキスト分類用の非常に優れたオープンソースソフトウェアパッケージをいくつか紹介します。