投稿

英語と日本語の差異から見るGoogle翻訳

Google翻訳は、どんな点が改善されたのか? ちょっと使ってみると、新しいGoogle翻訳が、飛躍的に能力を向上させたのは、感覚的には、明らかに見える。ただ、Google翻訳が実現した「飛躍」が、どのようなものかを正確に述べるのは、意外と難しい。翻訳の評価でよく利用されるBLEU等のスコアは、翻訳改善の重要な目安にはなるのだが、それは、あくまで量的なものだ。質的な「飛躍」は、その数字には、間接的にしか反映していない。 ここでは、英語と日本語の文法の差異に注目して、その差異が、Google翻訳では、どのように埋められているかを、いくつかの具体例で見てみよう。それらは、日本語・英語翻訳の中心的課題であるにもかかわらず、以前の機械翻訳技術では、うまく扱えていなかった。 また、日本語特有の言い回しでも、大きな改善が見られる。 日英文法の違いを考える 最初に、ChomskyのPrincipals and Parameters 理論に従って、日英文法の特徴的な違いを三つほど取り上げよう。 Head-directionality parameter 一つは、日本語・英語の語順に関するものだ。Head-directionality parameter といわれるものだ。 head-initial  English eat an apple a person happy about her work I live in Takasu village. any book We saw that Mary did not swim head-final  日本語 リンゴを 食べる 彼女の仕事を喜んでいる 人 僕が、高須村 に 住んでいる どんな本 も マリーが泳がなかった のを みた Null-subject Parameter 二つ目は、Null-subject Parameter といわれるもの。日本語は主語の省略を許すが、英語はそれを許さない。 Null-subject Parameter (+) 日本語 Null-subject Parameter (-) English 私達は買い物をした。後でご飯を食べた。 We went shopping. Afterwa

Google機械翻訳に注目!

科学でも技術でも、その発展には、飛躍がある。もちろん、飛躍にも小さいものから大きいものまでいろいろあるのだが。 面白いことに、何かが共鳴するように、いろんな飛躍が、ある時期に集中して起きることがある。 人工知能の分野では、2012年がそうした時期であった。ImageNetの画像認識の国際的コンテストで、CNNを使ったAlexNetが圧勝し、Googleの巨大なシステム DistBeliefが、教師なしでも猫の認識に成功する。それが、2012年だ。 この時から、人工知能ブームが起き、技術的には、ニューラル・ネットワークを用いたDeep Learning技術が花形となる。そして、そうした技術的な達成は、ただちに、ビジネスの世界で応用を見つけ出していく。 現在、各社が取り組んでいる自動運転技術と、Alexa, Google Now, Siri 等のボイス・アシスタント・システムが、コンシューマー向けのAIプロダクトとしては、最も大きなマーケットになるのだが、そこでは、Deep Learning技術のCNNが、中心的な役割を演じている。 ただ、技術の変化は早い。 今また、2012年のブレークスルーに匹敵する目覚ましい飛躍が、AIの世界で起きようとしている。昨年11月にサービスが始まった、Googleの「ニューラル機械翻訳」がそのさきがけである。 そこで使われている技術は、RNN/LSTMと呼ばれるものである。 Googleの新しい機械翻訳のシステムは、LSTMのお化けのような巨大なシステムなのだが、その基本原理を理解することは、誰にでもできる。(今度のマルレクにいらしてください) 2012年に続く、この第二の飛躍が、どのようにビジネスに生かされるかは、まだ未知数だが、必ず、現実の世界で利用されていくようになるだろう。 今の眼で、2012年の「Googleの猫」のDistBeliefを振り返れば、かつては驚嘆して見上げたそのシステムが、ハードワイアーでプログラミングをしていた、かつての「巨大システム」ENIACのようなものに、見える。 Googleの機械翻訳のシステムも、いずれ、スマートフォンに収まるようになるだろう。僕の好きな「翻訳こんにゃく」は、早晩、実現されるだろう。 さらに、変化は加速している。 第三の飛

ダメだこりゃ。LSTMの図を書き直すの巻。

イメージ
マルレクの準備で、図を書いているのだが、文章よりも図の方を先に書いていると、どうも、スライドがパラパラ漫画風になってしまう。ま、それは、楽しいし、そんなに悪いことではないと思っているのだが。 ただ、問題は、書いているうちに、前の図が気に食わなくなることがあること。文章の訂正は簡単だが、図の訂正は手間がかかる。その上、パラパラ漫画になっていると、同じような図が連続してたくさんあって、修正箇所も多くなる。うーん。 今回、でも、どうしても気に食わなくて、というか自分の認識不足があって、図を描き直そうと決心した。 実は、もっと深刻な問題もあって、講演の発表予定順に、スライドを準備しているわけではないので、後からの図の訂正は、実は、すでに完成している大量のスライドの図に影響が出る。自業自得なのだが、さあ、どうするか。 昨日、LSTMの形として、次のものを提示した。 今日になって、この図が、どうしても、気に入らなくなった。真ん中の丸の、「\(C_t\)を生成」の部分が気に入らないのだ。 この丸では、二つの演算が行われている。下から「tanh」の部分と、その上の「+」の部分だ。実際に、「\(C_t\)を生成」しているのは、「+」の部分だけだ。この丸は大きすぎる。 気に入らない、もう一つの理由は、LSTMの内部の演算は、全て、LSTM内部のGateと関連していることがある。図の一番左にあるGateは、この図では、ちょっと仲間外れにされている気がする。そうではなく、このGateは、演算「+」の仲間なのだ、 他にも問題がある。僕が、不都合に気づいたのは、実は、この図はLSTMの展開形なのだが、それをループを含む再帰形で表そうとして、うまくいかなかったからである。 修正版は、こちら。各ユニットが、一つの計算を行い、それぞれがGateに関連づけられているのが、見やすいのがわかると思う。 この展開形を、ループを含む再帰形で表したのが、こちらになる。図中の黒い四角は、データを変えることはないが、変数の添字の時間の部分だけを、一つ進めることを表している。 このように、LSTMの再帰形は、二つのループを含む。それは、LSTMの展開形が、横串二本で貫かれていたことから、想像できること

LSTMの中の三つのGate

イメージ
ここでは、LSTMの中で、Gateがどのようなところに配置されているかを見てみよう。 あらためて、RNNとLSTMの比較をしてみよう。 まずは、RNNから。 隠れ層に、横串が一本通っているが、RNNは単純な三層構造のニューラル・ネットワークが単位であることは、わかると思う。 では、LSTMは、どうであろうか? 横串が、一本増えた。 ただ、この二つの図を見ているだけではわからないことがある。もう少しだけ詳しく、内部の様子を見てみよう。 まずは、RNNから。 基本となるのは、RNNの次のような構成である。この図では、矢印に添えられた文字は、情報の名前ではなく、重みであることに注意されたい。 これまでも、また、これからも繰り返し登場する 重要な式 は、Full Connectなニューラル・ネットワーク一層の出力は、入力をX、重みをW、バイアスをb とした時に、\( \phi ( W \cdot X + b) \) で表されるということである。 RNNでは、隣り合う隠れ層もFull Connectである。ここでは、RNNの隠れ層が受け取る二つの入力 \(h_{t-1}\) と \(x_t\) から、次の式で、出力が計算されている。 $$ h_t = \phi _h ( U \cdot x_t + W \cdot h_{t-1} + b_h $$ ここで、基本式に新たに付け加えられた \(W \cdot h_{t-1}\)が、隣の隠れ層からの入力に対応している。 この関係式を、先のRNNのグラフに書き込んでみよう。次の図が、それである。 出力層では、活性化関数とバイアスが省略されている。 この図に対応するLSTMのグラフは、次のようになる。 似ているようでもあり、似ていないような気もするが。 ただ、先の図には、重要な情報が抜けている。LSTMが、もっともRNNと異なるのは、それが内部にGateを持つということだ。それを図示したのが、次の図である。 LSTMは、内部に三つのGateを持っている。それが、LSTMの振る舞いを、RNNとは大きく変えることになる。

LSTMをRNNと比較する

イメージ
LSTMは、RNNの一種である。ただ、LSTMは、旧来の単純なRNNとは異なっている。ここでは、LSTMとかつてのRNNを比較してみようと思う。 かつてのRNN(以下、単にRNNと呼ぶことにする)は、次のような形をしていた。 両者の比較を図示すれば、次のようになる。 RNNでは、横の繋がり(展開形で)は、h層の一本だけだったのだが、LSTMでは、もう一本多く横のつながりを持つ。このc層は、LSTMで新たに付け加えられたものだ。あとで見るように、LSTMでは、この層が独自のとても大事な働きをすることになる。 この図では、入力は水色、出力は緑色で表されているのだが、RNNは、二つの入力 \(h_{t-1}\) 、\( x_t \) を持ち、二つの出力 \( h_t\) 、\( o_t \) を持つ。それに対して、LSTMは、三つの入力 \(h_{t-1}\) 、\( c_{t-1} \)、\( x_t \) を持ち、三つの出力 \( h_t\) 、\(c_t \)、\( o_t \) を持つ。 LSTMの内部を、簡単に見てみよう。(詳細な説明は、後にする。)基本的には、左の図に対応して、LSTMは、\( h_t \) を生成する層と、\( c_t \) を生成する層の二つからできている。 ここでは、次の二つのことに注意しよう。 第一に、LSTMの出力 \( o_t \)は、\( h_t \) と同じものである。先ほど、三つの出力があると書いたが、三つのうち二つは、同じ \( h_t \)である(右の図で、上方向と横方向の出力の \( h_t \) )。右と左の図を比べて、c層の位置とh層の位置が、上下反対のように見えるのは、h層が出力を行う層だからである。また、右図の大きな回り道は、\( h_t \) が、二箇所で利用されているからである。 第二に、それでは、情報の流れは、右の図の大きなノード間の、c層からh層への流れであって、左の図にあるような h層からc層の流れは、存在しないのであろうか? そうではない。h層への入力である \(h_{t-1}\)  は、入力 \( x_t \) と合流して、それがc層に流れている。ここでは、二つの入力を合流させるのに、二つのベクトルを横に繋げて連結するという方

TensorFlow 1.0リリースと TF Dev Summit 2017 でのJeff Deanのキーノート

イメージ
2月15日、TensorFlow 1.0をリリースした、TensorFlow Developers Summit 2017 のキーノートの様子です。 冒頭のスピーチは、もちろん、Jeff Dean。タイトルは、「TensorFlow : ML for Everyone」 みんなのための機械学習ですね。 TeasorFlow登場以前の、「第一世代」の"DistBelief" の話から始まります。2012年の「Googleの猫」で有名なシステムですね。スケーラブルで実際に製品版として動いていたんだけど、GPUもCPUもハードは固定されていて柔軟ではなかったと。RNNや強化学習にも使えなかったと。 それと比べると、「第二世代」のTensorFlowは、多くのプラットフォームをサポートして(Rasberry Piの上だって動く)、その上、Googleのクラウド上でも動く(それにもたくさんの方法がある)。 そして、TensorFlowは、Pythonを始め、C++, Java, Go, Haskell, R と、多くの言語をサポートしている。(Haskellでも動くんだ、知らなかった。もっとも最近出た Fold は、関数型プログラミングそのものだからな。) TensorFlowの大きな特徴は、TensorBoardのような、Visualizationの優れたツールを、一緒に提供していること。 TensorFlowは、また、Google自身の内部でも、検索、Gmail、翻訳、地図、Android、写真、スピーチ、YouTube ... 様々な分野で、急速に利用が進んでいる。 オープンソースのTensorFlowの開発は、GitHubの機械学習の分野では、ナンバーワンのレポジトリーの数を占めている。 機械学習の様々なフレームワークの中でも、TensorFlowが、圧倒的に利用されている。 GitHubでのStarの数は、 TensorFlow   44508 scikit-lean     16191 Caffe            15690 CNTK             9383 MXNet           7896 Torch

Cloud Spannerについて

イメージ
Googleが、これまで自社内部で利用してきたSpannerをクラウド・サービスとして公開した。 "Introducing Cloud Spanner: a global database service for mission-critical applications" 2012年のOSDIで論文が公開されたSpannerは、key-valueをベースにした拡張性と、RDBのACIDなトランザクション処理能力を併せ持つ強力な分散データベースである。タイムスタンプ・ベースのトランザクション処理に必要な正確な時間を得る為に、GPSや原子時計を利用。その上に、時間の不確実性を組み込んでいる。 当時、次のSpanner論文を日本語に翻訳した。(当時、残念ながら、Google翻訳はなかった。) "Spanner: Google’s Globally-Distributed Database"  丸山による翻訳は、次の リンク からダウンロードできる。利用されたい。 その頃のGoogleの大規模分散システムの動向については、Spannerを含めて、2013年のマルレクで取り上げている。「 大規模分散システムの現在 --- GFS, MapReduce, BigTableは、どう進化したか 」合わせて参照されたい。