Quantcast
Channel: クックパッド開発者ブログ
Viewing all articles
Browse latest Browse all 726

義理といえば?クックパッドのレシピをword2vecで料理してみた

$
0
0

会員事業部の有賀 (@chezou) です。

クックパッドは、先日学術機関向けにレシピと献立のデータを公開しました。 研究者の方々にクックパッドのレシピ・献立を使っていただくことで、料理に関する研究の発展に貢献できればと思いデータ公開に至りました。

今回は、その中でもクックパッドのレシピデータを使った分析事例として、word2vec を使ったテキスト分析を行ったのでご紹介します。

なお、 3 / 7 (土) に日経新聞電子版さんと共催で、このデータを含む各種データを使った学生向けデータハッカソンを開催します。締め切りは 2 / 27 (金) と間近ですが、興味がある方はぜひご参加ください。

word2vec とは

word2vec は単語を意味を含んだベクトルで表現できるようにするツールです。Tomas Mikolov らが提案し、その実装を公開しています。

CBOW (Continuous Bag-of-Words) や skip-gram といった Neural Network のモデルを用いて単語のベクトル表現を学習することで、異なる単語間の類似度を計算できるのはもちろん、意味的な足し算引き算ができるようになったという点で画期的だと言われています。

日本では、形態素解析器MeCabで有名な工藤拓さんの解説で広まり、あんちべさんが記事にしたことで一躍有名になりました。また、オライリーからもとてもわかりやすい解説書が出ています。薄い本ですのでこちらを読むと良いと思います。

義理といえば?

2月はバレンタインデーがありました。バレンタインデーは、クックパッドの1年の中で最もアクセスが集中する日です。

その主役の「チョコ」に類似する単語を見てみましょう。

順位単語類似度
1チョコレート 0.938
2ガナッシュ 0.757
3マシュマロ 0.746
4ビターチョコ 0.744
5クランチ 0.730

f:id:chezou:20150224110143p:plain

グラフは「チョコ」に類似する語のベクトルを主成分分析で可視化したものです。

マシュマロのように、バレンタインに送られるお菓子として出てくるものや、生チョコを作るときに使うガナッシュのように更に別のチョコを作るためのものも出てきています。

では、「義理チョコ」といえばなんでしょうか?

順位 フレーズ 類似度
1 友_チョコ 0.781
2 バレンタイン 0.718
3 バレンタインデー 0.688
4 本命_チョコ 0.682
5 本命 0.676

f:id:chezou:20150224110435p:plain

義理チョコといえば、どうやら友チョコが多いようです。 作る量としては友チョコの方が多いそうなので、やはり需要が多いのでしょうね。

義理チョコではバレンタインに関連したものばかりでしたが、試しに「義理」だけだとどういう関連性が見られるか調べてみましょう。

順位 フレーズ 類似度
1 0.670
2料理_上手_な 0.667
3義母 0.651
4お母さん 0.634
5お母様 0.623

f:id:chezou:20150224110503p:plain

そう、クックパッドの世界で「義理」だけだと、義理のお姉さんや義母といった方々がよく登場するようです。

バレンタインの要素はどこへいってしまったのでしょうか? word2vec の面白いところは、単語をベクトルで表現することで意味的に足したり引いたりできることでしたね。それでは、「義理」から「母」を引いてみましょう。

順位単語類似度
1デコペンレシピ 0.295
2マンディアン 0.291
3チョコカップケーキ 0.287
4小枝 0.286
5本命 0.281

このように、バレンタインっぽい単語が増えてきました。

擬態語の獲得の可能性

レシピの中には、「アツアツ」のように擬態語が良く出てきます。 このような擬態語は、人間なら似たイメージを持つ別の語を容易に思い浮かべることができます。しかし、機械がそれをするのは一苦労でした。

では、 word2vec で似た擬態語を捉えることはできるのでしょうか?「アツアツ」に類似した単語を見てみましょう。

順位単語類似度
1熱々 0.961
2あつあつ 0.946
3あったかい 0.745
4ホカホカ 0.712
5ハフハフ 0.685
6温かい 0.682
7アッツ 0.673
8あたたかい 0.647
9ふうふう 0.645
10フウフウ 0.631

f:id:chezou:20150224110527p:plain

word2vec を使うことで、「アツアツ」のような擬態語からも似たような文脈で用いられる擬態語が獲得できるようです。似た擬態語を持つレシピを集めることで、冬に食べたい体があたたまるレシピ、なんてものも見つけやすくできるかもしれませんね。

足し算、引き算

私は名古屋出身なのですが、名古屋といえば赤味噌です。一家に一本チューブ型味噌を持っているのは本当です。

まずは、赤味噌の類似フレーズを見てみます。

順位フレーズ類似度
1八丁_味噌 0.824
2味噌 0.809
3赤_みそ 0.805
4八_丁_味噌 0.767
5信州_味噌 0.741

f:id:chezou:20150224110548p:plain

なるほど、名古屋で赤味噌といえば八丁味噌ですね。納得です。

では、1世帯あたりの味噌の消費量日本一の長野はどうでしょうか? 赤味噌 - 名古屋 + 長野をみてみましょう

順位フレーズ類似度
1信州 0.509
2味噌 0.503
3麦_味噌 0.503
4信州_味噌 0.499
5赤味噌_白味噌 0.481

おお!確かに長野といえば信州味噌ですね。見事に引き算ができているのがわかります。

でも、これはたまたまなのではないでしょうか?それでは、赤味噌 - 名古屋 + 京都も見てみましょう。

順位フレーズ類似度
1白味噌 0.567
2麦_味噌 0.547
3顆粒_だし 0.507
4だし汁 0.496
5出し汁 0.488

確かに、京都では白味噌が使われています。 このように、クックパッドでは「名古屋」や「京都」というと「味噌」の意味合いが含まれているようです。

word2vec の可能性

word2vec は単語をベクトルとして表現するところが新しいと書きましたが、クックパッドで使うとしたら辞書の整備 (同義語・類義語の拡張) に使えるのではないか、と考えています。

ですが、現状の word2vec を単純に使う場合、それが本当に同義語なのか、辞書に追加して悪影響が出ないのか、という検証が必要になってくるため方法を模索しています。

また、来月開催される言語処理学会の年次大会でも、単語のベクトル表現を用いた同義語獲得の発表があるようですので、様々な研究成果を応用していきたいと思います。

なお、今回のグラフは、前述のオライリー本の付録の可視化ツールiPython notebook で使えるようにしたものを利用しました。(notebook)

iPython notebook は試行錯誤的にグラフを描画するのに最適ですし、 @ryot_a_raiさんに立てていただいた社内 nbviewerで、手軽に可視化したグラフを共有することができました。

参考文献


Viewing all articles
Browse latest Browse all 726

Trending Articles