Word2vec
Upcoming SlideShare
Loading in...5
×
 

Word2vec

on

  • 474 views

NLPStudy#1 の本セッション発表資料

NLPStudy#1 の本セッション発表資料
Word2Vecに関する二つの工夫をご紹介

Statistics

Views

Total Views
474
Views on SlideShare
342
Embed Views
132

Actions

Likes
11
Downloads
4
Comments
0

3 Embeds 132

https://twitter.com 123
http://tokyoscrapper.connpass.com 9

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Word2vec Presentation Transcript

  • 1. 自己紹介 ステータス • @piroyoung • 家具作りが好き • 数学(ゲーム理論) → (物流 → 小売)→ データなんとか スキル・興味 • R, SQL, Python, Ruby, Jags/Stan • フォークリフトの免許持ってます. • アドテク系の商品企画・研究・調査 • ベイジアンでモデリングしてたり • 最近はNLPを使いたい • プログラミング絶賛修行中 1
  • 2. 自己紹介 ステータス • @piroyoung • 家具作りが好き • 数学(ゲーム理論) → (物流 → 小売)→ データなんとか スキル・興味 • R, SQL, Python, Ruby, Jags/Stan • フォークリフトの免許持ってます. • アドテク系の商品企画・研究・調査 • ベイジアンでモデリングしてたり • 最近はNLPを使いたい • プログラミング絶賛修行中 ▶︎最近はデータ分析界隈に顔出してます. 2
  • 3. word2vecのご紹介 シリーズ:工夫して使うNLP 2014/10/19 : NLP勉強会#1 @piroyoung
  • 4. • 帰宅して,「動かしてみようかな,Word2Vec」, 位がゴールです. • 今回は実際に動かすまでの工夫のお話をさせて頂き ます. • 工夫1:情報弱者が語彙を獲得するには. • 工夫2 :モデル・コーパスの質を評価するには.
  • 5. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 6. 1-1.word2vec is 何? • 単語に低次元のベクトルを対応させるソフトウェア. • 「同じ文脈にある単語は同じ意味を持つ」がモットー. • 東京 - 日本 + フランス = パリ とかできるアレ. • 入力:単語はスペース区切り,文は改行区切り. • 出力:単語とベクトルの対応. • 足したり引いたりが意味を持つっぽい. • マーケタ「で,どうすんだこれ?」◀ポイント
  • 7. @word2vector 東京 - 日本 + フランス @word2vector 彼女 + 作り方 @word2vector ラーメン + あっさり botを作りました.Word2Vecをもっと気軽に. • @word2vector 宛にmentionを飛ばしてください. • 演算にも対応しています.+ と - • 区切り文字は半角スペース. • セッション中もガンガン飛ばしてください. • #word2vecjp
  • 8. @word2vector 東京 - 日本 + フランス @word2vector 彼女 + 作り方 @word2vector ラーメン + あっさり botを作りました.Word2Vecをもっと気軽に. • @word2vec 宛にmentionを飛ばしてください. • 演算にも対応しています.+ と - • 区切り文字は半角スペース. • セッション中もガンガン飛ばしてください. • #word2vecjp ▶︎1~2分で返ってきます.
  • 9. 似たようなウェブサービス見つけた.
  • 10. 似たようなウェブサービス見つけた.
  • 11. 似たようなウェブサービス見つけた.
  • 12. 似たようなウェブサービス見つけた.
  • 13. 似たようなウェブサービス見つけた.
  • 14. 似たようなウェブサービス見つけた. ▶︎敗北を知りたい ※web周りのスキルで完敗です.たぶん.
  • 15. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 16. 1-2.単語のベクトル表現 会いたくて会いたくて震える 会う / たい / て / 会う / たい / て / 震える 1:会う 2:たい 3:て 4:震える dictionary 会う= 0 BB@ 1 0 0 0 1 CCA 1-of-k 表現
  • 17. 1-2.単語のベクトル表現 会う= 0 BB@ 1 0 0 0 1 CCA 震える たい • すべての単語は等距離.意味の距離は? • 次元が大きすぎる.100万次元とか • の図みたいなベクトルでよくない? て
  • 18. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 19. 1-2.単語の低次元ベクトル表現 word2vecの扱う「文脈」 原則 / としては / 副作用 / が / ない / もの / である / こと / が wt3 wt2 wt1 wt wt+1 wt+2 wt+3 window • 基準となる単語の前後数単語のことを文脈窓という. • この文脈窓の幅のことをWindowと呼ぶ.
  • 20. 1-2.単語の低次元ベクトル表現 wt ◀入力 1-of-k表現,100万次元 横長い行列wt ◀200次元※ ( 横長い行列wt ) 縦長い行列 ▲100万次元 wt+i ◀正解 • 正解からの乖離を行列に学習させる. • σ はシグモイドを近似する闇の工夫の塊.
  • 21. 1-2.単語の低次元ベクトル表現 wt 横長い行列wt ◀200次元 =分散表現 横長い行列wt 縦長い行列 ( ) • 「中間層」の低次元ベクトルを分散表現という • 分散表現の次元数をSizeと呼ぶ ▲100万次元 wt+i ◀正解 ◀入力 1-of-k表現,100万次元
  • 22. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 23. 2−1.NLPとPython • pandasの集計がかなり快適・早い • nltk : 英語寄り,ステマーとかストップワードとか • gensim :トピックモデルのライブラリ ◀今回 • gensimからもなぜかword2vecが叩ける
  • 24. 2−1.NLPとPython 例)文章をわかちがきして特定の単語を時系列で集計 ▶︎たったの3行!
  • 25. 2−1.NLPとPython 例)文章をわかちがきして特定の単語を時系列で集計 ▶︎たったの3行! ▶︎某所でも大絶賛の声
  • 26. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 27. 2−2.前処理と複合語 MeCab + IPA辞書 での分かちがきでは・・・ 伊藤 清(いとう きよし、1915年9月7日 - 2008年11月10日)は、日本の数学者。確率論における伊藤 の補題(伊藤の定理)の考案者として知られる。大戦中の1942年に、伊藤の補題で知られる確率微分 方程式を生み出した。確率積分を計算する上で重要な伊藤の公式(伊藤ルール)は米国科学アカデミー によって、以下の様に評価されている[3]。 伊藤/清/いとう/きよし/1915/年/9/月/7/日/2008/年/11/月/10/日/は/日本/の/数学/者/確率/論/における/伊藤 /の/補題/伊藤/の/定理/の/考案/者/として/知ら/れる/大戦/中/の/1942/年/に/伊藤/の/補題/で/知ら/れる/確 率/微分/方程式/を/生み出し/た/確率/積分/を/計算/する/上/で/重要/な/伊藤/の/公式/伊藤/ルール/は/米国/ 科学/アカデミー/によって/以下/の/様/に/評価/さ/れ/て/いる/3 ▶︎わかち過ぎで形態素ってレベルじゃない
  • 28. 2−2.前処理と複合語 品詞に着目してみる. 伊藤/清/いとう/きよし/1915/年/9/月/7/日/2008/年/11/月/10/日/は/日本/の/数学/者/確率/論/における/伊藤 /の/補題/伊藤/の/定理/の/考案/者/として/知ら/れる/大戦/中/の/1942/年/に/伊藤/の/補題/で/知ら/れる/確 率/微分/方程式/を/生み出し/た/確率/積分/を/計算/する/上/で/重要/な/伊藤/の/公式/伊藤/ルール/は/米国/ 科学/アカデミー/によって/以下/の/様/に/評価/さ/れ/て/いる/3 ▶︎同じ品詞が続いたとき!接尾名詞!
  • 29. 2−2.前処理と複合語 そのあたりを諸々工夫すると・・・ 伊藤/清/いとう/きよし/1915/年/9/月/7/日/2008/年/11/月/10/日/は/日本/の/数学/者/確率/論/における/伊藤 /の/補題/伊藤/の/定理/の/考案/者/として/知ら/れる/大戦/中/の/1942/年/に/伊藤/の/補題/で/知ら/れる/確 率/微分/方程式/を/生み出し/た/確率/積分/を/計算/する/上/で/重要/な/伊藤/の/公式/伊藤/ルール/は/米国/ 科学/アカデミー/によって/以下/の/様/に/評価/さ/れ/て/いる/3 伊藤清/いとうきよし/1915年/9月/7日/2008年/11月/10日/は/日本/の/数学者/確率論/における/伊藤/の/補 題/伊藤/の/定理/の/考案者/として/知る/れる/大戦中/の/1942年/に/伊藤/の/補題/で/知る/れる/確率微分 方程式/を/生み出す/た/確率積分/を/計算/する/上/で/重要/な/伊藤/の/公式/伊藤/ルール/は/米国科学アカ デミー/によって/以下/の/様/に/評価/する/れる/て/いる/3 ▶︎wikiベースで語彙が約3倍になりました.
  • 30. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 31. 2-3.package : gensim • トピックモデルのpythonライブラリ • gensim.utils.* 文字コード周りの便利ツール • gensim.corpora.* :corpusの作成やbow変換など • gensim.models.ldamodels.LdaModel:トピックモデルはこれ • gensim.models.Word2Vec:w2vのクラス ◀今回!
  • 32. 2-3.package : gensim gensim.utils.* • any2unicode(string):いろんな文字コードをunicodeに変換する gensim.corpora.Dictionary(text) • 元データから語彙情報をもったインスタンスを作る. • token2id:各単語と整数値のマッピングを返す • doc2bow(document):documentをbow形式に変換する ※bow = bag of words.:1-of-k表現の文章内の和.
  • 33. 2-3.package : gensim gensim.models.ldamodels.LdaModel() • corporaで作ったbowのリストをcorpusと呼んでいる. • lda = LdaModel(corpus,num_topics = n) でお手軽LDA. gensim.models.Word2Vec() • build_vocab(iter):元データから語彙を生成する. • train(iter):元データから分散表現を学習する • most_similar():単語の演算結果を返す※後述 • accuracy():モデルのベンチマーク※後述
  • 34. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 35. 2-4.学習と演算 ▶︎イテレータを受け取ることができる.省メモリ
  • 36. 2-4.学習と演算 「東京 - 日本 + フランス=パリ」の例 • 各タプルの第2成分は演算結果とのコサイン類似度.
  • 37. 1-1.word2vec is 何? 1-2.単語のベクトル表現 1-3.単語の低次元ベクトル表現 2−1.NLPとPython 2−2.前処理と複合語 2-3.package : gensim 2-4.学習と演算 2-5.モデルのベンチマーク
  • 38. 2-5.モデルのベンチマーク • 何に応用するにせよ,評価無くして使えない. • Word2Vec純正のベンチマークcompute-accuracyがある. • ↑日本語版が無い.作るの面倒 • お手軽ベンチマークを思いついた. • ↑piroyoung testと名付けます.
  • 39. 2-5.モデルのベンチマーク 組み込みベンチマーク compute-accuracyのアイディア • A ~ B → C~??というアナロジーの問題集 約2万問 • 各分野ごとの正答率でモデルの精度を評価する
  • 40. 2-5.モデルのベンチマーク 日本語でのベンチマーク piroyoung test のアイディア • なんらかの基準で選んだ単語typeをランダムに2分割する りんご りんご_A りんご_B • 元は同じ単語typeなんだからコサイン類似度は1となるべし • でもコーパスは有限だから1にはならない
  • 41. 2-5.モデルのベンチマーク 日本語でのベンチマーク piroyoung test のアイディア • LDAなんかでジャンルごとに100~1000個くらい単語を選ぶ • 全ジャンルのスコアの合計をそのコーパスのスコアとする. りんご • コサイン類似度の平均をそのジャンルのスコアとする. • 意味が一貫しているほど,語彙が多いほど高スコア. • ランダムに単語を選んでもいいかも. • その場合特定の言語に依存しないベンチマーク りんご_A りんご_B
  • 42. まとめ • ことWord2Vecに関してはIPA辞書でも結構戦える. • __iter__で遅延評価.メモリを節約. • 純正ベンチマークは英語用. • piroyoung test は実は未実装. • いまいち固まってないのでなんか助言頂けると幸い. • compute-accuracyの日本語版も作りたい.
  • 43. 参考書籍のご紹介 • 2章の「文書および単語の数学的表現」がMust
  • 44. 参考書籍のご紹介 • こんなタイトルでがっつりpython/nltkな本
  • 45. 参考書籍のご紹介 • Numpy/Pandasな本
  • 46. ご静聴ありがとうございました.