web-dev-qa-db-ja.com

PythonでのTwitterの感情分析

Textual Sentiment Analysishttp://en.wikipedia.org)の、できればpythonでのオープンソース実装を探しています。/wiki/Sentiment_analysis )。私が使用できるこのようなオープンソースの実装に精通している人はいますか?

Twitterで検索語句を検索して「youtube」と言い、「ハッピー」ツイートと「悲しい」ツイートをカウントするアプリケーションを作成しています。私はGoogleのappengineを使用しているので、Pythonで使用しています。 Twitterから返された検索結果を分類できるようにしたいし、pythonでそれをしたいと思います。これまでのところ、特にpythonでこのような感情分析を見つけることができませんでした。私が使用できるこのようなオープンソースの実装に精通していますか?できればこれは既にpythonにありますが、そうでない場合は、できればpythonに変換できると思います。

分析しているテキストは非常に短く、ツイートです。理想的には、この分類子はそのような短いテキスト用に最適化されています。

ところで、Twitterは検索で「:)」と「:(」演算子をサポートしていますが、これはまさにこれを行うことを目的としていますが、残念ながら、それらによって提供される分類はそれほど素晴らしいものではないので、私はこれを自分で試してみるかもしれません。

ありがとう!

ところで、初期のデモは here で、これまでのコードは here で、興味のある開発者と一緒にオープンソースにしたいと思っています。

85
Ran

これらの種類のアプリケーションのほとんどでは、統計分類タスクのために独自のコードの多くをロールする必要があります。 Luckaが示唆したように、NLTKは、目的がライセンスの非営利的な性質を妨げない限り、Pythonでの自然言語操作に最適なツールです。ただし、モデリングには他のソフトウェアパッケージをお勧めします。 Pythonで利用できる強力な高度な機械学習モデルをあまり見つけていないので、簡単に連携できるスタンドアロンバイナリをいくつか提案します。

高度な判別モデリングのためのツールキット に興味があるかもしれません。これはPythonと簡単にインターフェースできます。これは、自然言語処理のさまざまな分野での分類タスクに使用されています。また、いくつかの異なるモデルを選択できます。 Naive Bayes分類器の実装に慣れている限り、最大エントロピー分類から始めることをお勧めします。そうでない場合は、機械学習タスクとして統計的分類を適切に理解するために、それを調べて1つコーディングすることをお勧めします。

テキサス大学オースティン校の計算言語学グループは、彼らから出てくるプロジェクトのほとんどがこの素晴らしいツールを使用したクラスを開催しました。 Computational Linguistics II のコースページを見て、どのように機能させるか、どのような以前のアプリケーションが提供されているかを理解してください。

同じように機能するもう1つの優れたツールは、 Mallet です。 Malletの違いは、決定ツリーなどのドキュメントとモデルがいくつかあり、Javaにあるため、私の意見では少し遅くなることです。 Weka は、いくつかのグラフィカルなものを含む1つの大きなパッケージに含まれるさまざまな機械学習モデルのスイート全体ですが、実際にはほとんど教育的目的のためのものであり、実際に生産に投入するものではありません。

あなたの仕事で頑張ってください。本当の困難な部分は、おそらく、モデルが学習する「シードセット」を分類するために事前に必要な知識工学の量でしょう。バイナリ分類(幸福と悲しみ)のどちらを行っているか、またはさまざまな感情(さらに多くが必要)に応じて、かなり大きなサイズにする必要があります。テスト用にこの設計データの一部を保持するか、10倍または削除1のテストを実行して、それを出す前に実際に良い仕事を予測していることを確認してください。そして何よりも、楽しんでください!私の意見では、これはNLPとAIの最良の部分です。

42
Robert Elwell

それで頑張ってください。

感情は非常に文脈的であり、ほとんどのツイートでは文脈が与えられていないであるため、ツイート文化は問題を悪化させます。 Twitterの重要なポイントは、共有された膨大な「現実世界」のコンテキストを活用して、意味のあるコミュニケーションを非常に短いメッセージに詰め込めることです。

彼らはビデオが悪いと言ったら、それは悪いことを意味しますか、それともbad

ある日、言語学の教授がクラスで講義をしていました。 「英語では、ダブルネガティブはポジティブを形成します。ロシア語などの一部の言語では、ダブルネガティブは依然としてネガティブです。しかし、ダブルポジティブがネガティブを形成できる言語はありません。」

部屋の後ろからの声が「ええ…そうです」とパイプで送られました。

75
MarkusQ

皆さんの提案に感謝します。彼らは本当にとても役に立ちました!最終的に、単純ベイズ分類器を使用しました。これは、 ここ から借りたものです。まず、良いキーワードと悪いキーワードのリストを入力してから、ユーザーのフィードバックを取り入れて「学習」機能を追加しました。それはかなりいい動作することが判明しました。

ブログ投稿 のような私の仕事の詳細。

繰り返しますが、あなたの助けはとても役に立ちましたので、ありがとうございます!

18
Ran

感情のラベルが付いたWordリストを作成しました。ここからアクセスできます:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/Zip/imm6010.Zip

私のブログに短いPythonプログラムがあります:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

この投稿では、Twitterだけでなく単一の文でもWordリストを使用する方法を示します。

単語リストアプローチには制限があります。 「新しいANEW:マイクロブログでの感情分析のためのWordリストの評価」という記事に、私のWordリストの制限に関する調査があります。その記事は私のホームページから入手できます。

unicode(s, 'utf-8')がコードから欠落していることに注意してください(教育的理由のため)。

13

多くの研究論文は、感情分析の良い出発点は形容詞を見ていることを示しています。例えば、それらは肯定的な形容詞または否定的な形容詞です。テキストの短いブロックの場合、これはほとんど唯一のオプションです...ドキュメント全体または文レベルの分析を見る論文がありますが、あなたが言うようにツイートは非常に短いです...を理解する本当の魔法のアプローチはありません文の感情なので、あなたの最善の策は、これらの研究論文の1つを探し出し、ポジティブ/ネガティブな形容詞のデータセットを取得しようとするだろうと思います。

さて、これは言われているように、感情はドメイン固有であり、汎用データセットで高レベルの精度を得るのは難しいかもしれません。

がんばろう。

9
Ben Coe

あなたが何を求めているのか見つけるのは難しいと思うかもしれません。私が知っている最も近いものは LingPipe で、これはいくつかの 感情分析機能 を持ち、限られた種類のオープンソースライセンスで利用できますが、Javaで書かれています。

また、感情分析システムは通常、製品/映画のレビューデータに関するシステムをトレーニングすることによって開発されますが、これは平均的なツイートとは大きく異なります。これらは、すべて同じトピックに関する複数の文を含むテキスト用に最適化されます。おそらく、 ピッツバーグ大学が提供するもの のような感情用語の辞書に基づいて、ルールベースのシステムを自分で考えた方が良いと思います。

We Feel Fine をご覧ください。非常に美しいインターフェースを備えた同様のアイデアの実装について(および twitrratr )。

4
Stompchicken

Twitter感情分析ツール をご覧ください。 Pythonで書かれており、半教師付き機械学習を備えたNaive Bayes分類器を使用します。ソースは here にあります。

2
cyhex

Natural Language Toolkit 少し前に出会いました。おそらくそれを出発点として使用できます。また、多くのモジュールとアドオンがあるので、すでに似たようなものが既にあるかもしれません。

1
Luka Marinko

多分 TextBlob (NLTKとパターンに基づく)はあなたにぴったりの感情分析ツールです。

1
Sonson123

Twitter Sentiment Analyisをゼロからコーディングすることに興味がある人のために、コースラコース「 Data Science with python GitHubのコード(課題1-- link )。感情は AFINN-111 の一部です。

here などの実用的なソリューションを見つけることができます。 AFINN-111センチメントリストに加えて、pos/negスコアを持つツイートの用語の頻度に基づいて動的用語リストを作成する簡単な実装があります( here を参照)。

0
philshem

TweetFeelによるTwitter Sentiment APIがあります。これは、ツイートの高度な言語分析を行い、肯定/否定のツイートを取得できます。 http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm を参照してください

0

やや奇抜な考え:Twitter APIを使用して大量のツイートをダウンロードし、絵文字を使用してそのセットのサブセットを分類してみてください:「:)」、「:]」、「:D」などの肯定的なグループ、および「:(」などの別の除外グループなど.

その粗雑な分類ができたら、頻度分析やngram分析、またはそれらの線に沿った何かで、より多くの手がかりを検索できます。

馬鹿げているように見えるかもしれませんが、これについては本格的な研究が行われています(「感情分析」と顔文字の検索)。一見の価値があります。

0
user18015