ストップワードの良いリストを作成する方法


9

ストップワードのリストをキュレートする方法に関するヒントを探しています。誰かが前処理とフィルタリングのためにデータセット自体からストップワードリストを抽出するための良い方法を知っている/誰かが推奨できるか?

データ:

数年にわたる可変長の膨大な量の人間によるテキスト入力(検索用語と全文(最大200文字))。テキストには大量のスパム(ボットからのマシン入力、単一の単語、愚かな検索、製品の検索など)が含まれており、数%しか役に立たないようです。時々(ごくまれに)人々が本当にかっこいい質問をして私の側を探すことに気づきました。これらの質問はとてもかっこいいので、時間をかけて人々がどのように検索しているか、人々が私のウェブサイトの使用に興味を持っているトピックを確認するために、それらをより深く調べる価値があると思います。

私の問題:

前処理(つまり、スパムのドロップ)に本当に苦労しています。私はすでにウェブからいくつかのストップワードリスト(NLTKなど)を試しましたが、これらはこのデータセットに関する私のニーズに実際には役立ちません。

あなたのアイデアと議論の人々をありがとう!


1
Python NLTKモジュールはストップワードデータを提供し、それが役に立たない場合は、データセットに関する詳細情報を提供するのに役立ちます。なぜあなたのケースでは役に立たなかったのですか?
Kasra Manshaei、2015年

@kasramsh:これらのSWをフィルタリングしたところ、スパムを大幅に除外できなかったような印象を受けました。その理由は、これらのリストは自然なテキスト(不確か)に基づいて生成されているため、検索ワードやサイトクエリには使用できないためだと思います。(検索文字列の類似性に基づいて)クラスター化するときのように、スパムにはエントロピーレベルで強い影響があるため、最終結果が混同されているように感じました。
PlagTag 2015年

1
@PlagTagは何を理解していないと思いますstop words。ストップwrods例えば、いくつかの言語の中で最も一般的な単語のリストであるItheaおよびになります。スパムであるかどうかを識別するアルゴリズムをトレーニングする前に、テキストからこの単語を削除するだけです。スパムであるかどうかを特定するのに役立ちませんでした。学習アルゴリズムを改善することができます。
itdxer 2015年

@itdxer、コメントありがとうございます。ここでは、ストップワードという用語をより広い範囲で使用しました(目的に合わせて構いません)。問題を解決していただきありがとうございます;-)
PlagTag

回答:


5

1つのアプローチは、tf-idfスコアを使用することです。ほとんどのクエリで発生する単語は、良い検索クエリと悪い検索クエリを区別するのにほとんど役立ちません。ただし、少数のクエリでのみ非常に頻繁に発生するもの(高いtfまたは用語の頻度)(高いidfまたは逆のドキュメント頻度)は、良いクエリと悪いクエリを区別する上でより重要になる可能性があります。


たくさん、これを試して、ここで報告します!
PlagTag 2015年

実際には、IDFスコアが高いだけで
うまくいきます。CpILLは

2

アプリケーションによって異なります。

トピックモデリングを行う場合は、最初にデフォルトのストップワードを試してください。多くのトピックで目立つ単語がいくつかある場合(私の漠然とした定式化に注意してください)、それらは追加のストップワードの候補として適しています。

たとえば、図と表形式の資料を含むテキストのコーパスでは、「fig」、「figure」、「tab」、または「table」という単語が追加のストップワードとして適しています。その結果、トピックはより明確になります。


1

TFIDF(用語頻度逆ドキュメント頻度)を使用すると、目的が解決します。ドキュメント内の各単語のTFIDFスコアを取得し、データ内の重要な単語を選択できるスコアで単語を並べ替えます。


1

ストップワードリストを作成するために使用したアプローチは、テキストデータに対してロジスティック回帰モデルを構築してトレーニングすることです(その解釈性により)。各トークンの係数の絶対値を取ります。次に、トークンの係数の絶対値を降順に並べ替えます。次に、係数の絶対値が高く、過剰適合につながる可能性があるか、ストップワードとなる他の基準を満たす可能性があるすべてのトークンのリストを作成します。そのリストがストップワードリストです。次に、そのストップワードリストをこのタイプの別のドキュメントセット(テストセットのようなもの)に適用して、それらを削除することでテストセットモデルの精度、精度、または再現率が向上するかどうかを確認できます。

この戦略は、ストップワードリストを作成するときにトークンの影響を考慮するため、効果的です。


0

ストップワードはある時点で解決策の一部になるかもしれませんが、鍵ではありません。どのような場合でも、主要な言語のストップワードの良いリストが存在する場合は、ドメイン固有のものであってはなりません。

また、TD-IDFのみを使用することは本当に正しいとは思いません。低品質の文字列には、非常にまれな(文字化けする可能性のある)単語が含まれる可能性があります。

どの正確な機能が有用であるかを推測する代わりに、データの一部をランダムに選択し、それらに手でラベルを付けて(goodまたはとしてbad、または0.0から1.0のスケールで)データセットを作成することから始めます。次に、多くの機能(長さ、単語(トークン)の数、スパムスコア、URLが含まれるか悪意のある文字か、検出された言語、疑問符があるかどうか、大文字が適切かどうか)を引き出すコードを作成します。また、クエリを実行したユーザーのgeoIPの国、ユーザーがログインしているかどうか、ユーザーのアカウントの古さなど、使用できる非言語機能を含めることも忘れないでください。したがって、この時点で、大規模なテーブル/ CSVと、追加したラベル用に1つの列が追加された小さなテーブル/ CSVができます。

次に、ラベルが付けられた例を使用して機械学習パッケージをトレーニングし、十分に正確なモデルを構築します。次に、そのモデルを残りのデータで実行します。

コーディングしすぎないようにしたい場合は、それらの機能をCSV形式にして、Google Prediction APIのスプレッドシートインターフェースに渡すこともできます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.