絵文字を「語」として処理する難しさ~「ビール」と「飲み会」見分ける技術

バイドゥ「絵文字の意味検索」ができるまで(3)

意味的用法の絵文字から「意味」を抽出する

 バイドゥのモバイル検索で提供されている、絵文字の意味解析について解説する3回目。前回は隣接する単語によって絵文字の「意味」を抽出する方法を説明した。これとは別に、もう1つ「意味」を抽出する方法がある。それが「分布類似度」を使うものだ。

 隣接する単語を抽出する方法は、絵文字の3つの用法(表1)のうち、装飾的用法だけを対象にしたものだった。だから、この方法だけでは絵文字の使われ方全体を分析したことにならない。

表1 絵文字における3つの用法
1)意味的用法直接意味を表し、単語の代わりとして使われる。
2)装飾的用法単に装飾する目的で使われる。無くても意味が伝わる。
3)機能的用法直接意味を表さず、特定の機能を表したり、ユーザーへのナビゲーション補助として使われる。

 例えば<ビールの絵文字>には意味的用法で使われる場合もある(図1)。


図1 絵文字を語の代わりに使う用法。ここでは3キャリアのうちドコモの絵文字を使用(以下、すべて同)

 この意味的用法の場合は装飾的用法と違って絵文字が語の代わりに使われるので、直前の単語を抽出しても意味はない。そこで登場するのが分布類似度だ。萩原氏に説明してもらおう。

 「この『今晩は<ビールの絵文字>を飲む』という用例(図1)の場合、絵文字の部分を隠しても、前後の文脈を見れば、隠された絵文字が何らかの飲み物だということは分かりますよね。さらに『今夜は』とあることから、夜に飲む飲み物だろう。ということは『お酒』かなと見当がつく。つまり意味的用法の場合は、絵文字の前後の文脈を見ると、その絵文字のだいたいの意味が分かるわけです。」

絵文字にはネガティブ/ポジティブのグループがある

 そこで登場するのが分布類似度だ。これは「文脈が類似した語同士は、意味も類似している」という仮説に基づき、語の類似度を計算によってランキングし、これにより類似した意味を持つ語を取り出す方法だ[*1]。これを絵文字に流用すれば、意味的用法で使われている絵文字に対し、同じ意味で使われている単語が抽出できるのではないかと萩原氏は考えた。

 ごく単純に説明すると、クロールした大量のデータから「今晩は~~を飲む」に似た文脈を分布類似度により取り出す。すると、「~~」の部分に「ビール」「お酒」などの単語が使われていることが分かった。ということは、これらも<ビールの絵文字>の意味だと考えることができる(図2)。


図2 <ビールの絵文字>の用例から類似した文脈で使われている単語を集めた結果。ここでは同じ背景色同士が類似した単語。青地が<ビールの絵文字>の意味とできる単語

 この分析でも、副産物として絵文字の興味深い使用実態が明らかになった。例えば、ドコモの<わーい(嬉しい顔)>と<がまん顔>、それに<台風>では、類似度の高い単語/絵文字は次のような結果となった(図3)。


図3 <わーい(嬉しい顔)>、<がまん顔>、<台風>のそれぞれに類似した単語/絵文字。いずれもカギカッコ内はドコモによる定義

 ここでは、いずれも単語ではなく絵文字ばかりが挙がっている。もしもこれらの絵文字が、単語の代わりとして(つまり意味的用法として)使わているなら、単語が出てくるはずだ。それが絵文字ばかりが出たということは、これらの絵文字は装飾的用法で使われる傾向が強いということになる。

 さらにもう1つ面白いことが分かった。図3を見ると<わーい(嬉しい顔)>に類似した絵文字は、ポジティブなイメージを持つものばかりだ。反対に<がまん顔>の方はネガティブなものばかり。これらは、それぞれ類似した文脈で使われていることを思い出してほしい。つまり感情を装飾的に表す場合、ポジティブな文脈で使われるグループと、ネガティブなグループに絵文字は分けられることになる。

 さらに<台風>もネガティブな文脈で使われることが多いことが分かった。それも図3を見ると分かるとおり、同じネガティブである<がまん顔>のグループよりも強い意味合いで使われる傾向が強いようだ。つまり、同じネガティブでも強弱の度合いによってさらにグループが分けられることになる。萩原氏の分析は、こうした絵文字の使用実態も明らかにした。

自然言語処理の「大技」ブートストラップ法とは

 ここまでの処理によって、1つ1つの絵文字にはどのような単語/絵文字が対応するのか、どのような意味があるのかが分かった。しかしこれはあくまで意味とできる単語を列挙した「辞書」を作ったに過ぎない。頻度はそれほど重視していないし、多くのユーザーが求めるような(つまり検索エンジンに有用な)意味もあれば、そうでないものもある。実際に検索エンジンのインデックスファイルを構築するには、まだまだ処理が必要だ。萩原氏の説明を聞こう。

 「例えば<ビールの絵文字>には『飲み会』の意味もありますが、この絵文字で検索した際、『飲み会』に行った感想が書かれた個人のブログがヒットしても、あまりうれしくないですよね。あるいは飲み屋の名前が書いてあって、その横にたくさん<ビールの絵文字>が付いているだけのページもうれしくない。できればビールの値段や種類なんかが入っているメニューのページがヒットしてほしい。つまり絵文字1個1個の出現に対して、それが意味的な用法なのか、それとも装飾的な用法なのか、意味的な用法であったら、それは『ビール』なのか、それとも単なる『飲み会』なのかというように、意味を判別しておかないとユーザーが望む検索結果も出せないわけです。」

 ではどうするか? 最終的には特定の意味の<ビールの絵文字>を上位にランキングしたいのだが、まずそのためには絵文字の複数の意味を判定し、分別しておく処理が必要となる。例えば前回述べたように、<ビールの絵文字>はたくさんの「意味」を持つが、1つ1つの<ビールの絵文字>に対して、適切な「意味」を割り当てておかなければならない。自然言語処理では複数の意味を判別する技術を「語義曖昧性解消」と呼ぶ。

 「よく例に出されるのが英語の『bank』です。この語は辞書で調べると『銀行』と『土手』と2つの意味があります。英語のウェブページに『bank』と出てきたとして、それだけでは『銀行』なのか『土手』なのか分からない。ユーザーが検索エンジンで『bank money』と入れた時、『土手』のページが出たらうれしくないでしょう。逆に『river bank』なんて入れた時、やっぱり『銀行』のページは出てきてほしくない。そこで1つ1つの語に対して、それがどちらの意味で使われているか判別してあげないといけない。これが語義曖昧性解消です。」

 一般的には次のような方法がとられる。まず「銀行」として使われているbankの用例と、「土手」として使われているbankの用例を大量に持ってくる。そして人間がその用例に対して1個ずつ意味を付けていく。その上で、それぞれの意味で使われた場合の前後の文脈について統計をとる。こうして、どのような文脈が前後にくると「銀行」の意味になるか、あるいは「土手」になるかという識別モデルが構築できる。その結果、新しくbankを含む文脈を与えると、それが「銀行」か「土手」か判別できるようになる。

 ところが、このような通常の方法をとるためには、多くの時間と人手が必要となる。特に今までの研究成果がほとんどない絵文字の場合は尚更だ。大量の正解データを用意しなくても意味を判別するのはどうすればよいか。そこで萩原氏が思い付いたのが「ブートストラップ法」と呼ばれる方法を使うこと[*2]

少ない用例を元に、特定の意味を持つ絵文字を大量に抽出

 「まず第1ステップとして、確かに『ビール』の意味だと分かっている用例を2~3個持ってくるんですね。そこでこの用例にはどういう傾向があるか見てみます。」(図4)


図4 「ビール」の意味と確実に分かっている<ビールの絵文字>の用例

 「例えば左側に『生』『毎晩』『打ち上げ』などの単語が出てくる傾向があると分かる。そこで第2ステップとして、これらを文脈のパターンとして抽出します。次に第3ステップとして、クロールしてきたデータから、これら抽出した文脈のパターンと似た文脈で使われている<ビールの絵文字>を含む用例を抜き出します。そうすると、これは第1ステップで持ってきた『ビール』の用例と同じ意味を持つ可能性が高いんです。」(図5)


図5 新たに獲得した「ビール」の意味を持つ<ビールの絵文字>の用例

 「こうして獲得した用例を、最初の3つの用例と合体させて、さらにもう1回同じことをすると、今度はもっとたくさんの用例が獲得できる。そういうことを何回か繰り返すと、『ビール』という意味で使われている絵文字だけを大量に獲得できるようになります(第4~7ステップ)。」(図6)


図6 「ビール」の意味で使われている<ビールの絵文字>だけを抽出する「ブートストラッピング法」

 まるで靴紐を結ぶように、同じような処理を繰り返すことで目的を達成する。このことからブートストラップ法と呼ぶ。まさに自然言語処理ならではの「大技」と言える。ただし、ここまで述べた統計的な手法が通用するのも、検索エンジンが対象とするような大規模テキストだからこそという点は注意したい(バイドゥの場合、約14万ページ中の絵文字使用例22万8310例を使用)。数千、数万語のレベルでは正確な再現はできない。これらはここ十数年の間に大きな発達を遂げた、大規模テキストをめぐる新しい技術なのだ。

 さて、このようにしてクロールしてきたデータの中から、特定の意味を持つ絵文字の用例だけを抜き出すことに成功した。あとは先に作成した「辞書」にしたがって、それらの絵文字と対応する単語(意味)を結び付けてインデックス化していけばよい。

最後の仕上げがランキング調整

 絵文字の意味検索を実現する最終段階、それは「サーチフロントエンド」の作成だ。フロントエンドという語からも分かるとおり、これはユーザーに最も近い部分となる(一方でインデックスファイルの作成部分を「バックエンド」と呼ぶ)。

 ここで最も重要となるのは、どのページを上位に表示するかというランキング調整だ。ページの重要度を測るわけだが、これに使われる理論で一般にもよく知られているのが「より多くリンクされたページに価値がある」とするGoogleの「ページランク」だ。ただし、どこの社の検索エンジンも単一の尺度だけでランキング調整をしているわけではなく、さまざまなアプローチを組み合わせている。そこにこそ各社秘伝のノウハウがある。

 では、バイドゥはどのようにして、絵文字を含むページのランキング調整をしたのか。1つには、絵文字の3分類(表1)を応用する方法がある。

 例えば実際に装飾的用法で使われている絵文字のページを見ると、ブログやBBSなど個人の書き込みが多い。そうしたページを検索結果に表示しても、ユーザーにあまりメリットはないだろう。そこで検索結果では装飾的用法のページをあまり上位に出さないよう調整しているといった具合だ。

 今回の取材では、この部分についてバックエンドの部分ほど詳しく話を聞くことはできなかった。1つ確実なのは、「より多くのページ、語をインデックス化した者が、より正確にランクを調整できる」ということだ。

 日本の携帯電話は1億1000万台も普及している一方、そこで使われている絵文字については、GoogleもYahoo!もインデックス化できていないのが現状だ。ここまで再三述べてきたように、どの検索エンジンも統計的な原理を基盤としている。バイドゥは他社よりも絵文字の分だけ多くのデータをインデックス化することに成功した。では、次の一手は? 先行する2社に対して、今後バイドゥがどのようにリーチしていくのか。これはちょっと楽しみになってきた。

注釈


[*1]……Dekang Lin, Automatic Retrieval and Clustering of Similar Words, 1998(http://webdocs.cs.ualberta.ca/~lindek/papers/acl98.pdf
[*2]……Patrick Pantel, Marco Pennacchiotti, Espresso: Leveraging Generic Patterns for Automatically Harvesting Semantic Relations, 2006 (http://www.patrickpantel.com/cgi-bin/web/tools/getfile.pl?type=paper&id=2006/acl06-01.pdf

参考文献

・萩原正人、水野貴明「モバイル検索システムのための絵文字に対する意味解析」2010年(『言語処理学会第16回年次大会論文集』)

・萩原正人、水野貴明「モバイル検索システムのための絵文字に対する意味解析」2010年(http://staffblog.baidu.jp/wp-content/uploads/2010/03/nlp2010_baidu_emoticon.pdf

・筆者不詳「グーグルページランクと検索結果表示順位について」発表年不詳(http://www.geocities.jp/existenzueda/


関連情報


(小形 克宏)

2010/7/14 11:00