• Like
テキストマイニングで発掘!? 売上とユーザーレビューの相関分析
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

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

  • 7,395 views
Published

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,395
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
48
Comments
0
Likes
14

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 第16回データマイニング+WEB @東京 ( #TokyoWebmining 16th) テキストマイニングで発掘!?売上とユーザーレビューの相関分析 Shintaro TAKEMURA d.hatena.ne.jp/taos twitter.com/stakemura facebook.com/shintaro.takemura
  • 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. 評判分析とは?• ある対象の評価を記述しているテキスト 断片に対して,その評価極性を推定すること – レストランAは味がよい → 肯定 – 喫茶Bのコーヒーはまずい → 否定• レーティング(5段階評価)ではいけないの? – (未掲載の)あるデータに基づき解説 • 低得点→あまり売れ無さそう • 高得点→売れるとは限らない(様々なバイアスが) – ニューヨーク大学の講義資料の紹介 • SpongeBob Effect • バイアスの問題をちゃんと分析している
  • 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. 評判分析の課題• すべてを自作するのは茨の道 – 特に構文解析や照応解析、レポート出力(可視化)• 商用ツールは出来るだけ活用すべき。が課題もある – 評価情報は、評価対象+評価表現で表される • この ベッド は 眠気を誘う ⇒ 肯定 • この 講義 は 眠気を誘う ⇒ 否定 – 評価対象は実は分野(ドメイン)によって異なる – 一方ツールが対応するのは一般的な表現でしかない• コンピュータの力を借りよう – 自然言語処理・機械学習の活用 – 辞書作成をなるべく自動化する
  • 6. 具体的にどうするか?• 既存のユーザーレビューから学習させる – 教師あり機械学習 • 事前に与えられたデータをいわば「例題(=先生からの 助言)」とみなして、それをガイドに学習(=データへ の何らかのフィッティング)を行う – 映画レビューでの分析が出発点 • [Pang et al. 2002] Thumbs up? sentiment classification using machine learning techniques • 今回の実験ではこの論文の手法を検証する – 評価表現辞書を組み合わせる手法は間に合わず… – 採点済みのユーザーレビューを探そう • 商品ならAmazonや楽天のAPIで検証するのも一つの手
  • 7. どこから着手する?• 最初のミッション – 非定型のテキストデータを数値の羅列に置き換える • よく使われるものにTF-IDFがある – 検索の分野で使われる道具が大いに役立つ • スケーラビリティが熟慮されているため• まずはLuceneから始めるのがお勧め – Twitter, mixiなどで採用される検索エンジン。Java製。 – Solr/Nutchでスケーラブルなクローリング – キーワード抽出はHadoop/Mahoutも有用 – 多言語対応の形態素解析も、OSS・商用含めて豊富 • Lucene GoSen (MeCabの辞書と互換性あり) • Basis Technology - Rosette
  • 8. TF - Term Frequency• ある単語が各々の文章にどのくらい出現するか? ni 単語iの出現頻度 tf i   k nk 文書で出現する総単語数• 問題点 – すべての単語が等しい重要度の場合 • 例:ツール,エラー,ファイル…• 解決方法 – 頻繁に登場する語の影響力を薄める → そこでidf
  • 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. TF-IDFによるスコアリング• 以下の場合に高い – 少数のドキュメントにtがたくさん出現する場合• 以下の場合に低い – ひとつのドキュメントに t が少なく出現する場合 – たくさんのドキュメントに t が出現する場合
  • 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. 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. BIM - Binary Independence Model• 仮定(本当は他にもいろいろ) – 文章Dの適合性は、他の文書に依存しない• P(R=1|D)によるランク付け – R={0,1} … 適合度を示す確率変数 – は各々のクラスでの観察回数 – D … 文章の中身。ベイズの定理より • ∝ ()• 文章Dの適合性を求めると… – 関係演算子 ∼ を「ランク順位が等しい」として = 1 − + 0.5 = 1 ∼ = = 0 + 0.5 ∈∩ IDF
  • 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. 文章検索の計算例(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. BM25• 概要(詳細は割愛) – を文章D内での単語wの出現回数とした場合 – ( )を2つのポワソン分布から成ると考える −1, 1, −0, 0, = = 1 + ( = 0) ! !• 結果 (| = 1) ∙ (1 + ) log ≈ ( × log ) (| = 0) + ( 1 − + ∙ / 文章長の平均
  • 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. 評判分析の検証• 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. 結果(評価)• 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. 抽出した評価表現[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. 抽出した評価表現[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. まとめ・課題• まとめ – [Pang et al. 2002] を検証してみた。精度約8割 – 今後の売上予測に生かしたい• 課題 – 精度改善に向けて • 評価表現辞書の併用 – SentiWordNetなどの仕込みをちゃんと生かす • DF・BM25の閾値最適化 – 不要後処理に関する知見を強化 • 構文解析などより高度な自然言語処理の活用 – 速度改善に向けて • Hadoopや、MahoutのCollocation抽出の活用