web-dev-qa-db-ja.com

必要なコンテンツ、アルゴリズム、提案に自動タグを付ける方法

私は新聞記事のいくつかの非常に大きなデータベースを扱っています。それらはMySQLデータベースにあり、それらすべてにクエリを実行できます。

私は現在、これらの記事にいくらか説明的なタグを付けるのに役立つ方法を探しています。

これらの記事はすべて、次のようなURLからアクセスできます。

http://web.site/CATEGORY/this-is-the-title-slug

したがって、少なくともこのカテゴリを使用して、どのタイプのコンテンツを扱っているかを把握できます。ただし、記事のテキストに基づいてタグも付けたいと思います。

私の最初のアプローチはこれを行うことでした:

  1. すべての記事を取得する
  2. すべての単語を取得し、すべての句読点を削除し、スペースで分割して、出現回数でカウントします
  3. それらを分析し、「them」、「I」、「this」、「these」、「their」などの一般的な説明的でない単語を除外します。
  4. すべての一般的な単語が除外されたとき、残っているのはタグに値する単語だけです。

しかし、これはかなり手作業の作業であり、非常にかわいらしいまたは役立つアプローチではないことがわかりました。

これは、スペースで区切られた単語または名前の問題も抱えていました。たとえば、1.000の記事に「John Doe」という名前が含まれ、1.000の記事に「John Hanson」という名前が含まれている場合、「John」という単語しか取得できません。それから、彼の名ではなく、姓。

28
Kasper Grubbe

記事に自動的にタグを付けることは本当に研究上の問題であり、他の人がすでに多くの作業を行っている場合は、車輪の再発明に多くの時間を費やすことができます。 [〜#〜] nltk [〜#〜] のような既存の自然言語処理ツールキットの1つを使用することをお勧めします。

開始するには、適切なTokeniserの実装(空白で分割するよりもはるかに優れています)を検討してから、チャンキングおよびステミングアルゴリズムを検討することをお勧めします。

n-grams 、つまり個々の単語ではなく単語のシーケンスの頻度をカウントすることもできます。これにより、「スペースで分割された単語」が処理されます。 NLTKのようなツールキットには、このための関数が組み込まれています。

最後に、アルゴリズムを繰り返し改善するときに、データベースのランダムなサブセットでトレーニングを行い、アルゴリズムが残りの一連の記事にタグを付けてどのように機能するかを確認することができます。

21
Anupam Jain

Kea を見てください。これは、テキストドキュメントからキーフレーズを抽出するためのオープンソースツールです。

あなたの問題は http://metaoptimize.com/qa でも何度も議論されています:

6
paraba

私があなたの質問を正しく理解しているなら、あなたは記事を類似性クラスにグループ化したいと思います。たとえば、記事1を「スポーツ」に割り当て、記事2を「政治」に割り当てることができます。または、クラスが非常にきめ細かい場合は、同じ記事が「ダラスマーベリックス」と「共和党大統領選挙」に割り当てられる可能性があります。

これは、「クラスタリング」アルゴリズムの一般的なカテゴリに分類されます。そのようなアルゴリズムには多くの選択肢がありますが、これは活発な研究分野です(つまり、これは解決された問題ではないため、どのアルゴリズムも期待どおりに機能しない可能性があります)。

Latent Direchlet Allocation(http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation)または「LDA」を確認することをお勧めします。私は利用可能なLDA実装のいずれについても個人的な経験がないため、特定のシステムを推奨することはできません(おそらく、ユーザーフレンドリーな実装を推奨できるよりも知識のある他のシステム)。

LDAが疑われるが、LingPipeで利用可能な凝集クラスタリングの実装を検討することもできます( http://alias-i.com/lingpipe/demos/tutorial/cluster/read-me.html を参照)。実装の信頼性がいくらか高くなる可能性があります。

クラスタリングシステムを検討する際に考慮すべき2つの質問:

  • 分数クラスのメンバーシップを許可しますか?例:経済見通しと大統領選挙への潜在的な影響について論じている記事を検討してください。そのドキュメントは、一部が「経済」クラスターに、一部が「選挙」クラスターに属することができますか?一部のクラスタリングアルゴリズムは部分的なクラス割り当てを許可し、一部は許可しません

  • クラスのセットを手動で作成しますか(つまり、「経済」、「スポーツ」などをリストします)、それともデータからクラスのセットを学習しますか?手動のクラスラベルは、より多くの監視(手動の介入)を必要とする場合がありますが、データから学習することを選択した場合、「ラベル」は人間にとって意味がない可能性があり(たとえば、クラス1、クラス2など)、さらにはクラスの内容はひどく有益ではないかもしれません。つまり、学習アルゴリズムは類似性を見つけ、類似していると見なすドキュメントをクラスター化しますが、結果のクラスターは、「適切な」クラスに何を含めるべきかについての考えと一致しない場合があります。

5
AaronD

コンテンツが画像またはビデオの場合は、次のブログ記事を確認してください。

http://scottge.net/2015/06/30/automatic-image-and-video-tagging/

画像や動画からキーワードを自動的に抽出する方法は基本的に2つあります。

  1. マルチインスタンスラーニング(MIL)
  2. ディープニューラルネットワーク(DNN)、リカレントニューラルネットワーク(RNN)、およびバリアント

上記のブログ記事では、解決策を説明するために最新の研究論文をリストしています。それらのいくつかには、デモサイトとソースコードさえ含まれています。

コンテンツが大きなテキストドキュメントである場合は、次のブログ記事を確認してください。

市場で最高のキーフレーズ抽出API http://scottge.net/2015/06/13/best-key-phrase-extraction-apis-in-the-market/

ありがとう、スコット

2
Scott Ge

あなたのアプローチは賢明なようで、タグ付けを改善する方法は2つあります。

  1. タグ付けに既知のキーワード/フレーズのリストを使用し、この単語/フレーズのインスタンスの数がしきい値(おそらく記事の長さに基づく)より大きい場合は、タグを含めます。
  2. 品詞タグ付けアルゴリズム を使用して、記事を賢明なフレーズのセットに減らし、賢明な方法を使用してこれからタグを抽出します。このようなアルゴリズムを使用して記事を削減すると、方法1のキーワード/フレーズリストで使用するのに適した候補の単語/フレーズを特定できるようになります。
2
Rasika

タグのセットが事前定義されていると仮定すると、次の回答が示すようにElasticsearch PercolatorAPIを使用できます。

Elasticsearch-「タグ」インデックスを使用して、指定された文字列内のすべてのタグを検出します

1
Redtopia

名前エンティティの認識について話していますか?もしそうなら、アヌパムジャインは正しいです。ディープラーニングとCRFの使用に関するリサーチクエスチョン。 2017年、名前とエンティティの認識の問題は、セミサプライズの学習テクノロジーに迫っています。

以下のリンクは関連する論文です: http://ai2-website.s3.amazonaws.com/publications/semi-supervised-sequence.pdf

また、以下のリンクはTwitterでのキーフェーズ抽出です: http://jkx.fudan.edu.cn/~qzhang/paper/keyphrase.emnlp2016.pdf

0
DavidJohn197749