Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

テキストマイニングで発掘!? 売上とユーザーレビューの相関分析

9,900 views

Published on

第16回データマイニング+WEB @東京 ( #TokyoWebmining 16th) 発表資料

  • Be the first to comment

テキストマイニングで発掘!? 売上とユーザーレビューの相関分析

  1. 1. 第16回データマイニング+WEB @東京 ( #TokyoWebmining 16th) テキストマイニングで発掘!?売上とユーザーレビューの相関分析 Shintaro TAKEMURA d.hatena.ne.jp/taos twitter.com/stakemura facebook.com/shintaro.takemura
  2. 2. テキストマイニングによる予測• 2005年あたりからCGMのテキストマイニングによる 売上・価格変動・選挙・株価予測が盛んに – [Mishne 05] Predicting Movie Sales from Blogger Sentiment – [Archak 07] Show me the Money! Deriving the Pricing Power of Product Features by Mining Consumer Reviews – [Liu 07] ARSA: A Sentiment-Aware Model for Predicting Sales Performance Using Blogs – [Tumasjan 10] Predicting Elections withTwitter – [Bolle 10] Twitter mood predicts the stock market – [Zhang 10] Predicting Stock Market Indicators Through Twitter• 要となるのが – 評判分析(Sentiment Analysis)
  3. 3. 評判分析とは?• ある対象の評価を記述しているテキスト 断片に対して,その評価極性を推定すること – レストランAは味がよい → 肯定 – 喫茶Bのコーヒーはまずい → 否定• レーティング(5段階評価)ではいけないの? – (未掲載の)あるデータに基づき解説 • 低得点→あまり売れ無さそう • 高得点→売れるとは限らない(様々なバイアスが) – ニューヨーク大学の講義資料の紹介 • SpongeBob Effect • バイアスの問題をちゃんと分析している
  4. 4. 評判分析のアプローチ• 商用ツールを活用する – IBM SPSS Text Analytics for Survey – Text Mining Studio – TRUE TELLER• OSSや言語資源を頼りに自作 – SentiWordNet • Positive - Negative を数値化した評価表現辞書 • 日本語WordNetとの連携サンプルをGoogle Codeにて公開 sentiwordnet-converter – WordNet-Affect • 評価表現を6種の基本感情に分類 – anger, disgust, fear, joy, sadness, surprise.
  5. 5. 評判分析の課題• すべてを自作するのは茨の道 – 特に構文解析や照応解析、レポート出力(可視化)• 商用ツールは出来るだけ活用すべき。が課題もある – 評価情報は、評価対象+評価表現で表される • この ベッド は 眠気を誘う ⇒ 肯定 • この 講義 は 眠気を誘う ⇒ 否定 – 評価対象は実は分野(ドメイン)によって異なる – 一方ツールが対応するのは一般的な表現でしかない• コンピュータの力を借りよう – 自然言語処理・機械学習の活用 – 辞書作成をなるべく自動化する
  6. 6. 具体的にどうするか?• 既存のユーザーレビューから学習させる – 教師あり機械学習 • 事前に与えられたデータをいわば「例題(=先生からの 助言)」とみなして、それをガイドに学習(=データへ の何らかのフィッティング)を行う – 映画レビューでの分析が出発点 • [Pang et al. 2002] Thumbs up? sentiment classification using machine learning techniques • 今回の実験ではこの論文の手法を検証する – 評価表現辞書を組み合わせる手法は間に合わず… – 採点済みのユーザーレビューを探そう • 商品ならAmazonや楽天のAPIで検証するのも一つの手
  7. 7. どこから着手する?• 最初のミッション – 非定型のテキストデータを数値の羅列に置き換える • よく使われるものにTF-IDFがある – 検索の分野で使われる道具が大いに役立つ • スケーラビリティが熟慮されているため• まずはLuceneから始めるのがお勧め – Twitter, mixiなどで採用される検索エンジン。Java製。 – Solr/Nutchでスケーラブルなクローリング – キーワード抽出はHadoop/Mahoutも有用 – 多言語対応の形態素解析も、OSS・商用含めて豊富 • Lucene GoSen (MeCabの辞書と互換性あり) • Basis Technology - Rosette
  8. 8. TF - Term Frequency• ある単語が各々の文章にどのくらい出現するか? ni 単語iの出現頻度 tf i   k nk 文書で出現する総単語数• 問題点 – すべての単語が等しい重要度の場合 • 例:ツール,エラー,ファイル…• 解決方法 – 頻繁に登場する語の影響力を薄める → そこでidf
  9. 9. IDF - Inverse Document Frequency• ある単語がどのくらいの数の文書に出現するか? 総ドキュメント数 |D| idf i  log 単語iを含む | {d : d  ti } | ドキュメント数 term df idf レア語では高く car 18,165 1.65 auto 6723 2.08 頻出語では低く insurance 19,241 1,62 best 35,235 1.5
  10. 10. TF-IDFによるスコアリング• 以下の場合に高い – 少数のドキュメントにtがたくさん出現する場合• 以下の場合に低い – ひとつのドキュメントに t が少なく出現する場合 – たくさんのドキュメントに t が出現する場合
  11. 11. ベクトル空間モデル(Vector Space Model) • 文章を単語の集合(ベクトル)と考える – cos類似度でランク付けできる d ������(������1 ) ∙ ������(������2 ) ������������������(������1 , ������2 ) = ������ ������1 |������(������2 )|  q Query document Q A B C D E {D, E} term 0 1.0 0 1.5 0.4term 1 1 0.8 2 0.1 2 0.4 1.2 0.2 {A, B, E} 3 3 1.5 4 4 0.5 5 5 1.6 2.5 6 6 0.2 1.0 1.5
  12. 12. PRP - Probability Ranking Principle• 情報要求に対して確率論を当てはめるための考え方 – TF-IDFのようなヒューリスティクスな指標を確率モデル で再解釈できる• 文書dとクエリqの適合性を確率として表現 – P(R|d,q) … これを求めたい – Rはdとqが関連することを表す – R=1 … 関連あり R=0 … 関連なし – 文書をP(R|d,q)に従ってランキング• メリット – 適合性を適切に求めることで精度が上がる • 研究もまだまださかん ex. BM25+[Yuanhua Lv, CIKM11]
  13. 13. BIM - Binary Independence Model• 仮定(本当は他にもいろいろ) – 文章Dの適合性は、他の文書に依存しない• P(R=1|D)によるランク付け – R={0,1} … 適合度を示す確率変数 – ������������ ������ は各々のクラスでの観察回数 – D … 文章の中身。ベイズの定理より • ������ ������ ������ ∝ ������ ������ ������ ������(������)• 文章Dの適合性を求めると… – 関係演算子 ∼ を「ランク順位が等しい」として ������ ������ = 1 ������ ������ − ������������ + 0.5 ������ ������ = 1 ������ ∼ = ������ ������ = 0 ������ ������������ + 0.5 ������∈������∩������ IDF
  14. 14. 文章分類の計算例(BIM)• 適合文章: ������1 =“a b c b d”, ������2 =“a b e f b”, ������1 =2• 不適合文章: ������3 =“b g c d”, ������4 =“b d e”, ������5 =“a b e g”, ������0 =3 word a b c d e f g h ������1 ������ 2 2 1 1 1 1 0 0 ������0 ������ 1 3 1 2 2 0 2 0 ������������ 2.5/3 2.5/3 1.5/3 1.5/3 1.5/3 1.5/3 0.5/3 0.5/3 ������������ 1.5/4 3.5/4 1.5/4 2.5/4 2.5/4 0.5/4 2.5/4 0.5/4• 新規文章: ������6 = “b g h” b gh 2.5 3.5 ������������ 1 − ������������ ∙ 1− … 1.64 3 4 ������ ������ = 1 ������6 ∼ = = ������������ 1 − ������������ 3.5 2.5 ������∈������6 ∙ 1− … 13.67 4 3
  15. 15. 文章検索の計算例(BIM)• 文章: ������1 = “a b c b d”, ������2 = “a b e f b”, ������3 = “b g c d”, ������4 = “b d e”, ������5 = “a b e g”, ������6 = “b g h”, N=6 word a b c d e f g h ������ ������ 2 6 2 3 3 1 3 1 ������ − ������������ 4.5 0.5 4.5 3.5 3.5 5.5 3.5 5.5 ������������ /2.5 /6.5 /2.5 /3.5 /3.5 /1.5 /3.5 /1.5• クエリ: Q = “a c h” 文章������1 の場合 a c ������ − ������������ + 0.5 4.5 4.5 ������ ������ = 1 ������1 ∼ = ∙ ������∈������1 ∩������ ������������ + 0.5 2.5 2.5• ランキング ������6 > ������1 > ������3 = ������5 > ������2 = ������4
  16. 16. BM25• 概要(詳細は割愛) – ������������ を文章D内での単語wの出現回数とした場合 – ������(������������ )を2つのポワソン分布から成ると考える ������ ������ ������ −������1,������ ������1,������ ������ ������ −������0,������ ������0,������ ������ ������ ������������ = ������ ������ = 1 + ������(������ = 0) ������������ ! ������������ !• 結果 ������(������|������ = 1) ������������ ∙ (1 + ������) ������log ≈ ( × log ) ������(������|������ = 0) ������������ + ������( 1 − ������ + ������ ∙ ������������ /������������������������ ������������ ������ 文章長の平均
  17. 17. 文章検索の計算例(BM25)• 文章: ������1 = “a b c b d”, ������2 = “a b e f b”, ������3 = “b g c d”, ������4 = “b d e”, ������5 = “a b e g”, ������6 = “b g h”, N=6 word a b c d e f g h ������ ������ 2 6 2 3 3 1 3 1 ������ − ������������ 4.5 0.5 4.5 3.5 3.5 5.5 3.5 5.5 ������������ /2.5 /6.5 /2.5 /3.5 /3.5 /1.5 /3.5 /1.5• クエリ: Q = “a c h”, 仮定 k=1, b=0.5 ������ ������1 ������ = 1 1 ∙ (1 + 1) 6+1 log ∼2× × log ������ ������1 ������ = 0 1 + 1 ∙ (.5 + .5 ∙ 5/4) 2 + .5
  18. 18. 評判分析の検証• NLTKのmovie reivewコーパスで検証 – 肯定 1000件 否定 1000件 1件当たり4-10KBの英文 – そのうち75%を学習用、25%をテスト用に利用 – UnigramからQuadgramまで収集 • LuceneのShingleFilterと同等の処理 – 不要語(ストップワード)処理 • DF及びBM25の値が一定以下の素性を除去 – 単語のlemma化(NLTKのWordNetCorpusReader使用) • 精度は十分でないがbigram以降の分類に効果あり • Standard POS tagger (Java実装)で再挑戦したい – Luceneにドライバあり – Naive Bayesと最大エントロピー法で検証(NLTK使用)
  19. 19. 結果(評価)• Naive Bayesと最大エントロピーによる評価 – DFが1 , BM25*IDFの値が1未満の素性を除く Naive Bayes Max. Entropy Unigram 0.710 0.872 +Bigram 0.744 0.880 +Trigram 0.766 0.884 +Quadgram 0.772 0.888• 結果 – 最大エントロピーの結果は安定している – Ngramの活用により精度が向上 • だが閾値を誤ると悪化するケースも確認された
  20. 20. 抽出した評価表現[1]• Unigram • 1.350 bad==1 and label is neg • 1.069 worst==1 and label is neg • 1.063 script==1 and label is neg • 0.957 great==1 and label is pos • 0.892 boring==1 and label is neg • 0.884 unfortunately==1 and label is neg • 0.879 should==1 and label is neg • 0.832 nothing==1 and label is neg • 0.828 waste==1 and label is neg • 0.828 supposed==1 and label is neg • 0.785 best==1 and label is pos‘ • 0.768 only==1 and label is neg
  21. 21. 抽出した評価表現[2]• Bigram • 0.995 could_been==1 and label is neg • 0.953 one_best==1 and label is pos • 0.819 bad_movie==1 and label is neg • 0.757 going_waste==1 and label is neg • 0.754 waste_any==1 and label is neg • 0.743 man_who==1 and label is pos • 0.740 film_extraordinarily==1 and label is neg • 0.740 more_words==1 and label is neg • 0.740 horrendous_going==1 and label is neg • 0.740 extraordinarily_horrendous==1 and label is neg • 0.696 very_well==1 and label is pos • 0.686 too_bad==1 and label is neg
  22. 22. まとめ・課題• まとめ – [Pang et al. 2002] を検証してみた。精度約8割 – 今後の売上予測に生かしたい• 課題 – 精度改善に向けて • 評価表現辞書の併用 – SentiWordNetなどの仕込みをちゃんと生かす • DF・BM25の閾値最適化 – 不要後処理に関する知見を強化 • 構文解析などより高度な自然言語処理の活用 – 速度改善に向けて • Hadoopや、MahoutのCollocation抽出の活用

×