流行りの分散表現を用いた文書分類について
2018/10/19
Netadashi Meetup #7 in みなとみらい
Mr_Sakaue(SKUE)
1
● 阪上晃幸(@Mr_Sakaue)
● データアナリスト@渋谷のベンチャー企業
● 経歴
2012/2:インターン@渋谷のベンチャー企業
2012/3:一橋大学大学院経済学研究科 修士課程修了
2012/4〜:渋谷のベンチャー企業入社
● 趣味
料理、ブログ記事の作成
『かものはしの分析ブログ』で検索!
自己紹介
2
● 対象リスナー
・今あるデータを活用したい方々(エンジニア /データサイエンティスト)
● 話したいこと
・近年流行っている分散表現を用いた分析事例の紹介
● 話さないこと
・自社での活用事例
・最先端技術などの紹介
・細かい技術の詳細(参考文献あり。または懇親会や質問などで)
話したいこと/話さないこと
3
公開するのでメモは
不要
● 1章:分散表現入門
● 2章:分散表現の活用事例、学習済みの分散表現の紹介
● 3章:実践例
4
● 1章:分散表現入門
● 2章:分散表現の活用事例、学習済みの分散表現の紹介
● 3章:実践例
5
● one-hot表現
one-hot(ワン・ホット)は1つだけ1をとり、他は0であるような数列のこと。
単語をそのようなものにしたものをone-hot表現と呼んでいる。
分散表現入門
ある世界に存在する単語
イクラ
ウニ
マグロ
鯖
鮭
鮭 イクラ マグロ ウニ 鯖
0 1 0 0 0
イクラのone-hot表現
鯖のone-hot表現
鮭 イクラ マグロ ウニ 鯖
0 0 0 0 1
6
● one-hot表現
文をone-hot表現で扱えばBag-of-words表現になる。文書分類の特徴量としても使われ
る。
分散表現入門
ある世界に存在する 3つの文書
あのイクラの味が忘れられない
マグロよりはウニが食べたい
鮭の缶詰ばかり食べる
イクラ マグロ ウニ 缶詰 鮭 味
文書1 1 0 0 0 0 1
文書2 0 1 1 0 0 0
文書3 0 0 0 1 1 0
7
● one-hot表現
未知語を扱うことができなかったり次元数が膨大となるという欠点がある。
分散表現入門
ある世界に存在する 3つの文書
あのイクラや牡蠣や…(30万語)の
味が忘れられない
マグロよりはウニが食べたい
鮭の缶詰ばかり食べる
イクラ マグロ … 牡蠣 鮭 味
文書1 1 0 … 1 0 1
文書2 0 1 … 0 0 0
文書3 0 0 … 0 1 0
3行30万列の行列
8
● 分散表現とは
単語を高次元の実数ベクトルで表現する技術。一つの単語を10~1000次元ほどのベクト
ルで表現する。大量のテキストをもとに、主にニューラルネットワークを用いて計算され
る。(Wikipediaの全データなど)
自然言語処理における特徴量としても用いられている。
分散表現入門
ウナギ 0.01 0.03 0.01 … 0.04 0.03
アナゴ 0.02 0.05 0.01 … 0.05 0.01
タコ 0.01 0.01 0.12 … 0.01 0.09
10~1000次元
9
● Word2Vec(ワードトゥーベック)
2013年に当時GoogleにいたMikolovらによって考案された、単語の分散表現を得るた
めのアルゴリズム。
ある単語の単語ベクトルを入力として、前後の単語の単語ベクトルを予測することを目的
としている。(うまく予測できるように最適化をしている。)
単語ベクトルが類似している単語は同じコンテキストでの出現率が高くなるように計算さ
れる。
分散表現入門
10
● Word2Vec…3次元に圧縮するケース
分散表現入門
俺 の イタリアン 行っ た
1 0 0 0 0
「俺」のone-hot表現 「イタリアン」のone-hot表現
俺 の イタリアン 行っ た
0 0 1 0 0
0.1 0.9 0.1 0.01 0.01
俺 の イタリアン 行っ た
0.01 0.5 0.02 0.001 0.002
ハズレ アタリ ハズレ ハズレ ハズレ
中間層
入力層
出力層
確率
ラベル
周辺の単語、
「俺」
「イタリアン」
から
「の」を当てにいくタスク。 確率(0~1)にするための関数を適用
ここで得られる重みづけが分
散表現になる
11
● Word2Vec
先ほどの図のように入力層、中間層、出力層からなる、2層のニューラルネットワークを
元に計算され、各単語が3次元のベクトルで表現されるようになる。
分散表現入門
俺 0.1 0.2 0.1
の 0.2 0.2 0.1
イタリアン 0.3 0.1 0.2
行っ 0.5 0.8 0.3
た 0.01 0.3 0.9
※ここでの値は適当に入れている
12
● Word2Vec
もとめた分散表現自体を足し算や引き算することもできる。
非常に有名なものとして「”queen” - “woman” + “man” = “king”」があり、意味の四則演
算のようなものが実現できているものもある。
私が過去に試したものとしては、
「”ディズニーランド” - ”夢” = ”舞浜” / ”ベイシティバス”」
などがある。(※Wikipediaコーパスデータを用いた)
分散表現入門
13
● Word2Vec
コンテクストの似た単語を分散表現の類似度から求めることができる。
分散表現入門
14
↑Wikipediaのクラシック楽曲情報 3000件から推定 ↑某グルメ系口コミサイトの蒙古タンメン中本の口コミ情報 4000
件から推定
● fastText(ファストテキスト)
2016年にFacebookにいたMikolovらによって考案されたアルゴリズム。
単語ではなく、n-gramを用いているので、未知の単語に強いとされている。
単語の「表記」が類似した単語は同様の意味をもつというモデルとなっている。
分散表現入門
3-gramでの「お疲れ様です」
・お疲
・お疲れ
・疲れ様
・様です
・です
15
● 分散表現の用途
・単語の分散表現をニューラルネットワークやSVMや
 一般的な機械学習の特徴量として扱う。
 →単語や文書を固定長のベクトルに変換できると適応領域が増える。
・単語のクラスタリングに使う(コンテクストの近い単語をまとめる)
分散表現入門
16
● 1章:分散表現入門
● 2章:分散表現の活用事例、学習済みの分散表現の紹介
● 3章:実践例
17
● 活用事例1
・リクルートテクノロジーズ
 ・ユーザーのアクションログデータを入力して、分散表現を手に入れ、
  その分散表現を元に計算したアイテム間の類似度などを計算し、
  アイテムをレコメンドするというシステムで適用している。
 ・ユーザーの行動ログの分散表現から、その分散表現を足し合わせる
  ことでユーザーの志向性を捉えるために使っている。
分散表現の活用事例
18
● 活用事例2
・サイバーエージェント
 ・検索連動型広告のテキストを自動生成をする際に、Word2Vecを用いて
  類義語による単語の入替をする研究を発表している。
分散表現の活用事例
赤枠がGoogle広告の検索連動型広告。
表現次第でクリック率が違ってくるが、文言を考える
のは骨が折れる作業。
19
● 活用事例3(公式なプレスは出ていない)
・メルカリ/Gunosy
 ・2017年のテキストアナリティクスシンポジウムでの講演内容のもの。
  ・メルカリ
   ・通報商品の分類自動化などのために様々なテキスト情報をもとに
    分散表現を得て予測できるようにしている。
  ・Gunosy
   ・ニュース記事の CTR予測などで分散表現を使ったモデルが
    一番性能が出ているという発言があった。
  →Word2Vecなどでもとめた分散表現が二値分類の際の特徴量として使われるケースが出てきた。
分散表現の活用事例
20
● 自然言語の資源問題
先ほどあげたようなデータ規模が膨大な企業の場合は分散表現を得るための学習を十
分にできるが、そうでない企業はなかなか取り組むことができない。
学習済みの分散表現の紹介
21
● ファインチューニング
Wikipediaやニュース記事のテキストなどの一般的なテキストデータをもとに、学習した
ネットワークのパラメータなどを、特定の目的(何かの分類とか)のためのデータで再度
学習させ、特定の目的における精度を高めること。
言語資源の乏しい企業はファインチューニング頑張るマンになれば幸せになれる?
学習済みの分散表現の紹介
22
● 学習済み分散表現
・各研究機関や企業などが公開している学習済みの分散表現。
 ・大規模な言語資源でWord2Vecを計算しようとすると何日も要するので、
  提供してくださる機関には感謝しかない。
 ・だいたいGensimで読み込める。
  ・KeyedVectors形式…再学習ができない
  ・full model形式…再学習ができる
学習済みの分散表現の紹介
23
● 学習済み分散表現
・白ヤギコーポレーションのモデル:full model形式(Gensim)
 →Wikipedia日本語版をコーパス
・東北大学 乾・岡崎研究室のモデル:KeyedVectors形式(Gensim)
 →Wikipedia日本語版をコーパス(エンティティーなどの分散表現も推定している)
・Facebookの学習済みFastTextモデル:KeyedVectors形式(Gensim)
 →Wikipediaなどをコーパス
・NWJC から取得した単語の分散表現データ (nwjc2vec):KeyedVectors形式(Gensim)
 →国語研日本語ウェブコーパス
・NNLM embedding trained on Google News:TensorFlow
 →Googleニュースをコーパス
公開されているものはfull model形式のものが少ない。
学習済みの分散表現の紹介
24
● 1章:分散表現入門
● 2章:分散表現の活用事例、学習済みの分散表現の紹介
● 3章:実践例
25
● やりたいこと
不動産物件の設備情報のテキストから、
その物件がデザイナーズマンションかどうか当てたい。
実践例
26
● データ
・某不動産物件情報サイトをWebスクレイピング
 ・渋谷区のデザイナーズマンションに関する物件の設備情報のテキスト
 ・渋谷区の普通のマンションに関する物件の設備情報のテキスト
 →合わせて1800件程度
実践例
27
実践例
28
テキストの一例
バス トイレ 別 バルコニー エアコン フローリ
ング 浴室 乾燥機 オートロック 室内 洗濯
置 システムキッチン エレベーター 宅配ボッ
クス 入居 可 最上階 バイク 置場 CS BS
テキストの文字数ヒストグラム
● 手法など
・Scikit-learnのExtremely Randomized Treesを用いる
・特徴量は以下の3つ
 ・設備情報に含まれる単語ごとの分散表現を足し合わせたもの
 ・設備情報に含まれる単語ごとの分散表現の平均値をとったもの
 ・設備情報に含まれる単語ごとの分散表現をTF-IDFで重み付けしたもの
・評価指標はAUC(うまく分類できているかの指標で0.5~1の間の値)
・5分割クロスバリデーションの平均スコアを比較する
実践例
29
● 以下の分散表現でデザイナーズマンション分類器の学習を行う。
・1800件のテキストで分散表現を学習したもの
・各種、学習済み分散表現をそのまま使ったもの
・再学習可能なものに関しては1800件のテキストで再学習したもの
実践例
30
実践例
31
実践例
物件情報 白ヤギ 東北大学 FastText 梵天
分散表現(平均) 0.789 0.820 0.890 0.936 0.920
分散表現(合計) 0.783 0.821 0.865 0.897 0.875
分散表現(TF-IDF) 0.779 0.829 0.903 0.945 0.926
5分割クロスバリデーションの AUCの平均値
※「物件情報」は物件情報のテキストだけで学習したもの
※※「白ヤギ」は物件情報で再学習したもの
※※※それ以外は学習済み分散表現をそのまま使っています。
● 結果
1800件程度のテキストで作成した分散表現よりも、大規模な言語資源で学習された学
習済み分散表現の方が、任意の物件がデザイナーズマンションかどうかを当てるタスク
において性能が高いことがわかった。
タスクによっては学習済み分散表現を使うことで、うまくこなせるのかもしれない。
別件で、蒙古タンメン中本の口コミ評価点数を予測しようとして、全く精度が出なかったこ
ともあるので、タスクによりけりな印象がある。
実践例
32
● 分散表現の基礎をお話した。
● 企業での分散表現のビジネスにおける実活用例を紹介した。
● 学習済み分散表現を用いた分類問題の実践例を紹介した。
まとめ
33
● 堅山 耀太郎(2017)「Word Embeddingモデル再訪」
● 斎藤 康毅(2018)『ゼロから作るDeep Learning ❷――自然言語処理編』
● 新納 浩幸(2017)『Chainer v2による実践深層学習』
● @Hironsan(2017)「なぜ自然言語処理にとって単語の分散表現は重要なのか?」
● リクルートテクノロジーズ(2015)「リクルート式 自然言語処理技術の適応事例紹介」
● 馬場 et al.(2015)「検索連動型広告におけるテキスト自動生成とその評価指標の検討」
● ナード戦隊データマン(2018)「Word Embeddingだけで文書分類する」
● Gensim「Why use KeyedVectors instead of a full model?」
参考文献
34

流行りの分散表現を用いた文書分類について Netadashi Meetup 7