テキストクラスタリング用のアルゴリズム
-
16-10-2019 - |
質問
私は、その意味によって膨大な量の文章をグループに集中させるという問題があります。これは、多くの文章があり、それらの意味でそれらをグループ化したい場合の問題に似ています。
これを行うためにどのようなアルゴリズムが提案されていますか?事前にクラスターの数を知りません(そして、より多くのデータが来ているため、クラスターも変化する可能性があります)、各文を表すために通常使用される機能は何ですか?
私は今、単語のリストと文の間の距離だけで定義された最も単純な機能を試しています:
(AとBは、文Aとbの対応する単語のセットです)
それはまったく理にかなっていますか?
応募しようとしています 平均シフト Scikitライブラリからこの距離までのアルゴリズムは、事前にクラスターの数を必要としないためです。
誰かが問題に対するより良い方法/アプローチをアドバイスするなら、私はまだトピックに慣れていないので、それは非常に高く評価されます。
解決
を確認します スタンフォードNLPグループのオープンソースソフトウェア(http://www-nlp.stanford.edu/software)、 特に、 スタンフォード分類器 (http://www-nlp.stanford.edu/software/classifier.shtml)。ソフトウェアはに記述されています Java
, 、おそらくあなたを喜ばせるだけでなく、他のいくつかの言語のバインディングもあります。注意、 ライセンス - 商用製品でコードを使用する予定がある場合は、商用ライセンスを取得する必要があります。
オープンソースライブラリのもう1つの興味深いセット、このタスクなどに適した私見は、 機械学習グラフラブの並列フレームワーク (http://select.cs.cmu.edu/code/graphlab)、それを含む クラスタリングライブラリ, 、さまざまなクラスタリングアルゴリズムの実装(http://select.cs.cmu.edu/code/graphlab/clustering.html)。特に適しています 非常に大量のデータ (あなたが持っているように)、それが実装するように MapReduce
モデル、したがって、サポート マルチコア と マルチプロセッサ 並列処理.
あなたはおそらく次のことを知っていますが、念のために言及します。 自然言語ツールキット(NLTK) にとって Python
(http://www.nltk.org)テキストのクラスタリング/分類/分類用のモジュールが含まれています。関連する章を確認してください NLTK Book
: http://www.nltk.org/book/ch06.html.
アップデート:
と言えば アルゴリズム, 、あなたはからほとんどを試したようです scikit-learn
, 、このトピック抽出例に示されているような例: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html. 。ただし、さまざまなものを実装する便利な他のライブラリを見つけることができます クラスタリングアルゴリズム, 、 含む 非陰性マトリックス因数分解(NMF). 。そのようなライブラリの1つはです Python Matrix Factorization(Pymf) でホームページがあります https://code.google.com/p/pymf およびソースコードで https://github.com/nils-werner/pymf. 。もう1つの、さらに興味深いライブラリ、Pythonベースも、 nimfa, 、さまざまな実装です NMFアルゴリズム: http://nimfa.biolab.si. 。これが研究論文を説明しています NIMFA
: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf. 。以下は、そのドキュメントの例を示します。 トピッククラスタリング: http://nimfa.biolab.si/nimfa.examples.documents.html.