SlideShare a Scribd company logo
1 of 22
Download to read offline
第16回データマイニング+WEB @東京 ( #TokyoWebmining 16th)




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


                        Shintaro TAKEMURA
                                  d.hatena.ne.jp/taos
                               twitter.com/stakemura
                     facebook.com/shintaro.takemura
テキストマイニングによる予測
• 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)
評判分析とは?
• ある対象の評価を記述しているテキスト
  断片に対して,その評価極性を推定すること
 – レストランAは味がよい    →   肯定
 – 喫茶Bのコーヒーはまずい   →   否定
• レーティング(5段階評価)ではいけないの?
 – (未掲載の)あるデータに基づき解説
  • 低得点→あまり売れ無さそう
  • 高得点→売れるとは限らない(様々なバイアスが)
 – ニューヨーク大学の講義資料の紹介
  • SpongeBob Effect
  • バイアスの問題をちゃんと分析している
評判分析のアプローチ
• 商用ツールを活用する
 – 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.
評判分析の課題
• すべてを自作するのは茨の道
 – 特に構文解析や照応解析、レポート出力(可視化)
• 商用ツールは出来るだけ活用すべき。が課題もある
 – 評価情報は、評価対象+評価表現で表される
  • この ベッド は 眠気を誘う ⇒ 肯定
  • この 講義 は 眠気を誘う ⇒ 否定
 – 評価対象は実は分野(ドメイン)によって異なる
 – 一方ツールが対応するのは一般的な表現でしかない
• コンピュータの力を借りよう
 – 自然言語処理・機械学習の活用
 – 辞書作成をなるべく自動化する
具体的にどうするか?
• 既存のユーザーレビューから学習させる
 – 教師あり機械学習
  • 事前に与えられたデータをいわば「例題(=先生からの
    助言)」とみなして、それをガイドに学習(=データへ
    の何らかのフィッティング)を行う
 – 映画レビューでの分析が出発点
  • [Pang et al. 2002] Thumbs up? sentiment classification using
    machine learning techniques
  • 今回の実験ではこの論文の手法を検証する
     – 評価表現辞書を組み合わせる手法は間に合わず…
 – 採点済みのユーザーレビューを探そう
  • 商品ならAmazonや楽天のAPIで検証するのも一つの手
どこから着手する?
• 最初のミッション
 – 非定型のテキストデータを数値の羅列に置き換える
   • よく使われるものにTF-IDFがある
 – 検索の分野で使われる道具が大いに役立つ
   • スケーラビリティが熟慮されているため
• まずはLuceneから始めるのがお勧め
 – Twitter, mixiなどで採用される検索エンジン。Java製。
 – Solr/Nutchでスケーラブルなクローリング
 – キーワード抽出はHadoop/Mahoutも有用
 – 多言語対応の形態素解析も、OSS・商用含めて豊富
   • Lucene GoSen (MeCabの辞書と互換性あり)
   • Basis Technology - Rosette
TF - Term Frequency
• ある単語が各々の文章にどのくらい出現するか?


            ni         単語iの出現頻度
   tf i 
               k
                  nk   文書で出現する総単語数
• 問題点
  – すべての単語が等しい重要度の場合
    • 例:ツール,エラー,ファイル…
• 解決方法
  – 頻繁に登場する語の影響力を薄める → そこでidf
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
TF-IDFによるスコアリング




• 以下の場合に高い
 – 少数のドキュメントにtがたくさん出現する場合
• 以下の場合に低い
 – ひとつのドキュメントに t が少なく出現する場合
 – たくさんのドキュメントに t が出現する場合
ベクトル空間モデル(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.4
term




       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
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]
BIM - Binary Independence Model
• 仮定(本当は他にもいろいろ)
  – 文章Dの適合性は、他の文書に依存しない
• P(R=1|D)によるランク付け
  – R={0,1} … 適合度を示す確率変数
  – ������������ ������ は各々のクラスでの観察回数
  – D … 文章の中身。ベイズの定理より
    • ������ ������ ������ ∝ ������ ������ ������ ������(������)
• 文章Dの適合性を求めると…
  – 関係演算子 ∼ を「ランク順位が等しい」として
                   ������ ������ = 1 ������                   ������ − ������������ + 0.5
    ������ ������ = 1 ������ ∼                 =
                   ������ ������ = 0 ������                     ������������ + 0.5
                                       ������∈������∩������
                                                                    IDF
文章分類の計算例(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
文章検索の計算例(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
BM25
• 概要(詳細は割愛)
   – ������������ を文章D内での単語wの出現回数とした場合
   – ������(������������ )を2つのポワソン分布から成ると考える
                                            ������                                 ������
                              ������ −������1,������ ������1,������
                                             ������
                                                                 ������ −������0,������ ������0,������
                                                                               ������

        ������ ������������ = ������ ������ = 1                       + ������(������ = 0)
                                   ������������ !                             ������������ !




• 結果
    ������(������|������ = 1)                       ������������ ∙ (1 + ������)                    ������
log               ≈        (                                         × log )
    ������(������|������ = 0)            ������������ + ������( 1 − ������ + ������ ∙ ������������ /������������������������      ������������
                      ������
                                                                           文章長の平均
文章検索の計算例(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
評判分析の検証
• 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使用)
結果(評価)
• 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の活用により精度が向上
   • だが閾値を誤ると悪化するケースも確認された
抽出した評価表現[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'
抽出した評価表現[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'
まとめ・課題
• まとめ
 – [Pang et al. 2002] を検証してみた。精度約8割
 – 今後の売上予測に生かしたい
• 課題
 – 精度改善に向けて
   • 評価表現辞書の併用
       – SentiWordNetなどの仕込みをちゃんと生かす
   • DF・BM25の閾値最適化
       – 不要後処理に関する知見を強化
   • 構文解析などより高度な自然言語処理の活用
 – 速度改善に向けて
   • Hadoopや、MahoutのCollocation抽出の活用

More Related Content

Viewers also liked

Tokyo webmining発表資料 20111127
Tokyo webmining発表資料 20111127Tokyo webmining発表資料 20111127
Tokyo webmining発表資料 20111127kan_yukiko
 
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~sugiyama koki
 
自然言語処理における構文解析器の構造と解釈
自然言語処理における構文解析器の構造と解釈自然言語処理における構文解析器の構造と解釈
自然言語処理における構文解析器の構造と解釈Takahiro Yaota
 
楽天のECにおけるAI技術の活用
楽天のECにおけるAI技術の活用楽天のECにおけるAI技術の活用
楽天のECにおけるAI技術の活用Rakuten Group, Inc.
 
データ・テキストマイニング
データ・テキストマイニングデータ・テキストマイニング
データ・テキストマイニングHiroshi Ono
 
Apache Spark: The Next Gen toolset for Big Data Processing
Apache Spark: The Next Gen toolset for Big Data ProcessingApache Spark: The Next Gen toolset for Big Data Processing
Apache Spark: The Next Gen toolset for Big Data Processingprajods
 
20130916第3回テキストマイニングシンポジウム資料(浅野)
20130916第3回テキストマイニングシンポジウム資料(浅野)20130916第3回テキストマイニングシンポジウム資料(浅野)
20130916第3回テキストマイニングシンポジウム資料(浅野)Hirosuke Asano
 
書籍『シグナル&ノイズ』解説
書籍『シグナル&ノイズ』解説書籍『シグナル&ノイズ』解説
書籍『シグナル&ノイズ』解説Hirosuke Asano
 
Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007Christian Schieder
 
テキストマイニングのイメージと実際
テキストマイニングのイメージと実際テキストマイニングのイメージと実際
テキストマイニングのイメージと実際antibayesian 俺がS式だ
 
素人がTF-IDFでキーワード抽出をやってみた
素人がTF-IDFでキーワード抽出をやってみた素人がTF-IDFでキーワード抽出をやってみた
素人がTF-IDFでキーワード抽出をやってみたsmzkng
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化Shintaro Takemura
 
感情分析で株価を予測して おこづかい稼ぎ 日経版
感情分析で株価を予測して おこづかい稼ぎ 日経版感情分析で株価を予測して おこづかい稼ぎ 日経版
感情分析で株価を予測して おこづかい稼ぎ 日経版saito_hirokazu
 
推薦システムになにができるのか - Techcompass
推薦システムになにができるのか - Techcompass推薦システムになにができるのか - Techcompass
推薦システムになにができるのか - TechcompassYoshifumi Seki
 
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニングMasahiro Yamaguchi
 
RでTwitterテキストマイニング
RでTwitterテキストマイニングRでTwitterテキストマイニング
RでTwitterテキストマイニングYudai Shinbo
 
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』The Japan DataScientist Society
 
RではじめるTwitter解析
RではじめるTwitter解析RではじめるTwitter解析
RではじめるTwitter解析Takeshi Arabiki
 

Viewers also liked (20)

Tokyo webmining発表資料 20111127
Tokyo webmining発表資料 20111127Tokyo webmining発表資料 20111127
Tokyo webmining発表資料 20111127
 
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
 
自然言語処理における構文解析器の構造と解釈
自然言語処理における構文解析器の構造と解釈自然言語処理における構文解析器の構造と解釈
自然言語処理における構文解析器の構造と解釈
 
楽天のECにおけるAI技術の活用
楽天のECにおけるAI技術の活用楽天のECにおけるAI技術の活用
楽天のECにおけるAI技術の活用
 
データ・テキストマイニング
データ・テキストマイニングデータ・テキストマイニング
データ・テキストマイニング
 
Apache Spark: The Next Gen toolset for Big Data Processing
Apache Spark: The Next Gen toolset for Big Data ProcessingApache Spark: The Next Gen toolset for Big Data Processing
Apache Spark: The Next Gen toolset for Big Data Processing
 
20130916第3回テキストマイニングシンポジウム資料(浅野)
20130916第3回テキストマイニングシンポジウム資料(浅野)20130916第3回テキストマイニングシンポジウム資料(浅野)
20130916第3回テキストマイニングシンポジウム資料(浅野)
 
書籍『シグナル&ノイズ』解説
書籍『シグナル&ノイズ』解説書籍『シグナル&ノイズ』解説
書籍『シグナル&ノイズ』解説
 
言語処理学会へ遊びに行ったよ
言語処理学会へ遊びに行ったよ言語処理学会へ遊びに行ったよ
言語処理学会へ遊びに行ったよ
 
Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007
 
テキストマイニングのイメージと実際
テキストマイニングのイメージと実際テキストマイニングのイメージと実際
テキストマイニングのイメージと実際
 
素人がTF-IDFでキーワード抽出をやってみた
素人がTF-IDFでキーワード抽出をやってみた素人がTF-IDFでキーワード抽出をやってみた
素人がTF-IDFでキーワード抽出をやってみた
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
 
感情分析で株価を予測して おこづかい稼ぎ 日経版
感情分析で株価を予測して おこづかい稼ぎ 日経版感情分析で株価を予測して おこづかい稼ぎ 日経版
感情分析で株価を予測して おこづかい稼ぎ 日経版
 
推薦システムになにができるのか - Techcompass
推薦システムになにができるのか - Techcompass推薦システムになにができるのか - Techcompass
推薦システムになにができるのか - Techcompass
 
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング
勉強会資料:プログラムもアルゴリズム理解も不要な 機械学習テキストマイニング
 
RでTwitterテキストマイニング
RでTwitterテキストマイニングRでTwitterテキストマイニング
RでTwitterテキストマイニング
 
Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)
 
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』
データサイエンティスト協会 木曜勉強会 #02 講演2:『ビッグデータの0次分析手法と適用例のご紹介 ~俯瞰から始まる企業内ビッグデータの活用~』
 
RではじめるTwitter解析
RではじめるTwitter解析RではじめるTwitter解析
RではじめるTwitter解析
 

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

WordNetで作ろう! 言語横断検索サービス
WordNetで作ろう! 言語横断検索サービスWordNetで作ろう! 言語横断検索サービス
WordNetで作ろう! 言語横断検索サービスShintaro Takemura
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用Nobuaki Oshiro
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】Tomoharu ASAMI
 
区間をキーとして保持する分散KVSの効率的な実現法
区間をキーとして保持する分散KVSの効率的な実現法区間をキーとして保持する分散KVSの効率的な実現法
区間をキーとして保持する分散KVSの効率的な実現法Kota Abe
 
Tokyo r24 r_graph_tutorial
Tokyo r24 r_graph_tutorialTokyo r24 r_graph_tutorial
Tokyo r24 r_graph_tutorialTakashi Minoda
 
Rで実験計画法 前編
Rで実験計画法 前編Rで実験計画法 前編
Rで実験計画法 前編itoyan110
 
Bayesian Sushistical Modeling
Bayesian Sushistical ModelingBayesian Sushistical Modeling
Bayesian Sushistical Modelingdaiki hojo
 
Datamining 4th adaboost
Datamining 4th adaboostDatamining 4th adaboost
Datamining 4th adaboostsesejun
 
Rによるprincomp関数を使わない主成分分析
Rによるprincomp関数を使わない主成分分析Rによるprincomp関数を使わない主成分分析
Rによるprincomp関数を使わない主成分分析wada, kazumi
 
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章Hiroki Mizukami
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門Yuichiro Kobayashi
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画mametter
 

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

WordNetで作ろう! 言語横断検索サービス
WordNetで作ろう! 言語横断検索サービスWordNetで作ろう! 言語横断検索サービス
WordNetで作ろう! 言語横断検索サービス
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
区間をキーとして保持する分散KVSの効率的な実現法
区間をキーとして保持する分散KVSの効率的な実現法区間をキーとして保持する分散KVSの効率的な実現法
区間をキーとして保持する分散KVSの効率的な実現法
 
Tokyo r21 2
Tokyo r21 2Tokyo r21 2
Tokyo r21 2
 
Tokyo r24 r_graph_tutorial
Tokyo r24 r_graph_tutorialTokyo r24 r_graph_tutorial
Tokyo r24 r_graph_tutorial
 
Rで実験計画法 前編
Rで実験計画法 前編Rで実験計画法 前編
Rで実験計画法 前編
 
Tokyo r21 修正版
Tokyo r21 修正版Tokyo r21 修正版
Tokyo r21 修正版
 
Bayesian Sushistical Modeling
Bayesian Sushistical ModelingBayesian Sushistical Modeling
Bayesian Sushistical Modeling
 
Datamining 4th adaboost
Datamining 4th adaboostDatamining 4th adaboost
Datamining 4th adaboost
 
Ms os ss_test
Ms os ss_testMs os ss_test
Ms os ss_test
 
Rによるprincomp関数を使わない主成分分析
Rによるprincomp関数を使わない主成分分析Rによるprincomp関数を使わない主成分分析
Rによるprincomp関数を使わない主成分分析
 
Tokyo r7 sem_20100724
Tokyo r7 sem_20100724Tokyo r7 sem_20100724
Tokyo r7 sem_20100724
 
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
Ms os ss_test
Ms os ss_testMs os ss_test
Ms os ss_test
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 

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

  • 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.4 term 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抽出の活用