Microsoft Research@シアトルでのインターンから帰ってきました。コネ・社会経験ナシの情報系大学院生が、腕一本で「世界で一番アツい会社」に就職するまでの記録
13 10月
mixiのほうにも書いたけど、昨日はRuby作者のまつもとゆきひろさんの講演
中京大学公開講座「世界に広がるRuby」
http://www.rubyist.net/~matz/20070917.html#p01
を聞きに行ってきました。研究にWeb開発に、Rubyヘビーユーザーの自分としてはこれは見逃せないイベントでした。
Matzさんの講演の中でも、特に自分の興味を惹いたのが、”Love/Hate Ratio”というお話です。(もちろん、他の話も全て興味深かったのだけれども。)
これは、「Rubyがいかに愛されている言語か」というものを、ある意味定量的に示した指標で、簡単に言うと、Googleで「”i love ruby”」というクエリで検索したときのヒット数と、「”i hate ruby”」というクエリで検索したときのヒット数との比です。だからLove/Hate Ratio。この”ruby”のところを他の言語の名前に変えれば、その言語のLove/Hate Ratioが求まります。この値が大きいほど、その言語は愛されている、というわけ。で、Rubyはダントツだと。
「愛されてる度」の正確さはともかく、インパクトあって実に分かり易い指標ですよね。で、調べてみると、Matzさんの
[Ruby] Ruby is the “Most Loved” programming language
http://www.rubyist.net/~matz/20050427.html#p01
のエントリから派生して、独自にこのLove/Hate Ratioを求めている記事がいくつか見つかります。
HOW DO YOU LIKE SILICON VALLEY? | まつもとゆきひろさんに会った
http://kaeruouji.jugem.cc/?eid=39
でもこれって、自然言語処理で言うところの評判分析の、すんごい簡略版じゃないですか。今の研究の最先端から言えば、Hearst 1992が”X such as Y”を使って「XはYの上位語である」という関係を抽出したぐらいシンプルな手法です。(分野外の人ごめんなさい。詳細はこのへんを参照→ Automatic acquisition of hyponyms from large text corpora)
ということで、これだけでは「Rubyが愛されている」ことの調査には甘すぎるでしょう、と。これはちょっと改良してみるしかないですね。
よく考えたら、この単純な手法、問題があって、まず一つ目が曖昧性の問題。”i love ruby”というクエリでは、宝石のルビーを愛する人のブログもヒットするかもしれない。その問題はMatzさんの引用元も認識しているらしく、実際には「”i love ruby” programming」というクエリで求めてるそうです。でも、たぶん「”i love ruby” language」でヒットしたページも、「プログラミング言語としてのRuby」を愛する人のページ、としてカウントしていいはず。
もう一つの問題は、他の言い回し。”I love Ruby”は実に分かり易い例ですけど、例えば”I like Ruby”って言ってるのも、「愛してる度」は低いけどカウントしてもいいのでは?他には”I don’t like Ruby”は?などなど、考えられるわけです。
ということで、これらの問題点をふまえて、実際にやってみた。
おそらくこれまでで最も信頼性のあるLove/Hate Ratioです。
以下の8種類のクエリを実際にGoogleで調べて、そのヒット数をカウントします。”x”のところはもちろん言語名。で、最後の計算方法のところだけれど、”i like x”と”i don’t like x”については「愛してる」「嫌い」度がそれぞれ”i love x”と”i hate x”に比べて低いとみなして、重みを半分にします。つまり、”i like x”2回分で”i love x”1回分相当ということです。
1a. 「”i love x” programming」1b. 「”i love x” language」
2a. 「”i like x” programming」2b.「”i like x” language」
3a. 「”i don’t like x” programming」3b.「”i don’t like x” language」
4a. 「”i hate x” programming」4b.「”i hate x” language」
対象言語は以下のとおり。
Ruby
Python
Smalltalk
Perl
PHP
Lisp
Java
C
JavaScript
結果はこんな感じ。Ratio順に並び替えてます。
| 言語 | 1a | 1b | 2a | 2b | 3a | 3b | 4a | 4b | Love/Hate Ratio |
| Ruby | 10800 | 11700 | 914 | 9850 | 3140 | 3970 | 150 | 173 | 7.189 |
| Lisp | 758 | 528 | 7010 | 5650 | 2620 | 8 | 216 | 149 | 4.536 |
| Python | 9420 | 9860 | 9340 | 11600 | 6820 | 5430 | 316 | 388 | 4.356 |
| Smalltalk | 191 | 200 | 2060 | 3020 | 8 | 6 | 116 | 647 | 3.806 |
| Perl | 14500 | 705 | 15600 | 916 | 7060 | 4930 | 801 | 1410 | 2.859 |
| JavaScript | 949 | 1170 | 5410 | 4280 | 1890 | 1480 | 1300 | 941 | 1.773 |
| Java | 813 | 23000 | 955 | 20800 | 13900 | 506 | 800 | 13600 | 1.605 |
| C | 6520 | 6550 | 795 | 651 | 14900 | 12500 | 2450 | 1850 | 0.766 |
| PHP | 852 | 759 | 668 | 652 | 4260 | 5170 | 1110 | 1180 | 0.324 |
ということでやはり断トツです。今回しっかりと計算方法を見直したこともあって、Matzさんのオリジナル記事にあるような100以上なんていうとんでもない数字も出てないですし、かなり信頼性の高い値が出てるのでは。RubyはPerlの約3倍、PHPの約20倍「愛されている」計算です。
ほかにも”x is a good language”とか、”x sucks”とか、フレーズはいくつも考えられるわけですが、本格的にやると素性選びなりスコア付けなり機械学習なりが必要になってくるのでこれ以上は評判分析の専門家に任せましょうか。(誰かやるのか...!?
ちなみに”I like C” としたときに”I like ℃-ute”がたくさん出るのには参った(笑 こういう問題に対処するために自然言語処理の研究者は日々格闘しているわけですね。最初は、Matzさんの言うように「お遊び」的問題でも、しっかりとやろうとすると研究レベルになるという点で良い例題だと思ったので紹介しました。
ちなみに、言語どうしの具体的な順位についてのコメントは差し控えておきますね...。
Leave a reply