2016-04-10 14 views
2

私は大きなデータコースプロジェクトに取り組んでいるグループの一員であり、私たちはNLPの問題として認識しています。現在のようなJSONにフォーマットされたデータのグループいますトピックの自然言語処理

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 
    "dragons": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 2137 
    }, 
    "furry-fandom": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 48595 
    }, 
    "legendarycreatures": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 10523 
    } 

タグは、関連する情報(カテゴリ、人気度、およびカテゴリ/トピックのID番号)に関連付けられているトピックです。私たちは、取り上げているAPIがそれを処理して以来、各トピックの関連カテゴリを既に持っています。しかし、私たちの問題は、カテゴリーが広すぎて意味のある傾向を特定するのに33しかなく、トピックがオーバーラップ(例:ドラゴン/伝説の生き物)にあまりにも特異的で、約22,000人が多すぎます。

これはNLPが入る場所です。私たちは、「カテゴリ」ほど広くはないが、現在の話題ほど具体的ではない、ある種のスーパートピックのセットを作りたいと思っています。 "ドラゴンズ"と "レガンダリクリーチャー"を再び使用する例は、両方とも、他のものと同様に、「ファンタジー」というスーパートピックに適合します。

私たちはPythonを使用してデータを取得/処理していますが、これを引き続き使用したいと思います.NLPの実践経験はありません。

この点を念頭に置いて、私たちはいくつかの提案をして、この苦闘の領域を手助けしたいと思います。より良い方法がある場合、またはNLPで実現可能でない場合、私たちはそれらに公開しています。私たちが避けようとしているのは、分類のためのある種のテーブルをハードコーディングすることです。

TL:DR:現在のカテゴリよりも具体的ではあるが、現在のカテゴリよりも広範ではない適切な「スーパートピック」に22,000個のトピックを分類しようとしています。私たちはPythonを使っている間にNLPを使ってこれをやろうとしていますが、それについてはわからず、また提案にもオープンしています。

+0

ここhttp://stackoverflow.com/a/22905260/610569 – alvas

答えて

1

、それは分類器を訓練するプロセスを簡素化するので。テキスト分類子の作成方法については、チュートリアルhereを参照してください。もちろん、あなたの特定の問題では、あなたが分類したいいくつの異なるカテゴリを見つける必要があります。その後、重要なトレーニングセットを提出するよう訓練する必要があります(データセットの過度の適合を避けるにはあまりにも多くない)。その時点で、分類器はタイプ

"dragons": { 
"category": "lifestyle", 
"category_id": 17, 
"score": 0.279108277990115, 
"topic_id": 2137 
} 

の新しいデータを取得する準備ができています。その時点で、テストデータセットに対して分類を評価する必要があります。 これは、このミニセット(あなたはそれが昆布しまう大きなものを提供することができます)を見ている途中で思わとして、あなたのようなデータのいくつかのクラスター持っているようですので、明らかにされていません。lifestyle

としてタグ付け

最初のクラスタを

"dragons": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 2137 
}, 
"furry-fandom": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 48595 
}, 
"legendarycreatures": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    } 

2つ目のクラスタはあなたにスーパーカテゴリを定義するにはsocializing

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 

をタグ付け、あなたはdragonslegendarycreaturesなどの用語があることクラシファイアを伝える必要があります同じデータセットを使用する場合は、fantasyとします。したがって、これは単なる問題または分類ではなく、テキスト分析とセマンティクスの両方でもあります。legendarycreatures =>legendary + creatures(単語の袋)は、dragonsという単語までの距離が他の単語よりも近いので、word2vecがここで助けますそれらの名前のベクトルを評価し、それらの背後にあるメトリクスとそれらの間の距離を定義することができます。良好な実装は、gensimによって提供されます。

私はword2vecを言及しています。なぜなら、それらのエントリのそれぞれについてテキスト/説明を持っているかどうかです。最後のケースでは、dragonsまたはlegendarycreaturesのようなアイテムのタイトルの指標を定義することができます。

[UPDATE] だから、私は@rhieverによって作らTpotという名前の「自動的に遺伝的プログラミングを使用して機械学習のパイプラインを作成し、最適化し、」新しい技術を使用して、右の分類アルゴリズムを見つける方法を把握しようとしています

この場合、ツールは入力として特徴ベクトル(word2vecから)を必要とします。これは教師付きデータセット形式で提供する必要があります。ここにはdiscussionがあります。それは良い出発点です。

+0

を見て、私が持っているカップルの異なるデータセットです: (http://txt.do/5wvo8) ます(http:// TXT。 do/5wvj6) これは私たちが持っている最小のものです。他のものはGBのサイズに近づき、はるかに多様化しています。 –

+0

okを見てみましょう... – loretoparisi

+0

@AustinHoller私はちょうどさらなる分析でこのスレッドを更新しました、今すぐ良い出発点があります。 – loretoparisi

1

これは典型的な分類問題です。 Pythonを使用する場合は、Natural Language ToolKit(NLTK)、特にnltk.classifyパッケージを使用することをお勧めします。分類のためのNLTKの使用の概要と概要は、http://www.nltk.org/book/ch06.htmlにあります。 nltk.classify上の詳細情報を取得するには:私はTextBlobを提案します

>>> import nltk 
>>> help(nltk.classify) 
関連する問題