分散表現を特徴量として文書分類するための方法について調べてみた

以前、テキストアナリティクスシンポジウムに参加した際に登壇者が機械学習のタスクにおいて分散表現を特徴量に使ったと言っていて、実務で使えるようにしたいと思ったので、調べた手法について記します。

先行研究

海外のブログ(Text Classification With Word2Vec)では、以下の手順で文書分類のための特徴量としてWord2Vecが用いられていました。

  • STEP1:ロイターのコーパスをもとにWord2Vecを求める。(先行研究では100次元に圧縮しています。)
  • STEP2:テキストごとに属する単語に対して、STEP1で求めた100次元の分散表現の平均値をとる。あるいは、TF-IDFのスコアで重み付けしたものを作る。これで100次元の分散表現が各テキストごとに用意できる。
  • STEP3:STEP2で作った100次元の分散表現を用いて、テキストごとのラベルについてExtra Treesによる分類器を学習させる。

ざっとこんな感じのアプローチになっていました。”ベクトルの足し算が意味の足し算に対応する「加法構成性」”という考え方からのアプローチと言えるのでしょうか。

そのあと、ベースラインとの比較をしていましたが、結論としては、ラベル付きのトレーニングデータが非常に少ない場合において有利である傾向があったものの、SVMなどの既存手法より精度が出ているとは言えないような結果でした。

今回の事例におけるタスクではうまくいかなかったようですが、テキストアナリティクスシンポジウムにおいてはアツいとされていたので、自社のデータで適用するなどしておきたいです。

今回取り上げたブログやGithubにはPython2.X系のコードしかなかったため、3.X系で動くように一部変更するなどをしました。
以下で3系で動き、同様の結果が出ているものを載せています。

コード

コードの概要としては
・訓練データの作成
・モデルの定義
・モデルのベンチマーク
・結果の描写
です。

事前にテキストデータをダウンロードして手に入れておく必要がありますが、それに関してはターミナルで実行できるものなので、ここでは載せていません。参考文献のblog_stuff/classification_w2v/benchmarking.ipynbを参照ください。

このようにSVCに負けている結果が出ます。

比較の棒グラフはこんな感じ。

自社のテキストデータで是非とも試したい。

参考文献

岩波データサイエンス Vol.2
blog_stuff/classification_w2v/benchmarking.ipynb
分散表現(単語埋め込み)
Text Classification With Word2Vec

人工知能学会全国大会2017のWebマーケティングで参考になりそうな研究9選

はじめに

今更ではありますが、2017年5月に開かれた人工知能学会全国大会2017の公開資料の中から、私の本業であるWebマーケティングで役に立ちそうな研究を独断と偏見で9本ほど集めてみました。思っていたよりもWebマーケティングぽい領域が多かったので、社内での分析業務におけるアイデアに直結しそうな気がしています。

ちなみに、全ての資料はこちらにあります。

基本的に各研究ごとに
・目的と結果
・対象となるデータ
・手法の概要
・PDFのリンク
について記していきます。

紹介する研究

今回は以下の研究を紹介したいと思います。
「オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル」
「テキストマイニングを用いた転職サイトの会員離脱予測」
「インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル」
「ユーザーのページビュー系列からのコンバージョン予測」
「SNSにおけるユーザの行動のモチベーション要因の分析」
「状況に応じた楽曲推薦に向けたソーシャルデータ分析」
「テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法」
「不動産仲介マーケティングのためのユーザ行動予測」
「SUUMOでの不動産データ活用の取り組みと未来」

オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル

目的と結果

オンライン広告のCVR予測の精度向上を目的としている。
これまでの課題としては、
「質的変数による特徴量のスパース性」
「広告クリックからのCVまでの期間の長さ(期間が空いてからCVしたりするケースがあるので正例だったはずが負例と扱われる可能性がある)」
などがあった。提案手法により従来手法に比べ高い精度でCVR予測が可能であることが示された。

対象となるデータ

過去3週間分の広告配信データでテスト期間は7日間

手法の概要

  • 次元圧縮
    • Factorization Machine(FM)を用いて、従来のロジスティック回帰では考慮できていなかった交互作用をモデリングし、低次元のベクトル内積に分解して表現している。
  • 遅れCV問題の対応
    • 遅れてCVが発生する事象に関しては、指数分布を用いて遅れてCVする事象をモデリングするDelayed Feedback Modelを構築することで、本当は事後的にCVしそうなユーザーの推定を行っている。
  • 予測
    • これらの手法を合わせた、Delayed Feedback Factorization Machineを構築し、SGD(確率的勾配降下法)やAdaGradを用いてパラメータを推定している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/110.pdf

テキストマイニングを用いた転職サイトの会員離脱予測

目的と結果

登録情報や履歴書のテキスト情報を用いて特徴量とし、転職サイトの登録会員の離脱予測を行っている。ブラックボックスでは無い形での結果の解釈ができ、予測精度も高いことが示された。

対象となるデータ

  • 2009年10月1日〜2016年9月28日までの履歴書、職務経歴書、自己PR書、希望条件
  • 離脱会員の定義は「登録して1ヶ月以内に一度も応募しない会員」としている。

手法の概要

  • STEP1:Pythonのmojimojiというライブラリを利用してカナを全角に、数字とアルファベットは半角に変換。
  • STEP2:MeCabを用いて名詞のみ抽出
  • STEP3:「職務」「経歴」「業務」「内容」などを不用語(stop word)とした。
  • STEP4:Grid Searchでパラメータチューニングしたランダムフォレストを用いて変数重要度(Feature Importance)を出し、重要度の上位90%を占める単語以外を削除
  • STEP5:登録情報のデータ(年齢、転職回数、住所)を数値データに変換
  • STEP6:選定した特徴量を用いて決定木アルゴリズムを適用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/949.pdf

インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル

目的と結果

広告のCTR予測を行う際の特徴量が非常にスパースであることから、ユーザーをクラスタリングして広告配信に効果的なユーザーを抽出することを目的としている。研究ではCVRの高いユーザー群の抽出を可能にしている。

対象となるデータ

  • 2016年6月1日〜2016年6月21日の間のクリックやコンバージョンのデータ(株式会社アイモバイルが提供)
  • クリック実績のある広告数、コンバージョン実績のある広告数、クリックされた広告番号、コンバージョンが発生した広告番号、ユーザー番号など

手法の概要

  • 高次元スパースデータを低次元に落とし込むために、オートエンコーダを用いている。
  • オートエンコーダにより得られた特徴量をもとにユーザーのクラスタリングを行っている。(オートエンコーダは入力された情報をなるべく欠損しないように、効率的に圧縮する構造を持たせたニューラルネットワークのこと。)
  • データにおけるゼロの成分を確率的に欠損とみなして計算処理を早めている。
  • 学習モデルはAdaGrad(学習率を学習に合わせて最適化する手法)
  • 訓練データ(特徴量の数がクリックで23339個、コンバージョンで5619個)にスパースデータ許容型オートエンコーダで500次元まで圧縮し、さらに通常のオートエンコーダで146次元まで圧縮している。
  • 次元圧縮して獲得したデータに対してk-means法でクラスタリングを行い、CVRなどを比較している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/12.pdf

ユーザーのページビュー系列からのコンバージョン予測

目的と結果

Web広告において、ユーザーの閲覧履歴からコンバージョンを予測することを目的に、Recurrent Neural Network(RNN)を用いた結果、非時系列のSVMよりもわずかばかりかの精度向上が観察された。データ数が少ない場合はSVMに軍配があがる結果となっている。

対象となるデータ

2016年7月1日〜2016年10月31日の広告の接触履歴データなど(広告の業種別データやユーザーのページビュー数)を特徴量に用いて、2016年11月1日〜11月30日までの期間を予測対象とした。データは株式会社マイクロアドが提供している模様。

手法の概要

  • Long Short-Term Memory RNN(LSTM)
    • ソフトアテンションモデル
      • 可変長の系列に対して内積で重みを算出し、足し合わせることで一部から情報を取り出すモデル。途中の層まで複数業種のデータを用いることで、複数の業種などの情報を共有することができる。(最後の隠れ層には業種別の特徴量を用いている。)
      • 勾配の計算に関してはAdamを用いて、実装はKerasを用いている。活性化関数はTanh、ドロップアウトはGaussianDropout
        としている。
    • RNNで用いる特徴量としては、特定のWebページを640種類に分類して、1日のうちに各トピックにページビューがあったかなかったかを1-0の変数にするなどの前処理を行っている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/765.pdf

SNSにおけるユーザの行動のモチベーション要因の分析

目的と結果

SNSユーザーのモチベーションの要因(一ヶ月先に投稿するかどうか)をユーザー同士の関係性(staticな関係)と、そのユーザーの周りのインタラクション(dynamicな関係)という観点から分析し、ユーザー同士の関係性とユーザー周りのインタラクションを同時に用いたモデルにおいて、それらがモチベーションの要因につながりうる傾向が観察された。

対象となるデータ

  • RoomClipという部屋の家具やインテリアの様子の写真を投稿するSNSのデータ
    • 気に入った写真に「いいね」を付けたり、コメントを送れる。
  • 2015年3月の一ヶ月間を学習期間とし、2015年4月の投稿の有無を予測対象とする。

手法の概要

  • ネットワーク特徴量
    • 各ユーザーに対して、
      • 中心性(次数中心性、媒介中心性、近接中心性)
      • クラスタ係数、PageRank、フォロー数とフォロワー数の比率、フォローしているユーザのアクティブ度
  • フィードバック特徴量
    • 特定期間中にユーザが周りのユーザから自身の投稿に対してもらった「いいね」「コメント」に対して
      • 反応の数
      • 反応を行ったユーザの数
      • 反応を行ったユーザのうち、相互フォロー関係にあるユーザからのものの割合
  • 予測器としてSVMを利用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/534.pdf

状況に応じた楽曲推薦に向けたソーシャルデータ分析

目的と結果

ユーザへの楽曲推薦システムの構築を目的に、楽曲とその再生時の状況の関係を収集したソーシャルデータより分析している。取得したデータのうちの7%ほどではあるが、ツィート情報から楽曲と再生時の状況との関係を抽出可能であるということが示された。

対象となるデータ

2016年8月10日〜2016年9月3日の間に投稿されたツィート(66879件)

手法の概要

  • ハッシュタグ#nowplaying付きのツィートを収集して、アーティスト名や楽曲名や楽曲再生時の状況(同一ユーザの5分前後の投稿内容)を収集
  • 取得したツィートからアーティスト名、楽曲名を除去して再生時の状況を取得
  • 取得したデータからデータベースを作成

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/102.pdf

テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法

目的と結果

製品などの口コミの評価レビューに関する信頼性を確かめることを目的としている。レビューデータに対して感性評価を行い、さらにその結果に対して総合評価点数別に感性表現(Goodなど)の伴った表現の頻出ランキングを作成することで、点数が高い理由を把握しやすくなった。

対象となるデータ

ソニーの製品サイトにおける、ユーザの製品に対する評価とコメントのデータ(1406件)

手法の概要

  • テキストマイニングスタジオによる感性評価(ポジティブ、中立、ネガティブ)
  • 総合評価点数別(5段階)の「ポジティブ、中立、ネガティブ」の割合の調査
  • 総合評価4の口コミかつ中立な表現にフィルターをかけて、感性情報を有する単語と係り受け関係となった単語の頻度ランキングのTOP10を抽出

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/1115.pdf

不動産仲介マーケティングのためのユーザ行動予測 Prediction of user behaviors for real estate brokerage marketing

目的と結果

不動産紹介業において、顧客の属性情報と来店初期の行動から、来店者が最終的に商品を購買するかどうかの予測モデル(不均衡データにおける予測タスク)を構築することでマーケティングの広告効果測定に適用することを目的としている。結果として、顧客の来店後30分間という短い時間における行動だけでも識別力のある予測が可能であることが示されている。

対象となるデータ

  • オンライン不動産賃貸仲介店舗iettyの顧客データベース
    • 希望物件の情報
      • 引っ越し希望日
      • 住みたいエリアの駅
      • 間取り
      • 広さ
      • 家賃
    • 顧客属性
      • 在住の地域
      • 性別
      • 年齢
    • 行動データ
      • 登録時
        • フォームの記入にかかった時間
        • フリーコメントの長さ
        • 利用デバイス
      • 登録後
        • 初回チャット発言までの経過時間
        • 初回物件評価までの経過時間

手法の概要

  • STEP1:顧客の属性および登録初期(30分以内)の行動から特徴量を作成し、2ヶ月以内に契約すれば正例、それ以外を負例とする。(正例は619件、負例は33212件)
  • STEP2:検証用データを無作為に20%取り置く
  • STEP3:残り80%のデータに対して負例に対する、ランダムアンダーサンプリングと、正例に対するSMOTE(Synthetic Minority Over-sampling Technique)を用いたオーバーサンプリングによりサンプル数を調整する。
  • STEP4:ランダムフォレストを用いて、無効な特徴量の取捨選択や離散化のレンジ調整する。
  • STEP5:全特徴量(83次元)を二値化して、RBFカーネル(Gaussian カーネル)のSVMを適用し、様々なCやγの組み合わせを試行して、二値分類を行う。
  • STEP6:評価を予測確率の平均とAUCの2種類で行う。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/466.pdf

SUUMOでの不動産データ活用の取り組みと未来

目的と結果

物件検索ユーザーが比較検討を行いやすくすることを目的に様々な取り組みをしている。

対象となるデータ

  • 不動産ポータルサイトSUUMOのデータ
    • 行動履歴(Webサイト、アプリ)
    • 物件情報(不動産情報)
    • 街情報(独自で収集)
    • アンケート

手法の概要

  • 実活用
    • 相場推定
    • 単純な加算平均ではなく、外れ値や時系列変動、データ量などを考慮して推定している。
    • リアルタイム物件レコメンド
    • ランキング学習により推定したモデルを利用し、リアルタイムに計算を行っている。個人ごとにパーソナライズしたランキングも用いている。
    • バンディットアルゴリズムによる配信施策の最適化
    • メールやプッシュ通知などで件名やデザイン、配信時間など様々な選択肢があり、その最適なパターンを見つけるために、バンディットアルゴリズムを適用している。
  • 実験段階
    • 間取り画像の分析
    • ユーザーの求めている間取りが何なのかを画像から抽出しようとしている。
    • ユーザーの検索行動、嗜好の推定
    • ユーザーの検索行動から、嗜好性を掴み取り、レコメンドする際の理由付けができるようにモデルを作ろうとしている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/743.pdf

感想

  • 特徴量の削減のためにランダムフォレストを適用する流れ
  • 高次元スパースデータに対するニューラルネットワークの適用
  • CVの時系列予測のためにRNNの適用
  • SNS分析におけるネットワーク特徴量とフィードバック特徴量という概念
  • 口コミデータ分析の作法(点数別に感性表現の係り受けを見る)
    など勉強になりました。Kaggleと違って日本語なのが読みやすかったですね。

参考文献

初めてのディープラーニング –オープンソース”Caffe”による演習付き
SMOTE で不均衡データの分類

洋楽の歌詞データでDoc2vecを実行してみる

はじめに

仕事で記事間の類似度計算などがあったりするんですが、TF-IDFにしてCOS類似度を計算するなどの方法で行っているのが現状です。そろそろ他の手法にも移行したいので、それに変わる類似度計算の手段としてDoc2vecを試してみたいと思います。

データ

以前より収集している洋楽の歌詞データを用います。Billboardのランキングに登場した楽曲の歌詞データを961曲分集めたものとなります。英語なので、日本語のように形態素解析は不要ですが、ストップワードを除去するなどの処理を施したコーパスを用います。Rのtmパッケージによるストップワードの除去についてはBillboard100位以内の楽曲の歌詞情報にLDAを適用してみたをご覧ください。日本語でのDoc2Vecの適用は参考文献において紹介しています。

類似度計算

TaggedLineDocumentを用いて、doc2vecで扱えるオブジェクトを作成します。TaggedLineDocumentに指定するファイルは主にtxtファイルで、その満たすべき条件は「1行につき1文書」「単語がスペースで区切られている」などです。あとは、doc2vecを実行するだけです。パラメータなどの細かい指定については今後の宿題としたいです。

類似度の算出

早速、気になる楽曲に関して、類似度の高い楽曲を抽出してみたいと思います。

どうやら、Radioactiveという曲はkings of leonというグループも歌っているようですが、私はimagine dragonsの方の楽曲に関心がありますので、インデックスを409にして歌詞情報の近い楽曲を抽出します。

どうやら、toby keithのMade In Americaという楽曲が最も近いようです。類似度は35%程度ですが、全然単語が被っていないので本当に近いのか納得がいかないです。

次に、lady gagaのBorn This Wayに近い楽曲を出してみます。Dancing Queenという非常に懐かしい曲が選ばれていますが、類似度は49%と先ほどよりも高いです。queenやgirlやcanやrightなど共通の単語が含まれているので、先ほどの結果よりは近いのかなぁと思います。

正しく推定できているのか不安だったので、類似度が90%と非常に高かった、Just The Way You Areという楽曲の最も近い楽曲を見てみます。

調べたところ、同じ楽曲のカバー版のようです。近いものは、ちゃんと近いと見なせるようです。近いかどうかの基準をどの水準に置くのかは難しい判断ですね。

参考情報

models.doc2vec – Deep learning with paragraph2vec
Doc2Vecの仕組みとgensimを使った文書類似度算出チュートリアル
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Billboard100位以内の楽曲の歌詞情報にLDAを適用してみた

目次

・はじめに
・データ収集
・Rによる分析
・LDAの結果
・参考文献

はじめに

前回の投稿でBillboardの週次洋楽ランキングデータをWebスクレイピングで取得し、楽曲の消費サイクルのような順位の挙動を確かめることができました。(某洋楽ヒットチャートの週次ランキングデータをBeautiful Soupで集めてみた)今回は、歌詞の情報を用いて順位データとつなぐことにより、どのような単語の入っている洋楽がBillboardにおいてTop10に入る傾向があるのかをLDAを行うことで確かめたいと思います。

データ収集

残念なことに、Billboardのサイトに歌詞の情報は載っていません。そこで、洋楽の歌詞が取り上げられている某サイトをPython(3系)でWebスクレイピングし、名寄せを頑張って順位データと歌詞データを繋ぎます。

幸いなことに某サイトのURLに規則性があったので、アーティスト名からなるURLを生成し、そのURLをWebスクレイピングして楽曲のリストを集め、今回のBillboardのランキングに入った楽曲のみに絞ります。

楽曲をランキングに含まれるもののみに絞ったら、歌詞詳細ページを取得します。

うまいこと歌詞情報を手に入れることができました。ざっと947曲です。

Rによる分析

ここから、Rにてテキストマイニングを行いたいと思います。まず、tmパッケージを用いて、不要語(stop word)を除去します。具体的にはtheとかyouとかを除外しています。

続いて、LDAを実行できるtopicmodelsパッケージで扱えるようにするために、テキストデータに以下の処理を施します。

あとは以下のコードでLDAを実行するだけです。トピック数はアドホックに20としています。研究者の方、いい加減ですみません。

LDAの結果

まずは推定されたトピックごとの上位10単語をみてみます。トピック1はラブソングとかでしょうか。トピック17にパリピっぽい単語が、トピック18にスラングが含まれていますね。

見ずらいので、行を一つにまとめて、トピックにidを割り振ります。

最後に、BillboardでTop10に入ったかどうかのデータを作っておき、そのデータと各歌詞を繋ぎ、各歌詞ごとに割りふられた確率が最大のトピックで集計をします。

BillboardのTop10ランクイン割合の高いトピックTop3
「one,ooh,call,cause,gettin,born,day,makes,came,stand」
「better,world,whoa,run,light,things,find,show,see,waiting」・・・明るい感じ?
「stop,just,hands,put,party,crazy,live,lights,play,see」・・・パリピぽい

BillboardのTop10ランクイン割合の低いトピックTop3
「wanna,want,take,rock,see,kiss,come,make,body,tonight」・・・欲求系?
「feel,heart,life,away,just,break,real,enough,every,find」・・・癒し系?
「hey,said,old,every,woo,left,told,nothing,daddy,sweet」

あまり洋楽を聴かないので、得られたトピックの解釈が中々できないのがもどかしいです。ただ、スラングの歌詞を含む歌詞はそんなにランクイン割合が悪いわけではなさそうですね。洋楽をもっと聴いて、前処理などもう少し工夫してリベンジしたいですね。

参考文献

トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

モダンなRによるテキスト解析topicmodels: An R Package for Fitting Topic Models

言語処理学会第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)について

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

    参考文献

    トピックモデル (機械学習プロフェッショナルシリーズ)
    トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)
    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)

  • テキストマイニング環境の構築
  • RMeCab と RCaBoCha をインストールしてみた

    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を使った自然言語処理入門

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

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

    メンション情報を利用したTwitterユーザープロフィール推定

    DBSJ Japanese Journal, Vol.13-J, No1, pp.1-6 メンション情報を利用したTwitterユーザープロフィール推定


    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P01-06_okutani.pdf.pagespeed.ce.ryqKKFAwd6.pdf

    誕生・使用事由によるレシピ検索~生い立ちレシピサーチ~

    DBSJ Japanese Journal, Vol.13-J, No1, pp.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