0

私はPythonで、生のチャットデータとクラスターセンテンスを同様の意図で処理できるように開発しようとしています。そのため、新しいチャットボットを構築するためのトレーニング例として使用できます。目標はできるだけ迅速かつ自動(すなわち、手動で入力するパラメータなし)にすることです。クラスタリングを使用して類似の意図を持つ文章をグループ化するにはどうすればよいですか?

1-特徴抽出のために、私はそれぞれの文をトークン化し、その語をステミングし、SklearnのTfidfVectorizerを使用してベクトル化します。

2次にSklearnのDBSCANで文章ベクトルのクラスタリングを行います。私はこのクラスタリングアルゴリズムを選択しました。なぜなら、ユーザがクラスタ数(k-meansのkパラメータのような)を指定する必要がないからです。それは多くの文を(外れ値として考える)多くの文を投げ捨てるが、少なくともそのクラスターは同質である。

全体的なアルゴリズムは、比較的小さなデータセット(10000の文章を)上で動作し、意味のあるクラスタを生成しますが、いくつかの問題があります。大規模なデータセット(例えば800000の文章)で

  • が、それはあまりにも必要なため、DBSCANが失敗しましたクラウド内の強力なマシン上で並列処理を行っても、多くのメモリを使用できます。計算量が少なくて済むメソッドが必要ですが、奇妙で異種の文のクラスターを作成しない別のアルゴリズムは見つかりません。他にどんな選択肢がありますか?大量の高次元データを処理できるアルゴリズムは何ですか?

  • DBSCANによって生成されるクラスタは、(私の特徴抽出方法のために)類似した言い回しを持つ文章ですが、対象語句は常にインテントを表すとは限りません。どのようにして文章の意図をよりよく把握できるように、私の特徴抽出を改善することができますか? DBSCANの標準実装が唯一のO(n)のメモリを必要とすることになっている

答えて

0

...私はDoc2vecを試してみましたが、文のサイズのドキュメントで作られた小さなデータセットでうまく動作していないようでした。このメモリ要件を下回ることはできません。しかし、私はsklearnのDBSCANが実際にO(n²)のメモリを使用しているところを読んでいるので、最適な実装ではありません。必要なメモリ量を減らすために、これを自分で実装する必要があります。

これらのメソッドが "インテントで"クラスタ化できるとは思わないでください。監督されていないアルゴリズムが意図されているものを推論する方法はありません。おそらく、クラスターはちょうどいくつかのキーワードに基づいています。しかし、これは人々が "こんにちは"か "こんにちは"と言うかどうかである可能性があります。監視されていない観点から、この区別は2つの良いクラスター(およびいくつかのノイズ、おそらく別のクラスター "ホラー")を与える。

私はを監督することをお勧めします。「インテント」とラベル付けしたサブセットに基づいてフィーチャ抽出を行います。

+0

gensim.ldamodelのような潜在的なディリクレ分布に基づいてモデルを考えると、文章をトピックにまとめるのに役立ちます。 – sergzach

関連する問題