インポートしたフォーラムのトピックを、タイトル内のキーワードをターゲットにして自動的に再分類する機能?

こんにちは、

私は自転車競技(ユニサイクル)に関する古い大規模なフォーラムをインポートしています。

旧カテゴリは最適ではなく、さまざまな話題が混在していました。

そのため、カテゴリの再編成を行っています。

当初は、最近の数百件のトピックを手動で再分類し、古いトピックはそのままにしておくことを考えていました。
未来に焦点を当て、過去にこだわらないという考え方です。古いトピックのカテゴリ分類が不十分でも、それらがまだ利用可能であれば問題ありません。

しかし、キーワードをターゲットにしてトピックを自動的に再分類することで、実際には良い結果が得られるのではないかと考えています。

現在、当フォーラムのトピックの大半(総数の半分を超える!)が単一のカテゴリにまとめられています(:scream:)。

タイトルに含まれる「learn」「learning」「train」「training」「posture」などのキーワードをターゲットにして、これらのトピックを**#riding-adviceカテゴリに移動させることができます。
同様に、「frame」「wheel」「tire」「saddle」などのキーワードは
#unicycles-and-equipments**カテゴリに移動させることができます。

スペースで囲まれた単語をターゲットにし、多単語の表現を想定して「誤検知」をある程度防ぐようにします。例えば、「wheelwalking」はユニサイクルのトリックであり、おそらく**#riding-advice**に分類されるべきです。そのため、「wheel」だけを深く考えずにターゲットにすると、簡単に避けられたはずの誤検知が発生してしまいます(ただし、「wheel」を含むトピックを A から B に移動させ、その後、「wheelwalking」を含むトピックを B から C に移動させるという方法も考えられます)。

このようなことを行った方はいますか?「誤検知」のリスクを最小限に抑えるための提案やアイデアはありますか?これを行う前に知っておくべき明白な(あるいはそうでない)ことはありますか?

約7万件のトピックを確認する必要があります。

一つアドバイスですが、最初から完璧にやる必要があると考えないでください。

キーワードを探すというあなたの考え方は、私が最初にとるアプローチと同じです。最初の試みでやった作業をすべて捨て去ることを恐れないでください。結果が求めていたものではない場合は、最初の試みで得た教訓を活かし、最初からやり直してください。


編集

単語分析を行う無料ツールを素早く検索したところ、テキスト分析に関する情報ページが見つかりました。お読みになる価値があります。

以前、私は同様のプロジェクトに対して、K-meansクラスタリングを用いた教師なし学習のアプローチを採用しました。それはかなり面白い実験になるでしょうし、もしかしたらアルゴリズムがより良い分類を導き出すかもしれません :wink:

そのようなアプローチについては、こちらをご覧ください https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52

@EricGT が言ったように:反復することを恐れないでください。ただし、「ある程度近い」ならそれで十分です。必要に応じて再分類できるよう、いくつかの TL3 ユーザーを準備しておくと良いでしょう。

それは興味深いですね!

ただ、私はこのアプローチを試す時間もおそらくスキルも持っていないでしょう(フォーラムは1ヶ月以上停止しており、まだやるべき仕事が山積みです!)。

最初の試みの後、手動でキーワードを選択する方法は、まだ再分類は行っていないものの、SQLクエリで遊んでいるだけでかなり良い結果を出しているようです。

select title from topics
where category_id = 10
and lower(title) not like '%saddle%'
and lower(title) not like '%crank%'
and lower(title) not like '%pedal%'
and lower(title) not like '%rim%'
and lower(title) not like '%carbon%'
and lower(title) not like '%spoke%'
and lower(title) not like '%wheel%'
and lower(title) not like '%frame%'
and lower(title) not like '%hub%'
and lower(title) not like '%tubeless%'
and lower(title) not like '%disk%'
and lower(title) not like '%hydraulic%'
and lower(title) not like '%duro%'
and lower(title) not like '%dominator%'
and lower(title) not like '%torker%'
and lower(title) not like '%nimbus%'
and lower(title) not like '%bearing%'
and lower(title) not like '%pad%'
and lower(title) not like '%repair%'
and lower(title) not like '%handlebar%'
and lower(title) not like '%kh%'
and lower(title) not like '%kris holm%'
and lower(title) not like '%coker%'
and lower(title) not like '%tube%'
and lower(title) not like '%build%'
and lower(title) not like '%29er%'
and lower(title) not like '%36er%'

and lower(title) not like '%backwards%'
and lower(title) not like '%riding%'
and lower(title) not like '%foot%'
and lower(title) not like '%train%'
and lower(title) not like '%training%'
and lower(title) not like '%learn%'
and lower(title) not like '%learning%'
and lower(title) not like '%dismount%'
and lower(title) not like '%habit%'
and lower(title) not like '%idle%'
and lower(title) not like '%idling%'
and lower(title) not like '%freemount%'
and lower(title) not like '%free mount%'
and lower(title) not like '%free mounting%'

このクエリは、メインカテゴリの52,000件のトピックのうち33,000件を返します。これらは再分類の対象となり得ます。この数は現実的に見えますが、おそらくさらにキーワードを追加する必要があります。

この方法は十分に信頼性があるように思えます。

結局、ここで何をされたのですか?

トピックに固有のキーワードが十分にある場合(すべてのトピックの返信を反復処理し、各投稿内のキーワードを数えていると想定します)、そのトピックに十分な数の固有で特定のキーワードが存在することに基づいて、トピックを自動的に分類することが可能かもしれません。

ただし、これは主に移行時に役立ちます。ライブフォーラムでは、最初からトピックを正しいカテゴリに配置したいと考えているためです。

タイトル内のキーワードを確認してトピックを他のカテゴリへ移動させました。以前の状態に比べれば、これでかなり整理されました。

それは的確なご指摘ですね。多くのトピックタイトルに特定の単語が繰り返し現れることは、新しいカテゴリが必要であるという強力な証拠です。:thinking:

クエリでこれを行いましたか?もしそうなら、クエリテンプレートは何でしたか?データベースの整合性を確保するために、クエリの実行後に他に何かアクティビティが必要でしたか?

インポートスクリプトで実行されたように聞こえるため、タイトルからカテゴリを推測するように変更されたはずです。

インポートを実行していますか?どのソフトウェアからですか?すでにDiscourseに存在するものの場合は、Railsから実行できます。

私が多くのDiscourse関連の仕事で彼を支援した限りでは、インポート後にRailsスクリプトを使用していたことを覚えています。彼はタイトル内のキーワードでトピックを選択し、公式に文書化されたコマンドを使用してそれらを移動しました。例えば、Administrative Bulk Operations のようなものです。

また、タグが付いたトピックを移動する際に、公式コマンドやrakeタスクでは一部のテーブルが完全に更新されず、関連する定期的なSidekiqジョブでも更新されなかったことを覚えています。
それがまだケースであるかどうかはわかりませんが、Bulk tagged topics, then moved topics into another category, but the category tag selector doesn't show tags - #3 by Canapin で注意すべき点かもしれません。

お役に立てば幸いです!