Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
「意味」の意味について考えた
大郷 友海
2016/07/23AIチャットボット研究会用発表スライド
目次:
1.意味の意味を考えた話
2.word2vec
3.単語空間からカレーを取り出す話
目次:
1.意味の意味を考えた話
2.word2vec
3.単語空間からカレーを取り出す話
※この節、独自解釈を多分に含みま
す。誤りご指摘ください。
今、医者と患者の対話を考えて、「患者が風邪である」という仮説を持っているとする。
開始状態Sからはじめて、各状態a,b,cがyesならば、患者は風邪である
(簡単のためにnoの場合は考えない)。
S(開始) a(鼻が出る) b(くしゃみが
出る...
( )
( )
これを図示すると…
a
b
c
「風邪」は今回の仮説空間の
この辺にプロットできて、
F
「風邪」ベクトルは、各症状を1,0で表
すと
F =
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
a
b
c
=
1
1
1
ここで、noの場合も考えて
もしc(熱がある)の症状がなかったら・・・
S(開始) a(鼻が出る) b(くしゃみが出る) c(熱がある)
F(風邪である)S a b c
F
yesyes yes
最終状態F´において、患者は{a∧b∧¬c}([...
( )
( )
図示すると…
a
b
c
F´
F'(花粉症)ベクトルは、
F´ =
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
a
b
c
=
1
1
0
花粉症
「風邪」と「花粉症」では、明らかに「意味」が違う。
( )F´ =
1
1
0
( )F =
1
1
1
a
b
c
F´
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
花粉症
F
これは、それぞれの概念が持っている
要素が違うからでは...
F={a, b, c} F’={a, b,¬c }
花粉症の持つ要素風邪の持つ要素
1. 「意味」とは対象が含む要素の集合だとする。
※ここで花粉症のcが0だからといって要素から外せないことに注意。
Cをはずすと明らかに F⊃F´ となってしま...
F={a, b, c} F’={a, b,¬c }
花粉症の持つ要素風邪の持つ要素
…でも、「花粉症」について考えるときに、必ずc「熱~」の概念を想起するか、といえ
ば、そんなことはない気がする・・・。
「花粉症」と「風邪」という2事象で考える...
ここで、例えば強靭なAさんは風邪で熱を出したことがなく、風邪の症状に関してa鼻とbく
しゃみしか知識を持っていない。(c熱がでるということを知らない)
一方のBさんは風邪で熱が出ることを知っている。(普通)
Aさん
風邪 = a鼻+bくしゃみ
...
a
b
c
F
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
a
b
c
F
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
風邪 = a鼻+bくしゃみ 風邪 = a鼻+bくしゃみ+c熱
Aさんにとっての風邪の「意味」
→Aさんに...
a
b
c
F
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
もしも、Aさんがc熱という概念を全く知らなかったら?
花粉症
a
b
c F
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
あるいは、風邪に関連する現象を全くなにも知らなかったら?
?
?
?
「風邪」はAさんの知識空間のどこに
プロットされるべきか 全 くわからな
い。
→まさに「意味」がわから...
1. 「意味」とは対象が含む要素の集合?
2. 「意味」とは、目的の事象に関係する事象たちのこと?
a
b
c
F
[鼻が出る]
[くしゃみが出る]
[熱がある]
風邪
風邪 = a鼻+bくしゃみ+c熱が成り立っているとして
単語F「風邪」は、
a,b,c, という3単語の線型結合
(足し算と定数倍)で書ける
(F=Aa+Bb+Cc)(ABC...
e1
e2
例えば2次元空間があったとして、e1ベクトル(1,0)とe2ベクトル(0,1)は基底ベクトル
この2次元空間のどんな位置の点でも
基底ベクトルの線型結合(足し算と定数倍)で書ける
=3×e1 + 2×e2
もしこの空間に「第3の基底ベクトル」として e3(1,1)を追加しても、すでに e1,e2があるので、e3=e1+e2
と書けてしまう。なので e3は基底ではない。
イメージ的には「最小限の要素だけで表現するなら、 e3は必要ない」
e3
e3...
目次:
1.意味の意味を考えた話
2.word2vec
3.単語空間からカレーを取り出す話
『word2vec』
・内部は2層のニューラルネットワーク
・単語をベクトル表現に変換
・”king-man+woman=queen”
”king-man+woman=queen”  の直感的イメージ
偉い
偉くない
男らしい女らしい
kingqueen
”king-man+woman=queen”  の直感的イメージ
偉い
偉くない
男らしい女らしい
king-manqueen
”king-man+woman=queen”  の直感的イメージ
偉い
偉くない
男らしい女らしい
queen king-man+woman
”king-man+woman=queen”  ということは・・・!
1文中の単語をすべて足せば、
その1文を表す単語が得られるはず!
予想) 
IN:「2次元ユークリッド空間上の、ある点 O からの距離が等しい
点の集合でできる曲線」
OUT...
1文中の単語をすべて足せば、
その1文を表す単語が得られるはず!
簡単な例で試してみる。
 「人参」+「ジャガイモ」+「たまねぎ」+「ルウ」=「カレー」
を得たい
モチベーション:
目次:
1.意味の意味を考えた話
2.word2vec
3.単語空間からカレーを取り出す話
1. カレーに関する単語データを集める
2. word2vecを学習させる(モデルの作成)
3. 単語のベクトル表現を得る
4. 各単語同士を(ベクトル同士を)足す
5. 結果のベクトルがword2vecモデル内で表す単語を得る
流れ:
 1. カレーに関する単語データを集める
http://mayo.hatenablog.com/entry/2014/07/11/111432
様の「urllib2」と「Beautiful Soup」を用いたクローラを使って、
「楽天レシピ」か...
短時間 で 本格 的 バターチキンカレー レシピ 作り方 by aoi 楽天 レシピ 楽天 市場 インフォシーク 楽天
woman 楽天 マート 会員 登録 ログイン サイト マップ カテゴリ 一覧 詳細 な 検索 検索 ワード なす きゅうり...
2. word2vecを学習させる(モデルの作成)
from gensim.models import word2vec
# Word2Vecの学習に使用する分かち書き済みのテキストファイルの準備
sentences = word2vec.Te...
3. 単語のベクトル表現を得る
word = "人参"
word = unicode(word, 'utf-8')
ninjin=model[word]
print ninjin [ 0.11350473 0.03483463 -0.00664...
3. 単語のベクトル表現を得る
word = "じゃがいも"
word = unicode(word, 'utf-8')
imo=model[word]
print imo
[-0.34090897 0.75042403 -0.4900054 ...
4. 各単語同士を(ベクトル同士を)足す
#各単語を足して平均する
w=ninjin+negi+imo+ru+kome
print w
w2=w/5
print w2
[ -1.39059171e-01 1.42438561e-01 -1.43...
xxx=model.similar_by_vector(w2)
print "".join(xxx[0][0])
print "".join(xxx[1][0])
print "".join(xxx[2][0])
print "".join(x...
import word2vec
# Training
word2vec.word2vec('wakati_text2.txt', 'wakati_text2.bin', size=10, verbose=True)
# Predictions
...
word = "人参"
word = unicode(word, 'utf-8')
ninjin=modelV[word]
print ninjin
[ 0.10228104 0.32911459 -0.25900292 0.01332185 ...
ペースト
牛
ミックス
合
ニンジン
玉ねぎ
挽き肉
バターチキンカレー
タマネギ
タイ
xxx=model.similar_by_vector(w2)
print "".join(xxx[0][0])
print "".join(xxx[1]...
・まず大前提として、違うmodelから取り出したベクトルを入力している
→意味のある結果にはならないはず
・元になるテキストデータにノイズが非常に多い
→レシピ部分だけ抽出する必要がある
・モデル作成時
sentences = word2vec...
Upcoming SlideShare
Loading in …5
×

「意味」の意味について考えた

351 views

Published on

16/07/23
AI研究会でのLT資料
「意味の意味」、「word2vecの概要」,「word2vecで単語空間からカレーを取り出す手順の仮説」
について記述。独自解釈となりますので誤りありましたらご指摘ください。

Published in: Technology
  • Be the first to comment

「意味」の意味について考えた

  1. 1. 「意味」の意味について考えた 大郷 友海 2016/07/23AIチャットボット研究会用発表スライド
  2. 2. 目次: 1.意味の意味を考えた話 2.word2vec 3.単語空間からカレーを取り出す話
  3. 3. 目次: 1.意味の意味を考えた話 2.word2vec 3.単語空間からカレーを取り出す話 ※この節、独自解釈を多分に含みま す。誤りご指摘ください。
  4. 4. 今、医者と患者の対話を考えて、「患者が風邪である」という仮説を持っているとする。 開始状態Sからはじめて、各状態a,b,cがyesならば、患者は風邪である (簡単のためにnoの場合は考えない)。 S(開始) a(鼻が出る) b(くしゃみが 出る) c(熱がある) F(風邪である) S a b c F yesyes yes 最終状態Fにおいて、患者は{a∧b∧c}([鼻が出る]かつ[くしゃみが出る]かつ[熱がある]) という状態であり、これを「風邪である」と定義できている。 → つまり、この問題での「風邪」の『意味』は、 [鼻が出てくしゃみが出て熱がある]状態、と言える。
  5. 5. ( ) ( ) これを図示すると… a b c 「風邪」は今回の仮説空間の この辺にプロットできて、 F 「風邪」ベクトルは、各症状を1,0で表 すと F = [鼻が出る] [くしゃみが出る] [熱がある] 風邪 a b c = 1 1 1
  6. 6. ここで、noの場合も考えて もしc(熱がある)の症状がなかったら・・・ S(開始) a(鼻が出る) b(くしゃみが出る) c(熱がある) F(風邪である)S a b c F yesyes yes 最終状態F´において、患者は{a∧b∧¬c}([鼻が出る]かつ[くしゃみが出る]かつ[熱がない]) という状態(花粉症)である。 F'(花粉症である) F´ no
  7. 7. ( ) ( ) 図示すると… a b c F´ F'(花粉症)ベクトルは、 F´ = [鼻が出る] [くしゃみが出る] [熱がある] 風邪 a b c = 1 1 0 花粉症
  8. 8. 「風邪」と「花粉症」では、明らかに「意味」が違う。 ( )F´ = 1 1 0 ( )F = 1 1 1 a b c F´ [鼻が出る] [くしゃみが出る] [熱がある] 風邪 花粉症 F これは、それぞれの概念が持っている 要素が違うからでは??
  9. 9. F={a, b, c} F’={a, b,¬c } 花粉症の持つ要素風邪の持つ要素 1. 「意味」とは対象が含む要素の集合だとする。 ※ここで花粉症のcが0だからといって要素から外せないことに注意。 Cをはずすと明らかに F⊃F´ となってしまう(F'がFに含まれてしまう) 「花粉症」が「風邪」に含まれる、というのは直感に反する。 そもそも次元数が違うと同じ空間上で議論できない? F={a, b, c} F’={a, b }
  10. 10. F={a, b, c} F’={a, b,¬c } 花粉症の持つ要素風邪の持つ要素 …でも、「花粉症」について考えるときに、必ずc「熱~」の概念を想起するか、といえ ば、そんなことはない気がする・・・。 「花粉症」と「風邪」という2事象で考えるから、 2事象間の差としてc(熱~)の概念が必要になる?? F’={a, b } 風邪と花粉症について 考えた場合 花粉症だけについて 考えた場合
  11. 11. ここで、例えば強靭なAさんは風邪で熱を出したことがなく、風邪の症状に関してa鼻とbく しゃみしか知識を持っていない。(c熱がでるということを知らない) 一方のBさんは風邪で熱が出ることを知っている。(普通) Aさん 風邪 = a鼻+bくしゃみ Bさん 風邪 = a鼻+bくしゃみ+c熱
  12. 12. a b c F [鼻が出る] [くしゃみが出る] [熱がある] 風邪 a b c F [鼻が出る] [くしゃみが出る] [熱がある] 風邪 風邪 = a鼻+bくしゃみ 風邪 = a鼻+bくしゃみ+c熱 Aさんにとっての風邪の「意味」 →Aさんにとっては風邪=花粉症 Bさんにとっての風邪の「意味」 花粉症 花粉症
  13. 13. a b c F [鼻が出る] [くしゃみが出る] [熱がある] 風邪 もしも、Aさんがc熱という概念を全く知らなかったら? 花粉症
  14. 14. a b c F [鼻が出る] [くしゃみが出る] [熱がある] 風邪 あるいは、風邪に関連する現象を全くなにも知らなかったら? ? ? ? 「風邪」はAさんの知識空間のどこに プロットされるべきか 全 くわからな い。 →まさに「意味」がわからない 2.「意味」とは、目的の事象(ex:風邪)に 関係する事象たちのことだと考えられる
  15. 15. 1. 「意味」とは対象が含む要素の集合? 2. 「意味」とは、目的の事象に関係する事象たちのこと?
  16. 16. a b c F [鼻が出る] [くしゃみが出る] [熱がある] 風邪 風邪 = a鼻+bくしゃみ+c熱が成り立っているとして 単語F「風邪」は、 a,b,c, という3単語の線型結合 (足し算と定数倍)で書ける (F=Aa+Bb+Cc)(ABCは定数) つまり、Fは基底ではない。 同 様 に、もしa=Dd+Ee+....なるd,e,... があれば、aも基底ではない 何を言っているかというと・・・
  17. 17. e1 e2 例えば2次元空間があったとして、e1ベクトル(1,0)とe2ベクトル(0,1)は基底ベクトル この2次元空間のどんな位置の点でも 基底ベクトルの線型結合(足し算と定数倍)で書ける =3×e1 + 2×e2
  18. 18. もしこの空間に「第3の基底ベクトル」として e3(1,1)を追加しても、すでに e1,e2があるので、e3=e1+e2 と書けてしまう。なので e3は基底ではない。 イメージ的には「最小限の要素だけで表現するなら、 e3は必要ない」 e3 e3=e1+e2 なので、赤い軸は必 要な い 先ほどの「風邪」の話に戻すと、 風邪=鼻+くしゃみ+熱 が成り立っているなら、 「風邪」という単語は右辺の3つで置き換えられるので、 「風邪」の意味は右辺3つです。 →右辺3つの意味は(・・・) +(・・・)+(・・・)を無限に繰り返していき、 最も根源的な、(それ以上分割できず、他の単語で表現することの できない)「最小単位の単語 =基底」に辿り着いた時、そこまで辿って きた単語たちを思い出しながら、「本当に意味を理解した」と言えそ う。 意味=「分割を繰り返した結果得られる最小表現たち」、    またはその時に得られるpathのようなものではないか?
  19. 19. 目次: 1.意味の意味を考えた話 2.word2vec 3.単語空間からカレーを取り出す話
  20. 20. 『word2vec』 ・内部は2層のニューラルネットワーク ・単語をベクトル表現に変換 ・”king-man+woman=queen”
  21. 21. ”king-man+woman=queen”  の直感的イメージ 偉い 偉くない 男らしい女らしい kingqueen
  22. 22. ”king-man+woman=queen”  の直感的イメージ 偉い 偉くない 男らしい女らしい king-manqueen
  23. 23. ”king-man+woman=queen”  の直感的イメージ 偉い 偉くない 男らしい女らしい queen king-man+woman
  24. 24. ”king-man+woman=queen”  ということは・・・! 1文中の単語をすべて足せば、 その1文を表す単語が得られるはず! 予想)  IN:「2次元ユークリッド空間上の、ある点 O からの距離が等しい 点の集合でできる曲線」 OUT:「円」
  25. 25. 1文中の単語をすべて足せば、 その1文を表す単語が得られるはず! 簡単な例で試してみる。  「人参」+「ジャガイモ」+「たまねぎ」+「ルウ」=「カレー」 を得たい モチベーション:
  26. 26. 目次: 1.意味の意味を考えた話 2.word2vec 3.単語空間からカレーを取り出す話
  27. 27. 1. カレーに関する単語データを集める 2. word2vecを学習させる(モデルの作成) 3. 単語のベクトル表現を得る 4. 各単語同士を(ベクトル同士を)足す 5. 結果のベクトルがword2vecモデル内で表す単語を得る 流れ:
  28. 28.  1. カレーに関する単語データを集める http://mayo.hatenablog.com/entry/2014/07/11/111432 様の「urllib2」と「Beautiful Soup」を用いたクローラを使って、 「楽天レシピ」からカレーのレシピを拝借 ・楽天レシピ内149URLから集めた文章を ・MeCabで分かち書きし(上記クローラー内部でやってくれる)、391,542単語を準備 ・STOPWORDSは句読点や!、?など
  29. 29. 短時間 で 本格 的 バターチキンカレー レシピ 作り方 by aoi 楽天 レシピ 楽天 市場 インフォシーク 楽天 woman 楽天 マート 会員 登録 ログイン サイト マップ カテゴリ 一覧 詳細 な 検索 検索 ワード なす きゅうり きゅうり の キュー ちゃん え ごま の 葉 ズッキーニ おから パウダー 万願寺 とう がら し 茄子 の 漬物 とうもろ こし ししとう 料理 人気 メニュー 定番 肉 料理 定番 魚 料理 パスタ お菓子 目的 シーン お 弁当 簡単 節約 季節 お 祭り その他 献立 豆 知識 特集 デイリシャス 現在地 楽天 レシピ top nbsp gt nbsp 人気 メニュー nbsp gt nbsp カレー nbsp gt nbsp その他 の カレー nbsp gt nbsp 短時間 で 本格 的 バターチキンカ レー 短時間 で 本格 的 バターチキンカレー レシピ 作り方 カテゴリ 人気 メニュー nbsp gt nbsp カレー nbsp gt nbsp その他 の カレー 総 つくっ た よ 数 30 件 通信 に 失敗 し まし た もう一度 スタンプ し て くだ さい 0 簡単 だっ た 0 節約 でき た よ 0 ログイン し て スタンプ を 記録 しよ う ♪ お気に入り に 追加 お気に入 り から 削除 つくっ た よ レポート を 投稿 料理 レシピ 材 料 4 ~ 5 人 分 鶏 むね 肉 1 枚 玉ねぎ 1 個 バター マーガリン 大さじ 2 にんにく すり おろし 大さじ 1 しょうが すり おろし 大さじ 1 トマト 缶 1 缶 400 g ヨーグ ルト 200 cc カレー ルー 4 ブロック 約 30 分 300 円 前後 お 肉 も 柔らかく 短時間 と 思え ない 仕上がり ♪ aoi 作り方 1 鶏 むね 肉 は 一口 大 に 切っ て おく 時間 が あれ ば ヨーグルト に 漬け て おく 漬ける 程 柔らか に ♪ 2 たまねぎ は スライス し て おく お 好み で みじん切り で も ♪ 3 鍋 に バター にんにく しょうが を 入れ て から 火 を 付け 香り が 立っ て き たら たまねぎ を 炒める 4 3 に トマト 缶 1 の ヨーグルト 鶏肉 を 加え 混ぜ ながら 温める 5 4 に カレー ルー を 加え 全体 を 混ぜ ながら とろみ が 付い たら 出来上がり ♪ きっかけ すぐ 本格 的 な カレー が 食べ たく なっ て おいしく なる コツ 焦げ ない よう に する くらい 特に こ つ 無し です 登録 さ れ て いる カテゴリ 料理 人気 メニュー gt カレー gt チキン カレー レシピ id nbsp 1760002326 公開 日 2011 - 06 - 11 08 35 10 0 tweet 楽天 ブログ 他 の ブログ 楽天 ブログ アメブロ 他 の ブログ お気に入り に 追加 お気に入り から 削除 メール で 送る 携帯 に メール を 送る 印刷 する つくっ た よ スタンプ おいしかっ た 0 スタンプ し た ユーザー は まだ い ませ ん 簡単 だっ た 0 スタンプ し た ユー ザー は まだ い ませ ん 節約 でき た よ 0 スタンプ し た ユーザー は まだ い ませ ん つくっ た よ レポート
  30. 30. 2. word2vecを学習させる(モデルの作成) from gensim.models import word2vec # Word2Vecの学習に使用する分かち書き済みのテキストファイルの準備 sentences = word2vec.Text8Corpus('wakati_text2.txt') # Word2Vecのインスタンス作成 # sentences : 対象となる分かち書きされているテキスト # size : 出力するベクトルの次元数 # min_count : この数値よりも登場回数が少ない単語は無視する # window : 一つの単語に対してこの数値分だけ前後をチェックする model = word2vec.Word2Vec(sentences, size=100, min_count=20, window=15) # 学習結果を出力する model.save("wakati_text2.model")
  31. 31. 3. 単語のベクトル表現を得る word = "人参" word = unicode(word, 'utf-8') ninjin=model[word] print ninjin [ 0.11350473 0.03483463 -0.00664003 0.34039021 0.49891993 0.2769573 -0.2774184 -0.80663556 -0.29550153 -0.47119963 -0.30697617 -0.50714904 -0.61458826 0.455641 -0.33676258 -0.5323137 -0.11163944 0.57218939 -0.40401369 0.18265419 0.1929924 0.94059855 0.21619724 0.06706252 -0.41123894 0.43456393 -0.57679689 0.56900805 -0.49825066 0.60447329 0.16599748 -0.35798407 -0.37120613 0.34000644 -0.36759028 -0.38095915 -0.06570927 -0.16314153 0.03843981 0.08576056 -0.3827287 -0.15332416 0.39147985 -0.76278502 0.35729161 0.26847285 -0.11163699 -0.5670557 0.30839929 -0.39032069 0.47754303 0.29531857 -0.70691139 -0.22010395 -0.11570805 -0.42690939 -0.16110337 -0.49411961 -0.43673965 0.42424011 -0.16703272 0.10155551 -0.30881312 -0.11464796 -0.01941584 0.21347165 -0.36706221 -0.41572708 -0.05863477 -0.18544658 -0.21382263 -0.02315612 0.64342564 -0.44855973 -0.89039117 -0.82736599 0.08430497 0.18818945 0.22240941 0.97119516 0.34081832 0.17918387 -0.1679967 0.56833375 -0.32424042 -0.44994912 0.02840057 0.03798302 0.07098514 0.0581212 -0.48216167 -0.10647583 -0.31093982 0.08041842 0.32195088 0.55706102 0.23876897 -0.09254365 0.56068707 -0.20625199]
  32. 32. 3. 単語のベクトル表現を得る word = "じゃがいも" word = unicode(word, 'utf-8') imo=model[word] print imo [-0.34090897 0.75042403 -0.4900054 0.85555971 -0.7421847 0.27080142 -0.12563844 -0.08152637 -0.10992096 -1.0778178 0.77104229 -0.35889432 -0.65508479 0.45907792 0.12299865 -0.42838237 -0.57290512 0.77279353 -0.61573631 0.25082913 0.6489042 1.49097204 -0.31953606 0.16497806 0.182382 0.30044487 -0.95103467 0.98816562 -0.64320236 0.74460459 0.34312129 -0.01033 0.0589436 0.43194529 0.04033744 -0.46821401 0.74194562 0.20230819 -0.47285736 -0.19763392 0.28989622 0.67166984 0.39918777 -0.3495802 0.60476142 0.67526901 0.48506588 -0.36343175 0.3462244 0.3564114 1.59435654 0.05224998 0.58558577 -0.33925888 0.43684268 -0.94496948 -0.42314976 -0.37689131 -0.37026039 -0.02472604 0.12989181 0.11206415 -0.88973325 0.46388823 0.06230455 -0.65743744 0.47629163 -0.24233903 1.00159514 -0.73306483 -0.96128273 0.62326074 0.15424265 -0.83668143 -1.29993165 -1.06208968 -0.4052549 0.84023553 -0.41941851 1.18036866 -0.36723191 0.85534072 -0.4163883 0.38277653 -1.08248067 0.46047959 0.98338056 -0.01164202 0.45970768 -0.18157887 -0.25230893 0.20052373 0.64200622 -0.58509743 -0.123288 0.55629569 0.73742402 0.24136677 0.08864683 -0.28883395]
  33. 33. 4. 各単語同士を(ベクトル同士を)足す #各単語を足して平均する w=ninjin+negi+imo+ru+kome print w w2=w/5 print w2 [ -1.39059171e-01 1.42438561e-01 -1.43426448e-01 4.36877757e-01 1.12519898e-02 2.25441799e-01 -1.65789783e-01 -4.33115184e-01 -1.72885314e-01 -5.90600669e-01 1.53444871e-01 -2.82691449e-01 -5.66156566e-01 4.05822396e-01 -1.01061754e-01 -5.88172615e-01 -2.43960112e-01 5.11177480e-01 -4.57136065e-01 1.70458883e-01 4.34594840e-01 9.78374779e-01 7.25369342e-03 6.24478385e-02 -1.71777070e-01 2.59764344e-01 -5.55754125e-01 6.00934267e-01 -5.49948812e-01 6.30486190e-01 1.86703831e-01 -1.49121761e-01 -2.45834738e-01 2.77302831e-01 -2.44258076e-01 -4.55402464e-01 1.99601695e-01 -9.08317119e-02 -1.64709166e-01 2.92611402e-02 -2.15280011e-01 1.94538832e-01 3.64702970e-01 -4.11466479e-01 4.65073168e-01 4.09519881e-01 9.86564308e-02 -3.78260314e-01 2.90743321e-01 -2.90815718e-02 7.13712215e-01 1.33029252e-01 -2.21885979e-01 -2.08010525e-01 -5.29190861e-02 -5.28453827e-01 -2.87298948e-01 -4.46792036e-01 -3.91369849e-01 2.55453289e-01 -1.69721954e-02 1.17109567e-01 -4.31591868e-01 1.26005799e-01 -5.77136455e-03 5.25871292e-05 -1.32102519e-01 -2.50031471e-01 2.27886349e-01 -3.08543444e-01 -4.42048311e-01 2.08465248e-01 3.66052181e-01 -4.95820552e-01 -9.05780792e-01 -6.90645933e-01 -1.16963843e-02 3.63969326e-01 -1.30357349e-03 7.80663848e-01 7.54368901e-02 3.71953547e-01 -2.61938184e-01 4.05210078e-01 -5.78723013e-01 -1.02282137e-01 3.43775958e-01 1.23383261e-01 2.35161856e-01 2.88697332e-03 -4.21212584e-01 -6.30645975e-02 3.01301125e-02 -1.39428958e-01 1.57869041e-01 5.32285511e-01 2.78002292e-01 4.32008095e-02 3.79383057e-01 -1.68690205e-01] ※追記 平均する処理は意味が無いようです
  34. 34. xxx=model.similar_by_vector(w2) print "".join(xxx[0][0]) print "".join(xxx[1][0]) print "".join(xxx[2][0]) print "".join(xxx[3][0]) print "".join(xxx[4][0]) print "".join(xxx[5][0]) print "".join(xxx[6][0]) print "".join(xxx[7][0]) print "".join(xxx[8][0]) print "".join(xxx[9][0]) たまねぎ 玉ねぎ キャベツ にんじん バラ ピーマン 冷凍 ひき肉 薄切り 市販 5. 結果のベクトルがword2vecモデル内で表す単語を得る あれ・・・ カレーになってない
  35. 35. import word2vec # Training word2vec.word2vec('wakati_text2.txt', 'wakati_text2.bin', size=10, verbose=True) # Predictions modelV = word2vec.load('wakati_text2.bin') 苦し紛れに別のword2vecを使ってベクトルだけ取り出す。 こちらのword2vecについては https://pypi.python.org/pypi/word2vec 参照 ・size=10(10次元)に変更 ・学習させるデータは同じ
  36. 36. word = "人参" word = unicode(word, 'utf-8') ninjin=modelV[word] print ninjin [ 0.10228104 0.32911459 -0.25900292 0.01332185 0.64234483 0.01699783 -0.18824799 -0.45640993 0.16949539 -0.35859495] 3. 単語のベクトル表現を得る 以降も先ほどと同様に計算
  37. 37. ペースト 牛 ミックス 合 ニンジン 玉ねぎ 挽き肉 バターチキンカレー タマネギ タイ xxx=model.similar_by_vector(w2) print "".join(xxx[0][0]) print "".join(xxx[1][0]) print "".join(xxx[2][0]) print "".join(xxx[3][0]) print "".join(xxx[4][0]) print "".join(xxx[5][0]) print "".join(xxx[6][0]) print "".join(xxx[7][0]) print "".join(xxx[8][0]) print "".join(xxx[9][0]) カレーに少し近づいたようだが・・・ 結果 ただし、上記はgensimで学習したmodelに、gensimではないword2vec(https://pypi.python. org/pypi/word2vec)で学習したmodelから取り出したベクトルを 入力した結果であり、意味のある結果ではない。 単語のベクトルはそのベクトルを学習した空間でしか意味を持たないはず。
  38. 38. ・まず大前提として、違うmodelから取り出したベクトルを入力している →意味のある結果にはならないはず ・元になるテキストデータにノイズが非常に多い →レシピ部分だけ抽出する必要がある ・モデル作成時 sentences = word2vec.Text8Corpus('wakati_text2.txt')  の役割の理解不足 ・次元数はどんな値が適切?(200〜500をよく見かける) 今後の課題

×