文、段落、または記事の調子がネガティブかポジティブかを判断するためのアルゴリズムが必要です。
例えば:
ジェイソンは最悪ですSO私が今まで目撃したユーザー(-10)
ジェイソンはSOユーザー(0)
Jasonは最高のSO私が今まで見たユーザー(+10)
ジェイソンはSO(-10)
SOでは大丈夫ですが、ジェイソンは悪いことをするのが最悪です(+10)
簡単じゃない? :)
誰かがこのアルゴリズムを説明してくれるとは期待していませんが、どこかの学界ですでにこのようなことについて多くの作業が行われていると思います。いくつかの記事や研究を教えていただければ、とても気に入っています。
ありがとう。
感情分析 と呼ばれる自然言語処理のサブフィールドがあり、この問題領域を特に扱います。消費者製品はオンラインユーザーフォーラム(ugcまたはユーザー生成コンテンツ)で非常に厳しくレビューされているため、この地域ではかなりの量の商業的作業が行われています。また、シェフィールド大学の [〜#〜] gate [〜#〜] と呼ばれるテキスト分析のプロトタイププラットフォームと、pythonプロジェクトと呼ばれる- nltk 。両方とも柔軟性があると見なされますが、それほど高いパフォーマンスではありません。
私の会社には、これを行う製品と優れた性能があります。ほとんどの作業を行いました。私は簡単なアイデアを与えることができます:
段落を文に分割してから、各文を小さなサブ文に分割する必要があります。コンマ、ハイフン、セミコロン、コロン、「and」、「or」などに基づいて分割します。各サブ文は完全に独立した感情を示しますある場合には。
一部の文は分割されていても、一緒に結合する必要があります。
例:製品は驚くほど優れており、素晴らしいです。
分割する必要がある文と分割すべきでない文のタイプに関する包括的なルールセットを開発しました(単語のPOSタグに基づいて)
最初のレベルでは、バッグオブワードアプローチ、つまり意味を使用できます。肯定的な単語と否定的な単語/フレーズのリストを作成し、すべてのサブセンテンスをチェックインします。これを行いながら、文の極性を変更する「not」、「no」などの否定語も見てください。
それでも感情が見つからない場合は、 単純なベイズ アプローチに進むことができます。このアプローチはあまり正確ではありません(約60%)。しかし、ルールの最初のセットを通過できない文のみにこれを適用すると、80〜85%の精度に簡単に到達できます。
重要な部分は、ポジティブ/ネガティブな単語リストと、物事を分割する方法です。必要に応じて、 [〜#〜] hmm [〜#〜] (隠れマルコフモデル)または [〜#〜] crf [〜#〜] (条件付きランダムフィールド)。しかし、私はNLPのプロではなく、他の誰かがあなたをその部分で満たすかもしれません。
好奇心の強い人のために、NLTKとReverend Bayesモジュールを使用して、これらすべてをpythonと実装しました。
非常にシンプルで、ほとんどの文を処理します。ただし、Webのコンテンツにタグを付けようとすると、問題が発生する場合があります。ほとんどの人は、ウェブ上で適切な文章を書きません。また、皮肉の取り扱いは非常に困難です。
これは Natural Language Processing の傘下にあるので、それについて読むことはおそらく始めるのに良い場所です。
非常に複雑な問題に巻き込まれたくない場合は、「ポジティブ」および「ネガティブ」な単語のリストを作成し(必要に応じて重み付けする)、テキストのセクションでワードカウントを実行できます。明らかに、これは「スマート」なソリューションではありませんが、わずかな作業で情報を取得できます。深刻なNLPを実行すると非常に時間がかかります。
あなたの例の1つは、このアプローチを使用して実際に否定的である場合に肯定的とマークされる可能性があります(「JasonはSOを吸うのが最高です」)。は小さなテキストのサンプルです。段落以上のテキストを見ている場合、意図的にアルゴリズムをだまそうとしている人がいない限り、重み付けはより信頼性が高くなります。
アプリケーションによっては、 Bayesian Filtering アルゴリズム(スパムフィルターでよく使用されます)を使用して実行できます。
その方法の1つは、2つのフィルターを使用することです。 1つは肯定的なドキュメント用で、もう1つは否定的なドキュメント用です。ポジティブフィルターにはポジティブドキュメント(使用する基準はすべて)をシードし、ネガティブフィルターにはネガティブドキュメントをシードします。秘Theは、これらのドキュメントを見つけることです。ユーザーがドキュメントを効果的に評価できるように設定することもできます。
(一度シードされた)正のフィルターは、正の単語を探します。たぶんlove、peaceなどのような言葉で終わるでしょう負のフィルターも適切にシードされます。
フィルタを設定したら、テストテキストを実行して、正と負のスコアを出します。これらのスコアといくつかの重み付けに基づいて、数値スコアを考え出すことができます。
ベイジアンフィルターは単純ですが、驚くほど効果的です。
指摘したように、これは自然言語処理の下での感情分析の下にあります。
Afaik GATEにはセンチメント分析を行うコンポーネントはありません。
私の経験では、テレサ・ウィルソン、ジャニス・ウィーベ、ポール・ホフマンによる論文「フレーズレベルの感情分析における文脈的極性の認識」のアルゴリズムを採用したアルゴリズムを実装しました( this )GATEプラグインとして、妥当な良好な結果を提供します。実装をbootstrapにしたい場合に役立ちます。
このようにすることができます:
Jason is the worst SO user I have ever witnessed (-10)
最悪(-)、残りは(+)です。したがって、それは(-)+(+)=(-)
Jason is an SO user (0)
()+()=()
Jason is the best SO user I have ever seen (+10)
最高(+)、残りは()です。したがって、それは(+)+()=(+)
Jason is the best at sucking with SO (-10)
最高(+)、吸う(-)。したがって、(+)+(-)=(-)
While, okay at SO, Jason is the worst at doing bad (+10)
最悪(-)、悪いこと(-)。したがって、(-)+(-)=(+)
この種の感情分析には、多くの機械学習アプローチがあります。すでに実装されている機械学習アルゴリズムのほとんどを使用しました。私が使用した私のケース
J48
これを行うだけで、モデルをコンテキストに合わせてトレーニングし、特徴ベクトルとルールベースのチューンアップを追加できます。私の場合、いくらか得られました(61%の精度)。そこで、私たちは stanford core nlp (映画レビュー用にモデルをトレーニングしました)に移行し、トレーニングセットを使用してトレーニングセットを追加しました。 80〜90%の精度を達成できました。
これは古い質問ですが、記事のトーンを分析できるツールを探して、偶然見つけました Watson Tone Analyzer IBMによって。それは無料で毎月1000回のAPIコールを許可します。
ああ、1つJavaこのライブラリは LingPipe (商用ライセンス)と呼ばれます。評価したものです。サイトで入手できるコーパスの例では問題なく動作します。しかし、実際のデータについては、かなりひどいです。
感情分析ツールのほとんどはレキシコンベースであり、完璧なものはありません。また、センチメント分析は、3項センチメント分類または2項センチメント分類として説明できます。さらに、これはドメイン固有のタスクです。つまり、ニュースデータセットで適切に機能するツールは、非公式の非構造化ツイートではうまく機能しない可能性があります。
いくつかのツールを使用することをお勧めします。感情の強さを判断するための集計または投票ベースのメカニズムがあります。私が出会った感情分析ツールに関する最良の調査研究は、 SentiBench です。役に立つでしょう。
コンテキストがすべてだと思います。 SOを吸うのが得意な人を探しているなら。最高を吸うことは前向きなことです。悪い点と良い点、およびファジーロジックを調べることをお勧めできる点を判断するために。
背が高いようなものです。 1.95mの人は背が高いと考えることができます。その人を2.10m以上の人々と一緒にグループに入れると、彼は背が低く見えます。
トーンを評価するために、エッセイ評価ソフトウェアを使用できますか? [〜#〜] wired [〜#〜] 記事。
可能 参照。 (私はそれを読むことができませんでした。)
これ レポートでは、ライティングスキルを読むのに必要なフレッシュ・キンケイドの学年レベルと比較しています!
e-rator の4ページ目は、つづりの間違いなどを見ていると述べています。 (おそらく悪い投稿もスペルミスです!)
スラッシュドット 記事。
また、ネガティブ性のために、スパム性の代わりに何らかの電子メールフィルターを使用することもできます。
皮肉はどうですか: