言語処理学会第23回年次大会〜Webマーケティングで使えそうな発表資料まとめ〜

行きたいけど行けなかった言語処理学会第23回年次大会の発表内容がPDFで見れるということで、発表内容の中でWebマーケティングなどの仕事で役に立つかもしれない12件の研究を独断と偏見でまとめています。

プログラムはこちらのリンクから見れます。
言語処理学会第23回年次大会(NLP2017) プログラム

今回取り上げるのは以下の12件です。

・Wikipediaのカテゴリ構造を特徴ベクトルに用いたRandom Forestによるショートメッセージ分類
・NMFを用いた為替ドル円レートの変動要因分析とAdaboostを用いた予測システム
・Are Deep Learning Methods Better for Twitter Sentiment Analysis?
・化粧品レビューサイトにおけるクチコミの有用性判定
・機械学習を用いたQAサイト質問文のカテゴリの類推
・不満調査データセットの素性ベクトル化
・検索エンジンを用いた記載欠落箇所の補完
・生コーパスからの単語難易度関連指標の予測
・常識から外れた雑談応答の検出
・店舗レビューには何が書かれているか?–調査及びその自動分類–
・トップダウン型共起グラフを用いたブログからの観光地の行動分析
・社内データに基づくイノベータ人財のピックアップ

Wikipediaのカテゴリ構造を特徴ベクトルに用いたRandom Forestによるショートメッセージ分類

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P16-4.pdf

Wikipediaのカテゴリ構造を学習させたナイーブベイズにより特徴ベクトルを生成し、それをTweetに付与して、ランダムフォレストを用いてメッセージ分類をしているようです。直接Tweetのデータを使わないでWikipediaのデータを活用するところにトリックがあるようです。ビジネスにおいて関心のある対象ユーザーのTweetのモニタリングや対象ユーザーの特定に使えるかもしれません。

NMFを用いた為替ドル円レートの変動要因分析とAdaboostを用いた予測システム

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P15-5.pdf

『金融経済月報』や『日本経済展望』のテキストデータに対して、PCAとNMFの2つの手法を用いて特徴抽出を行い、Adaboostを用いて為替レートの予測を行っているようです。為替レートを予測せずとも、テキストデータを用いた市場動向の予測などの参考になるかもしれません。

Are Deep Learning Methods Better for Twitter Sentiment Analysis?

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/C5-1.pdf

Tweetの感情分析で深層学習を用いて、SVMなどと比較している研究のようです。Conclusionを見る限りは、SVMよりも精度が高いとは言えず(ネットワーク構造やデータセットの大きさに依存する)、少ないデータセットなどではSVMの方が依然として精度が高いようです。

化粧品レビューサイトにおけるクチコミの有用性判定

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/C5-4.pdf

@cosmeにおける、Likeの数をクチコミの有用度と定義して、クチコミデータに対してTF-IDFやLDAを用いて構造解析や意味解析などで特徴を抽出し、その特徴を説明変数とした回帰モデル(SVR)を構築しています。構築した回帰モデルを用い、クチコミのLikeの数を推定することを目的としています。

ここでの知見が直接に自社のコンテンツなどのナレッジになるわけではないですが、LDAやSVM(SVR)を駆使しているなど、分析手法の参考にはなると思います。

機械学習を用いたQAサイト質問文のカテゴリの類推

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P9-6.pdf

深層学習(Stacked Denoising Autoencoders(SdA) と Deep Belief Network(DBN))を用いて質問文に適したカテゴリを類推する研究です。従来手法のMLPやSVMと比べても精度が高かったようです。ユーザーの欲しい商品や、働きたい職場、住みたい場所などに関しても類推できるとマーケティングなどでの活用もできるかもしれません。

不満調査データセットの素性ベクトル化

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P9-2.pdf

不満に関するデータにタグ付けされた情報やJUMANの付属辞書から得られた意味情報も素性とすることで、不満の検索のしやすさを高める研究のようです。不満のテキストデータから特徴量に変えるまでのプロセスが記されているのが参考になりそうです。研究自体は、形態素解析の精度などにより、まだ課題があるようです。

検索エンジンを用いた記載欠落箇所の補完

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P16-5.pdf
「検索エンジンを用いて記載欠落箇所に適切な情報を埋める研究」とあり、コンテンツマーケティングなどの際に、作成した記事に説明不足な箇所を見つけることができるので、コンテンツの質を担保する上で役に立つかもしれません。

生コーパスからの単語難易度関連指標の予測

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/E5-3.pdf

「均衡コーパスや深いアノテーションを施した言語資源に頼らないことで他言語への適用が容易な単語難易度関連指標の予測手法を提案」
「単語難易度関連指標の予測精度はLDAの各トピックからの単語出現確率を基にした素性を用いることで、従来のようにコーパスからの単語頻度を素性を用いる場合と比べ大幅に向上」
「word2vecのような単語のベクトル表現より、LDAの各トピックからの単語出現確率の方が予測精度の向上に有効」
とあり、文章のリーダビリティをよりカジュアルに計算することが可能になるようです。文章のリーダビリティとWebサイトの直帰率やスクロール率などとの関係を研究してみたいですね。

常識から外れた雑談応答の検出

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P15-3.pdf

「Word2Vecモデルの学習においては、匿名掲示板である「おーぷん2ちゃんねる」から取得した人気記事7959記事を用いている。」と2ちゃんねるの表現から非常識語を見つけるという試みです。自社でUGCを運営している場合は役に立ちそうな研究です。

店舗レビューには何が書かれているか?–調査及びその自動分類–

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/W-3.pdf

「店舗レビュー1,510件(5,266文)に対して人手でアノテーションを行い、このデータに基づいてトピックおよびその評価極性を分類するモデルを構築」と、恐ろしい数の文書を人出で分類したそうです。これもユーザーアンケートなどの研究に使えそうです。

トップダウン型共起グラフを用いたブログからの観光地の行動分析

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P20-3.pdf

「寄り道をする観光地を指定すると、その特徴を可視化する手法の開発を目的」とされています。マーケターであれば、関心のある商材を指定すると、その商材に関する特徴を可視化できるのではないでしょうか。テキストマイニングで言うところの共起グラフによる分析となります。

提案されている手法のステップは以下の通りで、自分の関心のある市場のデータを使えば同様のことができると思われます。
(1) 商材を指定しブログ記事集を取得する。
(2) 単語対の共起スコアを同時に出現した記事数をベースとして算出する。具体的には最低出現数を4回として単語を限定し、Jaccard 係数で共起スコアを算出する。
(3) 単語を頂点、共起スコアの得られた単語対を辺として共起グラフを生成する。
(4) 分析目的に応じて注目する頂点を指定する。
(5) 指定した頂点から1または2の距離で到達可能、かつ共起スコアが一定範囲内という辺および頂点を一定数を限度に残す。

社内データに基づくイノベータ人財のピックアップ

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P12-1.pdf

番外ではありますが、面白そうな取り組みなので紹介します。
社員プロフィールや業務報告(日報)や適性検査や360度調査やアンケートなどのデータをもとに、9種類の指標を定め、一部の指標のスコアリングを単語ベースで行うに際して、スコアリング用の単語を定めるためにWord2Vecを用いています。これからピープルアナリティクスを目指す企業には参考になる情報だと思います。

GensimのHDP(Hierarchical Dirichlet Process)をクラシック音楽情報に対して試してみる

HDP(Hierarchical Dirichlet Process)いわゆる階層ディリクレ過程を実行できるモデルがPythonのGensimライブラリにあるという情報から、あまり実行例も見当たらないので、チャレンジしてみました。

HDP(Hierarchical Dirichlet Process)

HDP(Hierarchical Dirichlet Process)は文書集合全体のトピック数と文書ごとのトピック数の推定を行うことができる手法で、中華料理店フランチャイズという仕組みを用いています。通常のLDAなどでは、分析者が任意のトピック数を決める必要がありましたが、与えられたデータからその数を推定するため、その必要がないというのがHDPを使うことの利点であると思われます。

実行までの流れ

ざっくりですが、
・コーパスの準備・文書の分かち書き(名詞のみ)
・HDPの実行
という流れです。

ちなみに実行環境は
MacBook Pro
OS X Yosemite 10.10.5
2.6 GHz Intel Core i5
メモリ8GBです。

コーパスの準備

今回は、以前手に入れた某辞典サイトのクラシック音楽情報1800件のテキストデータ(1行に1件分の文字列が入っているデータで16MBくらい)があるので、それをコーパスとして使います。参考情報として挙げているブログの助けを借りて、文書単位でMeCabにより形態素解析で分かち書きした結果から、意味を持ちやすい品詞として、「名詞」に該当するもののみを結果として返す以下のPythonスクリプトを用いました。結果はtmep.txtとして出力されます。もっと良いやり方があると思いますが、目的は達成できると思います。ちなみに、MeCab Neologd(ネオログディー)という、固有名詞などに強いシステム辞書を活用してみたかったので、その利用を前提として書いています。MeCab Neologd(ネオログディー)のインストール関連の情報は参考情報にありますので、チャレンジしてみてください。(OSXかUbuntuの方が進めやすいと思います。)

こちらのスクリプトをターミナルで実行します。(解析するディレクトリ下で実施しています。)

HDPの実行

以下のPythonスクリプトで実行しています。

HDPの結果について

topic_detail.csvの結果を見たところ、トピックの数が150個もあって、「本当にトピックの数を自動で決めれているのかなぁ」と不安に思ったのですが、実際に各文書に割り当てられているトピックの数は、先ほど出力したtopic_for_corpus.csvで見ると60個でした。そのため、今回、HDPに従って決まったトピック数は60ということになります。さらに不安に思ったので、Stack Over Flowで調べていたんですが、トピックは150個出るけど確率が割り振られていないはずと回答されていました。( Hierarchical Dirichlet Process Gensim topic number independent of corpus size

出現頻度の高い上位10のトピックは以下の通りです。

加えて、トピックごとに文書に割り当てられた数を集計してみましたが、topic0が圧倒的に多く、コーパスの特性上、含まれやすい情報がここに集まっているのではないかと思います。幅広いテーマを抽出できるかと期待していたのですが、やたらと個別具体的な「トゥーランドット」や「ワーグナー」や「カルメン」などがトピックの上位単語に上がってきています。実行方法を間違えているかもしれないし、パラメータチューニングなどをもっと頑張れば、幅広いトピックを得ることができるかもしれないので、今後の課題としたいです。

スクリーンショット 2016-04-10 18.23.37

参考情報

・トピックモデルについて
machine_learning_python/topic.md at master · poiuiop/machine_learning_python · GitHub

・HDP関連
 models.hdpmodel – Hierarchical Dirichlet Process
Online Variational Inference for the Hierarchical Dirichlet Process

・MeCab関連
mecab-ipadic-NEologd : Neologism dictionary for MeCab
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
テキストマイニングの前処理。名詞抽出、ストップワード除去、珍しい単語の除去

・Python関連
データ分析をやりたいエンジニアにおすすめ!Pythonの入門スライド13選

Word2Vecでクラシックの楽曲情報をコーパスとして類似度を出してみる

あの手この手を使って手に入れた、およそ1800曲に及ぶクラシック音楽の楽曲情報(テキスト)をもとに
、PythonのGensimライブラリーのWord2Vecを使って、任意の単語に関する類似単語を出力してみたいと思います。

まずは、手に入れたコーパスを作業フォルダに置いて、MeCabによる分かち書きを行います。
(最後の引数-bは、処理する文書のサイズが大きい際に調整します。)

後はGensimパッケージを読み込んで、

Word2Vecを計算させるだけです。

(引数のsizeは特徴ベクトルの次元数です。)

早速、トランペットについて、所与のコーパスにおける類似単語を見てみたいと思います。(類似度が最も高い単語の上位10位の結果を返しています。)

惜しいですね。
願わくば、コルネットが一番目に来てほしかったです。オケの編成上、どうしてもトロンボーンが一緒の文書で出やすいのだと思います。

続いては、ピアノです。こちらもオルガン・チェンバロは非常に近い楽器だと思うのですが、一番目がヴァイオリンというのはデータ上仕方がないのかもしれません。

続いて、ヴァイオリンですが、ヴィオラ・チェロは良いと思うのですが、ピアノやチェンバロなどが上位に来ています。

続いて、クレッシェンドですが、似たような意味はあまり観察されていません。ただし、「クライマックス」・「アルペッジョ」などと似たようなシチュエーションで登場しそうな表現な気がします。

最後に、アレグロですが、こちらは速さの序列に関しては守られていないようです。やはりコーパス次第ですかね。
プレスト > アレグレット > モデラート > アンダンテ > アダージョ > ラルゴ
この序列が守られるようなWord2Vecの実践例などがあると面白いですが。

仕事でWord2Vecを使うシーンがあるとしたら、広告文のアイデアを助けたり、語彙力の弱い人の補助的なツールとして使えるかもしれませんが、実用レベルはまだまだ遠い気がします。

おまけ

左手に関しては、最も類似した単語が「右手」という結果になっています。

参考文献

models.word2vec – Deep learning with word2vec

岩波データサイエンス Vol.2 岩波データサイエンス刊行委員会 編

LDA(潜在的ディリクレ配分法)まとめ 手法の概要と試行まで

【目次】
・トピックモデルとは
・トピックモデルの歴史
・トピックモデルでできること
・トピックモデルを理解するために必要な知識
・トピックモデルの手法について
・トピックモデルの実行方法について(R言語)
・トピックモデルの評価方法について
・Correlated Topic Models (CTM)について
・PAM:Pachinko Allocation Modelについて
・Relational Topic Models(RTM)について
・参考文献

トピックモデルとは

・一つの文書に複数の潜在的なトピック(話題・分野・文体・著者など)、文書ごとのトピック分布、トピックごとの単語分布を仮定して、テキストからトピックを推定するモデル。文書に限らず、様々な離散データに隠された潜在的なトピックを推定するベイジアンモデル。幅広いドメインでの離散データで有効とされている。

トピックモデルの歴史

1998年:pLSA(probabilistic Latent Semantic Analysis)
2003年:LDA(Latent Dirichlet Allocation)
2004年〜:拡張モデル
2007年〜:大規模データのための高速化

トピックモデルでできること

・人を介することなく、大量の文書集合から話題になっているトピックを抽出できる。
・文書データだけでなく、画像処理、推薦システム、ソーシャルネットワーク解析、バイオインフォマティクス、音楽情報処理などにも応用されている。
・確率過程を用いて、ノイズを取り除き、本質的な情報を抽出できる。

トピックモデルを理解するために必要な知識

・確率
 -確率分布
  -ベルヌーイ分布
  -カテゴリ分布
  -ベータ分布・ガンマ分布
  -ディリクレ分布
・ラグランジュ未定乗数法
・ユニグラム
 -BOW(Bag of words)
 -ユニグラムモデル
・混合ユニグラムモデル
・混合モデル
・EMアルゴリズム
・最尤推定
・ベイズの定理
 -ベイズ推定
  -ベイズ予測分布
  -ハイパーパラメータ推定
  -モデル選択
  -変分ベイズ推定
  -ギブスサンプリング

トピックモデルの手法について

推定方法としては以下の三つが提案されている。
・最尤推定
・変分ベイズ推定
・ギブスサンプリング

  • ギブスサンプリングによる方法
  • 一部のパラメータを積分消去して、トピック集合の事後分布を推定

    文書集合とトピック集合の同時分布を導出

    単語ごとにトピックをサンプリングする

    サンプリングされたトピックからトピック分布と単語分布を推定

    周辺同時尤度を最大化させるハイパーパラメータαとβを推定する

    ※LDAのギブスサンプリングはLDAが共役性に基づいたモデリングであるため効率的な計算が可能とされる。

    ハイパーパラメータを適切にデータから学習すれば、MAP推定・変分ベイズ推定・ギブスサンプリングの性能の差は大きく出ないという研究結果があるらしい。(なお、MAP推定だと、クロスバリデーションを行い、尤度を最大化させるハイパーパラメータを見つけなければならない。)

    トピックモデルの実行方法について(R言語)

    以下のパッケージで実行可能だが、新しい手法などにはまだ対応していない。
    lda(CRANのPDF
    topicmodels(CRANのPDF

    以下はtopicmodelsパッケージの実行コードであるが、BOW形式のデータがあれば、実行はすぐにできる。
    ただし、パープレキシティなどを計算しながら、ハイパーパラメータのチューニングをする必要がある。

    時間があれば、ソースコードを見て自分で書けるようにしたい。
    ちなみに、HDP-LDAはPythonのgensimに用意されているようです。(gensimへのリンク)

    トピックモデルの評価方法について

  • パープレキシティ(Perplexity)
  • -確率モデルの性能を評価する尺度として、テストデータを用いて計算する。
    -負の対数尤度から計算できる。
    -低いパープレキシティはテストデータを高い精度で予測できる良い確率モデルであることを示す。
    -全ての語彙が一葉の確率で出現するモデルのパープレキシティは語彙数Vになり、性能が悪いと考えることができる。
    -このパープレキシティが小さくなるようなトピック数やパラメータの設定が必要。

    Correlated Topic Models (CTM)について

    トピックモデルは 「各トピック k の間には相関がない」という前提のもとに成り立つ手法ですが、本当にトピック間に相関はないのでしょうか。「本当は相関のあるトピック」を無理やり「相関のないトピック」に分割している可能性が高いので、相関を加味したモデルが必要です。そこで、トピックの生成割合を決める際に、トピック間の相関を持つように多次元の正規分布を用います。ただし、その代わりに共役的な分布を持たないため、従来のギブスサンプリングではサンプリングが非効率になることから変分ベイズを用いる必要があります。

    PAM:Pachinko Allocation Modelについて

    CTMは各トピックが同じレベルにあるため、トピック間の階層構造を表すことができません。
    自動車にとっての、セダンやトラック、あるいはお酒にとってのワインやビールのようにトピックに関しても階層構造があることは想像に難くありません。トピック間の関係・相関を一般的に表現するモデルで、トピック間の階層構造を基本として、パチンコ玉が落ちるように単語を生成します。パチンコ玉が落ちるというのは、向きが一方行の有向かつ非巡回ノードが連想されます。分布に関しても共役なので、ギブスサンプリングでサンプリングが可能です。
    2016/04/24の段階ではまだGensimでモデルの開発はなされていないようです。
    Pachinko Allocation Model
    ちなみに、論文はこちらです。
    Pachinko Allocation: DAG-Structured Mixture Models of Topic Correlations

    Relational Topic Models(RTM)について

    文書の中身だけでなく、文書間のリンクの生成過程も同時に確率モデル化する手法。論文や特許データに対して活用できる。過去の購買行動に応じた、顧客のセグメント解析や商品のレコメンデーションに活用できるかもしれない。

    参考文献

    『トピックモデル』( http://www.amazon.co.jp/dp/4061529048 )
    『トピックモデルによる統計的潜在意味解析』( http://www.amazon.co.jp/dp/4339027588 )
    Tokyo Webmining 46th 『トピックモデルことはじめ』
    machine_learning_python/topic.md

    統計数理研究所 H24年度公開講座 「確率的トピックモデル」サポートページ

    テキストマイニングに関する参考文献

    テキストマイニングの入門の情報から最新の研究までを集めています。
    随時更新します。

  • 学習
  • 自然言語処理を独習したい人のために
    http://cl.sd.tmu.ac.jp/prospective/prerequisite

    確率的潜在意味解析
    http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/yoshimura/node14.html

    Probabilistic latent semantic analysis
    http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis

    PythonでPLSAを実装してみる
    http://satomacoto.blogspot.jp/2009/10/pythonplsa.html

    RでPLSA(PLSI)
    http://sucrose.hatenablog.com/entry/20110604/p1

  • テキストマイニング環境の構築
  • RMeCab と RCaBoCha をインストールしてみた
    http://antimon2.hatenablog.jp/entry/2012/09/02/214131

    RCaBoCha
    http://rmecab.jp/wiki/index.php?RCaBoCha

  • LDA関連
  • “トピックモデルによる統計的潜在意味解析”を読んでLDA(Latent Dirichlet Allocation)を実装しましたAdd Star
    http://d.hatena.ne.jp/echizen_tm/20150321/1426952208

    LSIやLDAを手軽に試せるGensimを使った自然言語処理入門
    http://yuku-tech.hatenablog.com/entry/20110623/1308810518

    gensimに日本語Wikipediaを取り込むためのスクリプト
    https://gist.github.com/yuku-t/1040366

  • 研究
  • 特許公報を用いた自然言語処理による業界分析、及びSpotfireによる可視化
    http://togotv.dbcls.jp/20101220.html

    メンション情報を利用したTwitterユーザープロフィール推定
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_1_6/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P01-06_okutani.pdf.pagespeed.ce.ryqKKFAwd6.pdf

    誕生・使用事由によるレシピ検索~生い立ちレシピサーチ~
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_78_85/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P78-85_kadowaki.pdf.pagespeed.ce.A2TxRNdZlm.pdf

    特徴トークンに注目した Smith-Waterman アルゴリズムに基づく剽窃ソースコードの自動検出手法
    http://www.it.mgmt.waseda.ac.jp/results/student1/2012-M2-Hibi.pdf