ロボットに感情を教える:絵文字と深層学習👾 💭 💕

最近、コンピュータサイエンスにおける様々な厳しい問題を解決するツールとして、ニューラルネットワークが選択肢の1つになってきています。Facebookでは写真に含まれる顔を識別するために、Googleでは写真に写る全てを識別するために、それぞれニューラルネットワークが使われています。さらに、AppleではユーザがSiriに話しかけた内容を理解するために、IBMでは運用ビジネスのユニットの相乗効果を生み出すために、同じくニューラルネットワークが使われています。

どれもとても素晴らしいことです。しかし、現実の問題はどうでしょうか? ニューラルネットワークは、あなたが💯という絵文字を本当に必要としているときに、それを見つけてくれますか?

もちろん、答えはイエスです。Yes, they can.😏

本記事では、実世界における私たちの絵文字の使い方を自動的に何億通りでも学ぶことができる、Dangoの背景にある技術について概要を説明し、この技術を、お使いの携帯電話でリアルタイムに最適な絵文字を予測してくれる小さくて速いツールに集約しようと思います。📱 💭 💡 📲 🍡

訳注:ページ埋め込み上の問題で初期表示にエラーが生じていますが、「This is pretty cool」の部分を変更すると正常に動作します。

Dangoとは何か?

Dangoとは、お使いの携帯電話で実行されるフローティングアシスタントで、あなたとあなたの友人が何かのアプリで書いた内容に基づき、絵文字やステッカー、GIFを予測してくれるものです。これにより、メッセンジャーやKik、Whatsapp、Snapchatなど、どんなアプリを使っていても同じように豊かな会話が楽しめます(全てのアプリで可能にしようとすると、特有の技術的な課題が出てきますが、それはここでお話しすることではありません)。

A conversation with Dango
絵文字を提案するのは難しいことです。あなたが使いたいであろう絵文字を提案するということは、そのために、Dangoはあなたが書いたことの意味を理解しなければならないということなのです。このDangoが行う予測の根底には、ニューラルネットワークがあります。ニューラルネットワークとは、脳内のニューロンからヒントを得た方法に基づいたもので、調整可能なパラメータを持った計算機構だと言えます。

ニューラルネットワークは、これらのパラメータをランダムに初期化した後、Web全体から得られる、実世界での絵文字の使用例を何百万通りも学習します。例えば、Hey how’s it going 👋Want to grab a 🍻 tonight?Ugh 😡といった例が続きます。最初、ニューラルネットワークはランダムに推測していますが、時間をかけて新たな実例でトレーニングを重ねるうちに、その実例に対して良いパフォーマンスができるように何百万ものパラメータを微調整していきます。数日後には最高のGPUで、ネットワークはもっと有意義な提案を出力し始めます。

Want to grab a drink tonight? 🍹🍺 🍷 🍸 😏

訳:今夜一杯どう?

私たちが絵文字について学んだこと

絵文字を予測するためのデータ駆動型アプローチは、絵文字に関しては、Dangoが私たちよりも賢くなるということを意味しています。Dangoは、私たちに新しいスラングを、そして世界中の人々にストーリーを伝えることができる絵文字という独創的な手段を教えてくれます。

例えば、あなたが「Kanyeは」と書いたら、Dangoは絵文字の🐐を予測します。これはもちろん、”Greatest of All Time(史上最高)”の頭文字を取った”G.O.A.T”とgoat(ヤギ)をかけたところからきています。Kanyeは今年初めに自分を史上最高のアーティストであると称したのです。

twitter
訳: KANYE WEST「Kanye Westは現存するアーティストの中で最も素晴らしい、いや史上最高のアーティストであると気づいたんだ。」

Dangoは、1つの絵文字では表現されない内容を表現することができます。例えば、あなたがカナダのブリティッシュコロンビア州とかアメリカのコロラド州に住んでいて、「リラックスできること」を楽しみたいという場合、Dangoがこんな言葉を話します。

420 tonight? 😙 💨 🚬 🍁

また、誰かに怒っていて、とにかく彼らにGTFO(Get The Fuck Out(出ていけ)の略)してもらいたいなら、Dangoは分かりやすくドアを表示してくれます。

GTFO 👉🚪👈.

さらに、Dangoはインターネット文化からも多くを学び、ミームやトレンドも理解しています。例えば、「だが、それは私の知ったことじゃない」と言いながらお茶をすするカーミットの画像を見れば、次のように答えます。

Kermit the frog, sitting by the window happily lifting a mug of tea to his eager lips. The light catches in the beautiful ochre of the liquid for a moment. A glimpse of the sublime in the quotidian.
注釈:だが、それは私の知ったことじゃない

but that’s none of my business🐸☕

他にも、Dangoが理解する微妙な表現やジョークはたくさんあります。こうした最新の情報を取り込んでいくように常に学習しています。

Beyonce 👑 🐝 (she’s the Queen Bee).

Pizza rat 🐭 🍕

ayy lmao 👽

訳:「ビヨンセ、彼女は女王蜂(『彼女はカリスマ』の意)」

そして私たちがまだ発見できていないことも多くあるのです。

ただの絵文字以上

Dangoがトレーニングしているのが絵文字だとお話ししてきましたが、それだと、理解し表現できる概念の数は少ないのではないかと思えるかもしれません。本記事を執筆している現時点で、ユニコードコンソーシアムが標準としている絵文字の数は1624です。フォントデザイナーたちも頭を痛めていますが、これは依然として比較的少ないと言えます。

しかし、これは1624の意味しかないということではありません。絵文字を使う場合、その意味は、そうした絵文字の見え方と使っている文脈で決まります。つまり、様々なバリエーションが生まれるのです。絵文字の🙏が意味するところは、「ハイタッチ」にも、「ありがとう」にも、「お願い」にもなり得ます。🍆は…、もっぱらナスですが。さらには、絵文字は新しい概念を表現するために組み合わせることもできます。😙はキスをしている顔ですが、😙🎶なら口笛を吹いていることや、😙💨ならタバコの煙を吐き出していることを表現しています。これらの絵文字の組み合わせは、非常に複雑になり得るのです。

at the dentist 😷 💉 😬

stuck in traffic🚦 🚗 🚕 🚙

訳:歯医者で / 渋滞に巻き込まれた

こうしたことが意味しているのは、Dangoが表現できる意味概念の数は単に個々の絵文字が表現する意味よりもはるかに多くなるということです。これは強力な概念です。なぜなら、それによりDangoは、コンソーシアムが独自のシンボルをどう認識しているかには関係なく、一般的な概念をいかようにも理解することができる方法を手に入れたということになるからです。

ゆえに、DangoはステッカーやGIFも提案することができるのです。先に示したとおり、Dangoはget out 👉 🚪 👈を理解しています。これが、以下のGIFを提案することも同じように可能なのです。

get out

Man autodefenestrating with gusto

もっと掘り下げる

Dangoがどのように機能するのか、もっと深く掘り下げていってみましょう。

絵文字を提案する愚直なアプローチ(また、私たちが最初にDangoで試したアプローチ)は、ある単語と絵文字を直接結び付けものでしょう。例えば、pizza 🍕dog 🐶といった具合です。しかし、このアプローチには限界があり、実際のところ、どんな絵文字(と、言語)が使われているかということが反映されていません。単純に単語と絵文字を結び付けるだけでは簡潔に表現することができないような、つまり単語の微妙な組み合わせが文章の意味を決めている例はたくさんあります。

My girlfriend left 💔

you got it 👌✊

you know it 😏

he’s the one ❤ 👫

She said yes! 😍 💍 🙌

My girlfriend left 💔(直訳:私の彼女が去った 意味:彼女とは別れたよ)
you got it 👌✊(直訳:あなたはそれを得た 意味:できたね)
you know it 😏(直訳:あなたはそれを知っている 意味:そうでしょ)
he’s the one ❤ 👫(直訳:彼はただ1つ 意味:彼は恋人よ)
She said yes! 😍 💍 🙌(直訳:彼女がイエスと言った 意味:プロポーズ成功)

こうしたケースを扱うために、Dangoはリカレントニューラルネットワーク(RNN)を使っています。RNNは、シーケンシャルな入力に適した特殊なニューラルネットワークアーキテクチャです。そのため、自然言語処理、音声処理、さらに金融系の時系列分析といった多種多様な分野で使われているのです。ここでは、ハイレベルな内容にもなりますが、RNNとは何かについてお話しします。さらに詳細なイントロダクションはAndrej Karpathyの素晴らしい概要を見てください。


注釈
Let’s eat…:後でランチを食べよう。
Dango feeds…:あなたが書いた単語をDangoがニューラルネットワークに提供する。
Each layer…:各層で単語を組み合わせ、より抽象的な新しい表現に変換する。
Until, finally…:最後に、全ての文章を高次元空間で1つの位置に変換する。
意味空間
In semantic space…:意味空間で似たような概念は互いに近づく。全ての絵文字がここに埋め込まれる。
Dango suggests…:Dangoは、この空間におけるあなたの文章への射影の長さによって絵文字を決め、提案する。

RNNは内部状態、つまり以前に見たことのあるものを追跡するメモリを維持することにより、シーケンシャル入力を処理します。これは、I’m very happy😊 😄 😃 I’m not very happy😔 😞 😒 の違いを理解するためには重要なことです。

複数のRNNは互いに積み重ねることもできます。各RNN層は、その入力シーケンスを受け取って、次の層に供給されるより抽象的な新しい表現に変換します。これらのネットワークをより深く積み重ねれば、表現できるあらゆる機能はより複雑になります。ちなみに、今人気の「深層学習」はここから来ています。コンピュータビジョンのような難しい問題における大きなブレイクスルーの一部は、単純にネットワークをより深く深く重ねることにより生まれました。

Dangoのニューラルネットワークは、最終的に何百もの数字のリストを出力してくれます。そのリストは、3つの数字を並べたリストが三次元空間におけるx、y、zで表される1つの座標と解釈できるのと同じように、高次元空間における1つの座標を表すものと解釈できます。

私たちは、この高次元空間を意味空間と呼び、様々な概念が様々な座標に存在する多次元グリッドとして考えています。この空間では、似たような概念は互いに近くなります。深層学習のパイオニアであるGeoff Hintonは、この空間における座標を「思考のベクトル」なのだと強く主張しています。Dangoがトレーニングの過程で学ぶことは、自然言語の文章と絵文字の両方を、この意味空間における個々のベクトルに変換する方法でした。

ですから、Dangoはいくつかのテキストを受け取ると、テキストをこの意味空間にマッピングします。どの絵文字を提案するかを決めるために、この文章のベクトルに各絵文字のベクトルを射影します。射影は、2つのベクトル間の類似性の尺度を与える簡単な計算です。Dangoは、最も長い射影を持つ絵文字を提案します。つまり、それが入力されたテキストの意味に最も近いものなのです。

意味空間の可視化😮💭🌌

ビジュアル的に考える私たちにとって、この空間的なメタファーは、ニューラルネットワークについて直感的に話をできるようしてくれる強力なツールです(私たちが空間的なメタファーに夢中になったWhirlscapeのキーボードアプリMinuum keyboardのアルゴリズムについては、私が以前に書いた記事を参照してください)。

Dangoの意味空間を視覚化するために、t-distributed stochastic neighbour embedding、またはt-SNEと呼ばれる、高次元空間を可視化するための人気の技術を使うことができます。この技術は、高次元空間における座標を2次元の座標に配置してくれるのです。元の空間で互いに接近していた位置は、2次元空間でも確実に近いまま配置されることになります。このマッピングは不完全にはなりますが、それでも、私たちに多くのことを教えてくれます。それでは、意味空間に浮かぶ絵文字を可視化するために、t-SNEを使ってみましょう。

What's this strange land I see? Mysterious heiroglyphics abound
注釈:意味空間における絵文字
インタラクティブマップを開き、調べる

意味的に類似している絵文字が、この空間において自動的にクラスター化することに注目してください。例えば、顔の絵文字のほとんどが「顔半島」とでも呼ぶべき1つの領域に集中しています。嬉しい顔😀😝😊が1つの領域に、怒った顔😠😡😖がまた別の1つの領域に集中しています。ハートの絵文字もまた、私たちが「ラブ岬」と呼ぶ突端の近くに位置しています。

さらに、ご覧のとおり、尾のような形状に沿って、他にも興味深いグループができていることが分かります。🏀🏈⚾⚽は全て互いに近くなっていますし、髪の毛も表現された顔の絵文字👨👩👧👦は、髪の毛が表現されていない顔の絵文字から離れたところに集まっています(一体、何でまた彼らはつるみたがるのでしょうか?)。左上のほうを見ると、たくさんの旗や、キャビネットへのファイル整理や早送りといったあまり使うことのない絵文字が集まっていることも分かると思います。

繰り返しますが、Dangoは、顔というものはハートやビール、農場の家畜などとは異なるのだということを一度も明確に教わってはいません。Dangoは、Webから実世界での絵文字の使われ方の例を何億通りも取り込んで、この意味のマップを作ったのです。では、トレーニングによって何が起こるのでしょうか?

トレーニングをする前、ニューラルネットワークは初期化されます。多かれ少なかれ、ランダムな値のセットを与えられます。それは、基本的には白紙の状態になるということです。文章はランダムに意味空間にマッピングされ、そこで絵文字はランダムに分布します。

ニューラルネットワークをトレーニングするために、私たちは目的関数を定義します。これは、与えられた例でネットワークのパフォーマンスを採点する基本的な方法です。目的関数は、与えられた例に対しDangoが行った予測がいかに良かったか、あるいは悪かったかを私たちに伝えるために、スコアを出力します。スコアが低いほど良いということを表します。その後、私たちは勾配降下と呼ばれる非常にシンプルなアルゴリズムを使います。各トレーニングの例では、ニューラルネットワークにおける数百万のパラメータ全てが、勾配降下によって目的関数を最小化する方向へとわずかに修正されます。

GPUでこの手順を数日行った後には、目的関数はこれ以上改善できないというところまで行き着きます。つまり、Dangoがトレーニングを完了し、世界に出る準備ができたということです!

言語の将来

言語は視覚的になってきています。絵文字、ステッカー、およびGIFは人気が爆発しています。高度なやり方の中で使われるものにしては、まだまだ大変な労力を要する作業であるにも関わらず、人気が爆発しているのです。愛好家たちはあらゆる状況に応じた画像の個人的なコレクションを作成し、絵文字キーボードの全てのページを記憶していますが、その他の人たちは「よく使う」メニューからすぐにアクセスできる絵文字を使うばかりで、時々あちこちで見つかるGIFを転送するぐらいです。

この視覚的な言語は技術と一緒に成熟してきました。この共生関係は、新たな言語に情報を与える新たな技術と共に、そして今度はその新たな言語がまた技術に情報を与えるというように、今後も続いていきます。将来のコミュニケーションでは、あなたにうまく合わせてくれる人工知能のツールが常に、テキストと共にイメージも作り上げてくれるようになるでしょう。そしてDangoが、そうした進歩の最前線にいることを誇らしく思っています。

うまくいけば、こうして内部を知ることによりインスパイアされ、今の私たちのように、あなたも自分の文章が全て意味空間のどこかに、何百もの絵文字に囲まれて浮かんでいるのを想像することでしょう。もしかしたら、これで、あなたのニューラルネットワークとの付き合いが始まったかもしれませんね。それなら私たちに連絡をください!

それから、もちろんDangoも試して、私たちにフィードバックをください。「どんな絵文字を使ったらいいんだろう?」と迷ってしまうときはいつでも、Dangoが答えを教えてくれますよ。

Download me please! 🙏 😭 📲