私はPythonで、生のチャットデータとクラスターセンテンスを同様の意図で処理できるように開発しようとしています。そのため、新しいチャットボットを構築するためのトレーニング例として使用できます。目標はできるだけ迅速かつ自動(すなわち、手動で入力するパラメータなし)にすることです。クラスタリングを使用して類似の意図を持つ文章をグループ化するにはどうすればよいですか?
1-特徴抽出のために、私はそれぞれの文をトークン化し、その語をステミングし、SklearnのTfidfVectorizerを使用してベクトル化します。
2次にSklearnのDBSCANで文章ベクトルのクラスタリングを行います。私はこのクラスタリングアルゴリズムを選択しました。なぜなら、ユーザがクラスタ数(k-meansのkパラメータのような)を指定する必要がないからです。それは多くの文を(外れ値として考える)多くの文を投げ捨てるが、少なくともそのクラスターは同質である。
全体的なアルゴリズムは、比較的小さなデータセット(10000の文章を)上で動作し、意味のあるクラスタを生成しますが、いくつかの問題があります。大規模なデータセット(例えば800000の文章)で
が、それはあまりにも必要なため、DBSCANが失敗しましたクラウド内の強力なマシン上で並列処理を行っても、多くのメモリを使用できます。計算量が少なくて済むメソッドが必要ですが、奇妙で異種の文のクラスターを作成しない別のアルゴリズムは見つかりません。他にどんな選択肢がありますか?大量の高次元データを処理できるアルゴリズムは何ですか?
DBSCANによって生成されるクラスタは、(私の特徴抽出方法のために)類似した言い回しを持つ文章ですが、対象語句は常にインテントを表すとは限りません。どのようにして文章の意図をよりよく把握できるように、私の特徴抽出を改善することができますか? DBSCANの標準実装が唯一のO(n)のメモリを必要とすることになっている
gensim.ldamodelのような潜在的なディリクレ分布に基づいてモデルを考えると、文章をトピックにまとめるのに役立ちます。 – sergzach