非構造化テキスト分類


12

非構造化テキスト文書、つまり構造が不明なWebサイトを分類します。私が分類しているクラスの数は限られています(この時点で、3つ以上はないと考えています)。誰が私がどのように始めることができるかについて提案していますか?

「言葉の袋」アプローチはここで実行可能ですか?後で、文書構造(おそらく決定木)に基づいて別の分類段階を追加できます。

私はMahoutとHadoopにある程度精通しているため、Javaベースのソリューションを好みます。必要に応じて、ScalaやSparkエンジン(MLライブラリ)に切り替えることができます。

回答:


13

ゼロから解決しましょう。分類(カテゴリ化とも呼ばれます)は、教師あり学習の例です。教師あり学習では、次のものがあります。

  • モデル -データの内部構造に近いもので、それについて推論し、有用な予測を行うことができます(たとえば、オブジェクトのクラスを予測する)。通常、モデルには「学習」したいパラメーターがあります
  • データセットのトレーニングテスト -モデルのトレーニング(パラメーターの適切な値の検出)およびさらに評価するために使用するオブジェクトのセット
  • トレーニングおよび分類アルゴリズム -最初にトレーニングデータセットからモデルを学習する方法を説明し、2番目にトレーニング済みモデルから新しいオブジェクトのクラスを導出する方法を示します

それでは、スパム分類の簡単な例を見てみましょう。トレーニングデータセットは、電子メール+対応するラベル-「スパム」または「スパムではない」のコーパスです。テストデータセットの構造は同じですが、いくつかの独立した電子メールから作成されます(通常、データセットを分割し、その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つの部分に分割できます。

  1. 特徴抽出-生テキストを特徴ベクトルに変換します。
  2. オブジェクトの分類-モデルの構築と適用。

最初のポイントは、多くのNLPライブラリでうまく機能しています。2つ目は機械学習に関するものであるため、データセットに応じて、WekaまたはMLlibを使用できます。


元のポスターは「分類する」という言葉を使用していましたが、「クラスター」はカテゴリの先験的な定義がないため、問題のより正確な説明です。したがって、これは必ずしも教師付き学習の問題ではありません。
MrMeritology 14

@MrMeritology:うーん、コンテキストから、著者は彼が使用しようとしている具体的なクラスについてはよく分からないが、クラスタリングではなく分類が必要だと言うでしょう。とにかく、彼は真実を知っている唯一の人です:)
ffriend 14

多分私はその時点で明確ではなかった。カテゴリはアドバイスで選択されるため、クラスタリングの問題ではなく分類になります。複雑な特徴ベクトルを作成するという考え方は非常に合理的です。特に、いくつかの特定のタグがあり、おそらくいくつかのサンプルをすばやく分類する可能性が高いと思われます。高い非線形性を予測するので、SVMが問題に適合するかどうかはわかりませんが、決定木とベイズが適用できるようです。ハイブリッドアルゴリズム(SVMベースの決定木)の適用についても考え始めています。
グジェゴシE.

@GrzegorzE。-カテゴリが事前に定義されている場合は、これら3つのカテゴリを質問に記載してください。私の意見では、あなたはMLアルゴリズムに集中しすぎており、問題の性質とデータの性質に十分ではありません。たとえば、構造が不明なWebサイトの機能の「非線形」を予測します。どうして?また、Webページのテキストと、who-knows-what-elseのタグを混在させているため、意味の意味が異なります。
MrMeritology 14

@GrzegorzE。-分類方法は、主にアプリオリカテゴリの性質とデータの性質によって決定されることを強くお勧めします。任意のWebサイトを3つのカテゴリに分類する方法は無限にあります。分類の各方法は、データの顕著な特徴または顕著なパターンを提案します。個々のデータ要素(Webページ)とそのコンテキストの手動分析に代わるものはありません。
MrMeritology 14

5

トピックモデリングは、問題に非常に適した方法です。トピックモデルは、指定された(または発見された)トピックの数が、一緒に表示される可能性の高い単語のリストによって定義される、教師なし学習/発見の形式です。個別のステップで、主題の専門家を使用して各トピックにラベルを付けることができますが、3つのクラスターに到達することだけに関心があるため、目的にはこれは必要ありません。

各ドキュメントを単語の袋として扱い、ストップワードなどを削除する前処理を行います。最も簡単な方法では、トピックの数を事前に指定します。あなたの場合、カテゴリの固定制限である「3」を指定するか、より多くのトピック(10〜100)を選択してから、別の手順で、一般的に重要なドキュメントの3つのクラスターを形成します。トピック。K-meansまたは他のクラスタリング手法を使用できます。(後者のアプローチをお勧めします)

トピックモデリングソフトウェアをゼロからコーディングする必要はありません。これは、ソフトウェアライブラリ/パッケージを含む多くのリソースを含むWebページです。

Javaにはありませんが、Javaの下でC ++とPythonを実行する方法があります。


4

以下に、テキスト分類用の非常に優れたオープンソースソフトウェアパッケージをいくつか紹介します。

  • MALLETは、テキストデータを操作するためにUMassによって構築されたCPLライセンスのJavaベースの機械学習ツールキットです。いくつかの分類アルゴリズムの実装が含まれています(たとえば、単純ベイズ、最大エントロピー、決定木)。
  • スタンフォードNLPグループのスタンフォード分類器は、テキストデータを処理するために設計された最大エントロピー分類器のGPLライセンスJava実装です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.