読者です 読者をやめる 読者になる 読者になる

Python - Perl + Java = ? はてなブログのデータとパソコン工房のPCを使って「word2vec」で遊んでみた

はてな Web・IT PR-特別企画



(※この記事は株式会社ユニットコムによるPR記事です)

―― BTOパソコンのショップ/サイトで有名な「パソコン工房」さんから、以下のような依頼が来ました。

データサイエンティスト向けに、統計処理用に使えるパソコンをいろいろと考えています。なので、何か面白い処理に使って、PR記事にしてほしいんです!

【パソコン工房公式サイト】BTOパソコン(PC)の通販 【パソコン工房公式サイト】BTOパソコン(PC)の通販

―― ということで、はてなエンジニアのskozawaさんにご協力いただこうと思います。

skozawa はてな アプリケーションエンジニアのid:skozawaです。以前は自然言語処理の研究をしていました。

―― skozawaさんは現在、Scalaを使ってサーバー管理ツール「mackerel」の開発をされています。お忙しい中、ありがとうございます。「mackerel」は今春リリース予定! ちなみに日本語で「鯖(サバ)」という意味です!(露骨な宣伝)

【ベータテスター募集中】mackerel: 新しいアプリケーションパフォーマンスマネジメント

skozawa ありがとうございます(笑)

―― 何か大きめの面白い処理をしてみたいので、このくらいのスペックのPCを貸してください、とパソコン工房さんにお伝えしたいのですが、何か良いアイデアはありますか?

skozawa うーん。そうだ、最近「word2vec」というのが少し流行っていて面白いので、それを使ってみませんか。

word2vec - Tool for computing continuous distributed representations of words. - Google Project Hosting

■ 言葉をベクトルに! word2vecのポイント

―― word2vec! たしかにここのところ、いろいろなブログで見かけます。そもそもどういうものなんですか?

skozawa おおまかに説明すると、word2vecは「単語の集合をベクトルにする」というツールです。「似た文脈に出現する単語は似た意味を持つ」という理屈を利用して、単語をベクトルにする際にいい感じに計算してくれるみたいですね。

―― 公式ページのはてなブックマークを見てみると、2013年8月には最初のブックマークが付いていますね。単語をベクトルに、というアプローチはこれまでもあったんですか?

skozawa 「ベクトルにする」というのはこれまでもありました。word2vecでは、ベクトルにした際、言葉のベクトルを足したり引いたりができるようになったんです。

―― 言葉を足したり引いたり……! 面白そうです。

skozawa 以下の資料でもその辺りが紹介されています。

―― 「意味の直感的な性質が、何故かベクトル空間中に埋め込まれている」(51ページ目)ってヤバいですね……。「意味の構造はもっと複雑で、入念に準備された言語資源と規則がないと表現できないと思っていた」(48ページ目)……なるほど。それがword2vecではサクッとできてしまっていて衝撃、ということですね。では、これでいってみましょう! しかし、実験してみるためには、コーパス(もととなる自然言語のデータ)が必要ですよね。どうしましょうか。

skozawa はてなブログで公開されている文章データを使うというのはどうでしょう。無作為に10GB分くらい抽出して使うと、規模的にも面白いかもしれません。統計処理してしまうので、個人が特定されるわけでもありませんし。

―― 良さそう! 企画内容とコーパス10GB分ということをパソコン工房さんにお伝えして、良い感じのスペックのPCをお借りしようと思います!

■ パソコン開封の儀

(数日後)

―― パソコン工房さんからPCが届きました!

skozawa やったー。

―― word2vecで10GBのデータを扱いたいとお伝えしたところ、今回の企画用に、パソコン工房の担当者さんもword2vecを試して、パソコンとスペック構成を算出してくれました。その結果、最高スペックという感じではなくて「このくらいがちょうどいいスペックだと思います!」というマシンがやってきました。さっそく開封の儀!

skozawa かっこいいですね~。

―― ちなみにスペックは以下の通り。「高額・高性能なワークステーションで速さを追及するのではなく、一般的なパソコンの構成でコストパフォーマンスの良い構成を」という観点で選んでいただきました。

基本スペック
  • CPU:Intel Core i7-4770
  • マザー:Intel H87 チップセット
  • メモリ:DDR3-1600 8GB *2 枚、計16GB
  • HDD:東芝製 500GB [500GB SATA600 7200rpm]

skozawa いろいろ試してみようと思います。

―― ちなみにパソコン工房さんのサイトでは、今回のような統計処理向けのパソコンをまとめたページも公開しています! 皆様ぜひご覧ください~。

統計処理に最適パソコンのことならパソコン工房通販

■ MeCabで分かち書きし、word2vecへ

(さらに数日後)

skozawa なかなか面白い結果が出ましたよ~。

―― おつかれさまです!

skozawa インストールして実際に処理をするのは、そんなに難しくありませんでした。やっぱり良い感じに大量の文章データを用意するのが一番大変ですね。

―― たしかに。大まかにやったことと結果を教えていただけますか。

skozawa はい。まず、公開状態のはてなブログのデータから10GB分をもってきて、MeCab(編注:オープンソースの形態素解析エンジン)で分かち書きにしました。

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

―― 品詞ごとに分解できるアレですね。和布蕪(めかぶ)おいしいです。

skozawa はてなキーワードも辞書に追加して、キーワード単位でデータが取れるようにしました。その後、word2vecで処理しました。

■ 似ている単語を抽出してみる

skozawa 最初にやったのは「似ている単語を抽出」です。最も似ているペアを出してみました。

  • たこ焼き お好み焼き
  • ペットボトル 水筒
  • 白組 紅組
  • ニューヨーク ロンドン
  • 矢部浩之 岡村隆史
  • 名古屋弁 北海道弁
  • 目黒線 池上線
  • 椿屋珈琲店 つばめグリル
  • エッグスンシングス はらドーナッツ
  • 大承認 はてラボ
  • ルパン三世 名探偵コナン
  • しまねっこ バリィさん
  • 秀丸 サクラエディタ
  • GIGAZINE ギズモード・ジャパン
  • WhatsApp Snapchat
  • シネマライズ ユーロスペース
  • 境界の彼方 たまこまーけっと
  • きんいろモザイク ゆゆ式
  • ラリー・ペイジ エリック・シュミット
  • ルイージ マリオ
  • 大丈夫だ、問題ない そんな装備で大丈夫か?
  • とびひざげり はどうだん
  • とよ田みのる 田丸浩史
  • 銅メダル 銀メダル
  • ダンス・ダンス・ダンス 羊をめぐる冒険
  • ハービー・ハンコック マイルス・デイヴィス
  • ジャイアン スネオ

―― 似てる、たしかに似てる。

skozawa はてなっぽいところではこんなものも。

  • 怒られそうなことを敢えて言う 何の報告かわかりませんが

―― あっ、はてなハイクでおなじみのキーワード!

怒られそうなことを敢えて言う - はてなハイク
何の報告かわかりませんが - はてなハイク

skozawa もちろん、うまくいかなかったものもあります。あと「格ゲー 格闘ゲーム」みたいに、単に表記違いのものが出たりもしました。でもおおむね、良い精度だなと思いました。

―― もともとがブログという文脈のある文章であることと、はてなキーワードの辞書があるから、より精度が上がっているというのもあるのかもしれないですね。これだけでも、関連ワードの表示として使えそう。

skozawa 似ている単語の上位5つにすると、より良い感じです。

  • 日本: アメリカ, 大国, 中国, 国家, アジア
  • 東京: 大阪, 京都, 神戸, 金沢, 名古屋
  • 京都: 大阪, 神戸, 金沢, 奈良, 東京
  • 宇宙: 地球, 惑星, 太陽系, 銀河, 銀河系
  • テレビ: TV, 番組, ニュース番組, ワイドショー, ラジオ
  • カメラ: 一眼レフ, デジカメ, デジタルカメラ, コンデジ, ビデオカメラ
  • AKB: NMB, HKT, SKE, 板野友美, 前田敦子

―― 分かりやすい。

skozawa ほかにもこんな感じです。

  • Perl: Python, Java, OCaml, CoffeeScript, Clojure
  • Ruby: Java, Rails, Python, Perl, JRuby
  • Java: Python, Perl, Scala, JavaScript, Erlang
  • JavaScript: Javascript, Ajax, ActionScript, CSS, jQuery
  • Scala: Java, Python, Perl, Clojure, OCaml
  • ssh: sshd, passwd, scp, rsa, sftp
  • nginx: apache, httpd, lighttpd, conf, monit
  • rsync: scp, supervisord, gedit, jenkins, uwsgi
  • curl: wget, unzip, npmjs, jgem
  • tar: gz, zxvf, xvfz, xvzf, gperf

■ 「日本 - 東京 + ロンドン」「北海道 - 雪 + 海」「cpan - perl + ruby」

skozawa さらに、足したり引いたりもしてみました。

―― 単語をベクトル空間で表現しているから「AにとってのBは、Cにとっての何か」が分かるということですね。

skozawa そうです。その場合「B - A + C = ?」とすると表現できます。以下のような感じです。

  • 日本 - 東京 + ロンドン = イギリス, アメリカ, 強国, ヨーロッパ, フランス
  • 首相 - 日本 + アメリカ = 外相, ブッシュ大統領, 大統領, 上院議員, 国防長官
  • 北海道 - 雪 + 海 = 沖縄, 種子島, 久米島, 八丈島, むかわ町
  • 寒い - 北海道 + 沖縄 = 暑い, 涼しい, 暑かった, 暖かい, 蒸し暑い
  • 花見 - 春 + 秋 = 紅葉狩り, お花見, 海水浴, 見物, 行楽
  • スキー - 冬 + 夏 = バレー, スノボ, スノボー, スノーボード, 水泳
  • AKB - 東京 + 大阪 = NMB, HKT, SKE, オキドキ, 選抜メンバー
  • 鮭 - いくら + キャビア = 車麩, テリーヌ, ソーセージ, ゴルゴンゾーラ, 阿波尾鶏
  • 甲子園 - 野球 + サッカー = 開幕戦, 神宮球場, ナビスコカップ, 全国大会, リーグ戦
  • ドッグフード - 犬 + 猫 = キャットフード, アボダーム, ワンちゃん, アサイーボール, トイプードル
  • Suica - 関東 + 関西 = ICOCA, PASMO, 定期券, SUICA, PiTaPa

―― なるほど。だいたい良さそうな一方で、2番目以降が微妙なものも。「鮭 - いくら + キャビア」なんかは全体的にうまくいっていない感じ。チョウザメが出てきてほしかった……! でも面白いですねえ。

skozawa 面白いですよね。言葉の関係性が見えてくる。以下のようなものも。

  • Python - Perl + Java = Scala, Erlang, JavaScript, JRuby
  • cpan - perl + ruby = gem, bundler, rmagick, imagemagick, rbenv
  • デザイナー - Illustrator + Java = プログラマ, エンジニア, プログラマー, ブランド, バイヤー
  • Android - Nexus + iPhone = iPad, iOS, アプリ, iphone, 対応

―― PythonからPerlを引いてJavaを足すとScala! 「cpan - perl + ruby」でちゃんとgemが出てきてたり、面白いなあ。

■ パソコン工房さん側でのハードウェア検証結果も

skozawa 今回は以上です。

―― 実際にやってみて、いかがでしたか?

skozawa 精度的にはもう少し良くなるとかなり実用性が出てくるように思いました。何に活用するかという点では、はてななら「はてなキーワード」「はてなブログ」「はてなブックマーク」などに使えるかもなあ、という印象を持ちましたね。

―― なるほど。パソコン工房さんのPCはいかがでしたでしょう。

skozawa ちょうど良いくらいのスペックのマシンをご用意いただけたと感じます。さすがですね。

―― パソコン工房さんというと、ゲーム用のハイスペックPCのイメージもあったのですが、株式投資や3DCGクリエイター向けなど用途提案型PCも展開されており、今後は統計処理用のプロ向けPCもどんどん企画されていくそうです。今回、マシンの選定にあたっては、パソコン工房さん側でもさまざまな構成で検証していただきました。検証内容については、以下のパソコン工房さん側のページにまとめられています。ありがとうございました!

パソコン実験工房 : パソコン工房
はてな連動企画 「word2vecを試そう」 : パソコン工房

―― 次はもっと大規模な統計処理を、さらにハイスペックなマシンをお借りしてやるのも楽しそうですね! 読者の皆様にはプレゼントのお知らせです!

■ LaCieの2TB外付けHDDを2名様にプレゼント!

※キャンペーンは終了しました。たくさんのご応募、ありがとうございました。

2TBの外付けHDD「LaCie minimus TV & PC」を抽選で2名様にプレゼントします。応募方法は、この記事をTwitter連携した上ではてなブックマークに追加するだけ。詳しくは、下の応募要項をご覧ください。

LaCie minimus TV & PC

応募要項
  • 応募期間
    • 2014年4月22日(火)から2014年5月6日(火・休)24時まで
  • 賞品と当選人数
    • LaCie minimus TV & PC LCH-MND020U3(USB 3.0対応、容量2TB):2名様
  • 応募方法
    • Twitter連携した上で、この記事をはてなブックマークに追加
    • ※プライベートモードでご利用の方は対象となりません
  • 当選発表
    • 厳正なる抽選の後、はてなブックマーク開発ブログで、当選者様を発表させていただきます
  • 賞品発送
    • 当選発表後、はてなよりメールをお送りし、送付先情報(送付先住所、受取人氏名、電話番号)をお聞きします
    • ※プレゼントの発送は日本国内に限らせていただきます

[PR]企画・制作:はてな

文: 深山こよみ