SlideShare une entreprise Scribd logo
1  sur  402
機械学習技術の現在
I PROPOSE to consider the question, 'Can machines think?'
I PROPOSE to consider the question, 'Can machines think?'
-- Turing
Q: Please write me a sonnet on the subject of the Forth Bridge.
A: Count me out on this one. I never could write poetry.
Q: Add 34957 to 70764
A: (Pause about 30 seconds and then give as answer) 105621.
Q: Do you play chess?
A: Yes.
Q: I have K at my K1, and no other pieces.
You have only K at K6 and R at R1. It is your move.
What do you play?
A: (After a pause of 15 seconds) R-R8 mate.
-- “Turing Test” by Turing
Voice One: “They made the machines.
That's what I'm trying to tell you.
Meat made the machines.”
Voice Two: "That's ridiculous.
How can meat make a machine?
You're asking me to believe in sentient meat."
-- "They're made out of meat” Terry Bisson
機械学習技術の現在
@maruyama097
丸山不二夫
はじめに
 現代のIT技術とその利用の一つの新しい焦点は、ML(機
械学習)技術とAI(人工知能)技術にある。機械が、人間
のように学習し、人間のように思考する。これは科学者た
ちの長い間の夢だった。私たちは、そうした夢が実現する
時代の始まりに立っているのかもしれない。
 ただ、近年の機械学習技術・AI技術とその利用の急速な
発展と拡大は、現象的には、これらの技術に対する人々
の全体的な理解を難しくしている。これらの技術で、何が
出来て何が課題なのか、よく知ることがないと、空想的な
楽観論と、技術否定に通じかねない悲観論の両極に、技
術の評価が振動する。
はじめに
 今回のレクチャーは、機械学習技術・AI技術の現在につ
いて、オーバービューを与えることを目的にしている。出
来るだけ多くの人に、これらの技術の到達点と課題の概
略を知ってもらいたいと思っている。畢竟、機械学習を知
るためには人間の学習が必要であり、人工知能を作るに
は人間の知能が必要である。IT技術者の方には、自身で
この分野への問題意識を深めていくことを期待している。
「機械学習技術の現在」
Agenda
Part 0: 機械学習技術・AI技術を構成する複数の
流れ
Part 1: データの統計的分析をもとに、数値予測・
クラス分けを行うアプローチ
Part 2: Deep Learning・ニューラルネットワーク
に基づくアプローチ
Part 3: パーソナル・アシスタント・システムの現在
Part 4: IBM Watsonは、何をしているのか?
Appendix
Part 0
機械学習技術・AI技術を
構成する複数の流れ
現在の機械学習技術・AI技術は、単一の技術ではな
い。それは、複数の流れからなると考えると全体像が
把握しやすい。ここでは、それを、大雑把に四つの流
れにまとめてみた。
機械学習技術・AI技術を
構成する複数の流れ
A) 既知のデータの統計的分析をもとに、新しいデー
タの、数値予測・クラス分けを行うもの。
B) ニューラルネットワークの手法を用いて、生物の
感覚・運動系の能力の相同物を機械上で実現し
ようとするもの。
C) 経験的に構築された知識・推論システムと人間固
有の言語能力に関わるもの。
D)人間の数学的・論理的な推論能力に関わるもの。
A. データの統計的分析に基づく、
数値予測・クラス分け
 これは昔から統計学の手法として存在する、回帰分析や
クラスター分析と考え方は、基本的に同じものである。
 ただ、マシンのパワーが飛躍的に増大して、大量のデータ
を短時間で処理できるようになり、かつ効果的なビジュア
リゼーションが可能になったのが、実践的には新しく、か
つ重要な変化である。
 現在、クラウドで提供されている、大部分の機械学習の
サービスは、このクラスに属する。
 同時に、「決定論的なアプローチ」に対する「統計的なアプ
ローチ」の優位という方法論的な自覚は、現在の機械学
習技術・AI技術の多くの領域に、大きな影響を与えつつ
ある。
B. ニューラルネットワークに基づく、知
覚・運動系へのアプローチ
 現在、活発に研究・応用が進んでいる分野である。文字
認識・発話の文字列への変換、静止画・動画からの対象
の判別・動きの検出等々で、大きな成功を収めている
 基本的なモデルの起源は、生物の知覚・感覚(主要には、
視覚・聴覚)を司る神経回路網にある。
 生物の知覚・感覚の能力は、運動能力と密接に結びつい
て、感覚・運動系を構成しているので、ロボットの動作の
制御、ドローンの姿勢制御、自動運転等にも、このアプ
ローチは有効で、応用分野を拡大している。
 人間の生産労働の代替としての生産の機械化も、知覚と
自律的な運動能力を持つ機械たちのネットワーク化に
よって、新しい段階に進むことが予想される。
C. 人間の経験的な知識システム・言
語能力に関わるもの
 この領域でも、多くのレベルで多くの取り組みがなされて
いる。小論もこの分野に多くのスペースを割いている。
 「パーソナル・アシスタント・システム」 GoogleのGoogle
Now, AppleのSiri, MicrosoftのCortana, Amazon
のAlexa等々。私たちの身近なところで、もっとも活発に
応用が進んでいる分野。完成度の高い 「質問応答システ
ム」として、IBMのWatsonがある。 Watsonについては、
この講演の後半で、詳しく触れたい。
 「パーソナルアシスタント」のプログラムは、Turing Test
的には、「知的」にふるまっているように見えるのだが、そ
の多くの実装は、「知的」なものとは言えない。
C. 人間の経験的な知識システム・言
語能力に関わるもの
 「知識データベース」 Semantic Web等の知識のグラフ
表現の試みを始めとして、人間が経験的に得た様々の知
識を活用するモデルを、機械上に構築しようというもの。
基本的には、グラフとして構造化されたデータを扱う。
 Google Nowは、「パーソナル・アシスタント・システム」
であるが、「知識グラフ」を活用した検索システムと結びつ
いている。それは、今後ますます明確に、新しいスタイル
での「広告システム」と結びついていくだろう。おそらく、そ
うした動きは、避けられないのではと、僕は考えている。
 知識データベースのエンジンは、文字列の検索エンジン
から自立を始めたばかりである。現状では、それ単独では、
「論理的」でも、「推論」が得意なわけではない。
C. 人間の経験的な知識システム・言
語能力に関わるもの
 「機械翻訳システム」 本来は、意味理解を含む人間の一
般的な言語能力に関わっている。ただ、機械翻訳の場合、
質問に答えることが求められているわけではない。それは、
ある言語から他の言語への形式的な「書き換え」システム
なのかもしれない。
 この領域は、最終的には、機械が人間のように、言語の
「意味」を理解して、「知識」を活用して「意味」のある活動
をするのを目指している。ある意味、人工知能の本丸であ
る。ただ、多くの課題が残されている。
D. 人間の数学的・論理的な推論能力
に関わるもの
 ここでは、経験的な起源からは相対的に独立な、純粋に
数学的な定理の証明や、複雑な証明の機械による支援
が課題になる。この分野でも、COQ等の「証明支援システ
ム」を中心に、興味ふかい前進がある。
 マルレク「「型の理論」と証明支援システム -- Coqの世界」
http://bit.ly/1qbdXVE を参照されたい。
 かつての日本の「第五世代」的な、AIに対する「論理的」
な(というより「定理証明的」な)アプローチは、現在のAI
研究においては主流ではない。ただ、そのことは、他のす
べての領域と同じように、数学的・論理的なアプローチの
有効性を否定するものではない。
 数学や物理といった知識の体系は、誰もが生得的に持つ
言語能力や経験的な知識の体系には、還元されない。
Part 1
データの統計的分析をもとに、数値
予測・クラス分けを行うアプローチ
この分野については、昨年度のマルレク・マルゼミ
「エンタープライズと機械学習」で二回にわたって取り
上げているので、そちらを参照してほしい。
http://bit.ly/1tqiKUJ
「エンタープライズと機械学習」
Part II 「機械学習のアルゴリズム」
 昨年のマルレク「エンタープライズと機械学習」
http://bit.ly/1tqiKUJ (2014年11月25日)の
Part IIに主要なアルゴリズムの簡単な紹介がある。
 Gradient Descent
 Decision Tree
 Boosted Decision Tree
 Support Vector Machine
簡単にするために、二次元のグラフで考え
よう。ある点から始めて、その点から極小
点に近ずくためには、どうすればいいか?
二つの場合がある。
その点が極小点の右側にある場合には、
その点のx座標を少し減らせばいい。
その点が極小点の左側にある場合には、
その点のx座標を少し増やせばいい。
その点が、極小点の右にあるか左にある
かは、その点での接戦の傾きが、正である
か負であるかでわかる。
よって、α を正の数値とすれば、次の式が、
より近づいた点の位置を与える。
直感的な説明
Gradient Descent
0
1
J(0,1)
ある場合には、最小値ではなく、局所的な
極小値に、入り込むことがある。
Gradient Descent
「エンタープライズと機械学習」
Part III 「開発サンプル」
 「エンタープライズと機械学習」 http://bit.ly/1tqiKUJ
のPart III 「Azure MLでの予測ソリューション開発サ
ンプル」に、いくつかのユースケースの紹介がある。
 また、マルゼミ「エンタープライズと機械学習」
http://bit.ly/1CNwlPi は、Azure MLに即してだが、
個別の事例について、少し詳しい説明がある。
サンプルと使用されたモデル
 クレジットのリスク予測 Support Vector Machine (SVM) ,
Boosted Decision Tree
 自転車の時間貸し boosted decision tree regression
 CRMタスク boosted decision tree classifiers
 飛行機の遅れの予測 Two-class boosted decision tree,
two-class logistic regression
 ネットワーク侵入検出 boosted decision tree
 感情分析 Linear regression, two-class logistic
regression, multiclass logistic regression classifier
 類似した会社を見つける k-Means clustering
 学生の成績 boosted decision tree
データ構造・アルゴリズム等
プログラム
設計
実装
配備
アプリケーション
レスポンスリクエスト
学習モデルと
訓練用データの選択
機械学習アルゴリズム
設計
機械学習
配備
アプリケーション
レスポンスリクエスト
訓練用データ
人間の仕事
機械の仕事
Smart Machine
「最適化問題」と量子コンピュータ
 機械学習のアルゴリズムの多くは、ある関数の値を最小
にするという形の「最小化問題」に還元される。
 「最適化問題」へのアプローチとしては、アニーリング量子
コンピュータを用いたものも興味深い。
 それについては、「量子コンピューターの新しい潮流 --- D-
Waveのアプローチ」 http://bit.ly/1rwyzyv の「D-Waveマ
シンのプログラミング 生成関数と最適化問題への還元」を参照
されたい。
 アニーリング量子コンピュータが取り組もうとした課題の
多くが、別のアプローチでの機械学習技術の課題と共通
していることに留意する必要がある。
http://arxiv.org/pdf/1210.0811v2.pdf
gradient descent method
Part 2
ニューラル・ネットワークに基づく
感覚・運動系へのアプローチ
 ニューラル・ネットワークを巡るいくつかのトピック
 ニューラル・ネットワークのハードウェアとその変化
 ニューラル・ネットワークを記述する言語の登場
ニューラル・ネットワークの
いくつかのトピック
ISCA 2015で新設されたCAMEL Workshop
「機械学習のためのコンピューター・アーキテクチャー」
2015年6月 ACM/IEEE http://goo.gl/WIFpTT
The 42nd International Symposium on Computer Architecture (ISCA)
「アカデミー」
での動き
CAMEL の Opening Remark のスライド http://goo.gl/JVjGne
「アカデミー」
での動き
https://goo.gl/b5Pe5j
MS ResearchのDeep Learning “Project Adam”
1,400万枚の画像を学習して、22,000のカテゴリーに分類できる。
イヌとネコを区別できるだけでなく、イヌの犬種も正しく判別する。
http://goo.gl/2EMIkJ
MS ResearchのDeep Learning “Project Adam”
あの「Googleのネコ」マシンより、1/30のマシンで、50倍早く、
二倍の精度で、画像認識ができるという
http://goo.gl/reCbkj
Google 自動運転カー
2015年より公道実験開始
NVIDIA CES 2015
GPUを使った画像認識技術を生かして自動運転カーへの搭載を目指す。
http://www.nvidia.com/object/ces2015.html
http://goo.gl/LCN8dh
Boston Dynamics LS3
Team MIT: Atlas Robot Push Recovery
https://www.youtube.com/watch?t=193&v=2mhIYetkNIg
Google Deep Dream
deepdream https://goo.gl/GIDVg8
dreamscope https://goo.gl/uQauPs
https://dreamscopeapp.com/i/V6S4Td49Th
ニューラル・ネットワークの
ハードウェアとその変化
 サーバー・クラスター
 GPU
 FPGA
 専用チップ
ニューラル・ネットワークの
ハードウェアの変化
 Server Cluster: 「Googleの猫」の認識に成功したシ
ステムは、巨大なシステムだった。
 GPU: 現在は、GPUを利用してシステムは小型化し、研
究室内のマシンでも同じ処理が可能になっている。先に
紹介したオープンソースの多くは、デフォールトでGPUの
使用を想定している。
 FPGA: MSのCatapultやSiriusのサーバーサイドのよ
うに、クラウド上に、FPGAを使って高性能で低電力なシス
テムを構築する研究も活発に行われている。
 専用チップ: LeCun等のNeuFlow、IBMのTrueNorth
のように、ニューラル・ネットワーク専用チップの開発が、
始まっている。
2012年7月
http://arxiv.org/pdf/1112.6209.pdf&embedded=true
Google 猫論文
 我々は、ラベル付けされていないデータだけから、高レベ
ルの、クラスに固有の特徴を検出することが出来るかとい
う問題を考察した。例えば、ラベル付けされていないイ
メージだけから、顔の検出が可能かという問題である。
 この問題に答える為に、我々は、9層からなるローカルに
疎に結合した、プーリングとローカルなコントラストの正規
化の機能を備えた自動エンコーダを、大規模な画像デー
タセット(モデルは10億のコネクションを持ち、データセット
は、インターネットからダウンロードした200x200ピクセ
ルの一千万個のイメージからなる)上で訓練した。
 我々は、このネットワークを、1000台のマシン(16,000コ
ア)のクラスター上で、並行計算モデルと非同期SGDを
使って、三日間訓練した。
 広く受け入れられているように見える直観に反して、我々
の実験結果は、顔であるかそうでないかのラベルをイメー
ジにつける必要なしに、顔の検出が可能であることを明ら
かにした。
 コントロールの実験では、この特徴の検出は、変換だけで
なく、拡大や画面外への回転に対しても、頑健であること
を示した。
The architecture and parameters
in one layer of our network.
Jeff Dean
Google Brain
巨大なサーバー・クラスター
2013年6月
http://goo.gl/HjbcDp
NgのCommodith Off-The-Shelf論文
Andrew NG
Now You Can Build Google’s $1M
Artificial Brain on the Cheap
 On Monday, he’s publishing a paper that
shows how to build the same type of
system for just $20,000 using cheap,
but powerful, graphics microprocessors,
or GPUs. It’s a sort of DIY cookbook on
how to build a low-cost neural network.
http://www.wired.com/2013/06/andrew_ng/
GPUを利用した、NNのコモディティ化
2013年6月
この論文: http://stanford.io/162lrZ4
GPUの利用
消費電力600kWから4kWへ
5百万ドルのシステムから、3万3千ドルのシステムへ
SICS 2014 http://bit.ly/1BOIEuC
MS Catapult論文
FPGAの利用
http://bit.ly/1z2zMy1
2015年6月
http://icri-ci.technion.ac.il/files/2015/07/A2-CAMEL2015-Chung.pdf
MS CAMEL論文
Eric Chung
処理能力は、1/6だが、
エネルギー効率は、9倍
2015年8月 http://goo.gl/wxXAQr
IBM TrueNorth発表
専用チップの利用
http://paulmerolla.com/merolla_main_som.pdf
LeCun:"My comments on the IBM
TrueNorth neural net chip"
 基本的には、TrueNorthでは、「ニューロンの発火」は、
実際の脳のニューロンのように二値(発火する、あるいは、
発火しない)しか取らないが、こうした形でのニューラル・
ネットワークの表現力は限られたものにしかならないとい
うもの。ノードとノード間で、少なくとも 8bitの情報がなけ
れば、有効な認識能力は得られないという。
 LeCunらは、NeuFlowというチップを、FPGAでのテスト
を終え、ASICで作っているという。このチップは、実装密
度でも消費電力でも、TrueNorthに負けていないらしい。
 さらに、NeuFlowは、ノードが16bitの状態を持てるよう
にしたいらしい。1-bitの状態しか持たないTrueNorth に
は、負けないぞということ。
https://goo.gl/R7NukZ
2012年 IEEE NWSCA’12
http://yann.lecun.com/exdb/publis/pdf/pham-mwscas-12.pdf
人間の脳のエネルギー効率は、
驚異的に高い。
AIのハードの世界でも大きな変化が
進んでいるのだが、留意すべきこと
....
「人間と機械」という対比
だけでなく、「生物と機械」
という対比でも、考えるこ
とは面白い。
ニューラル・ネットワークが、
今後、大活躍するであろう
「感覚-運動系」でも、生物の
能力は、驚異的である。
ニューラル・ネットワークを
記述する言語の登場
 Torch
 Caffe
 Net#
ニューラル・ネットワークを
記述する言語の登場
 ハードウェアだけでなく、ニューラル・ネットワークのソフト
ウェアも大きな変化が進行している。
 ソフトウェアの変化で重要なことは、ニューラル・ネットワー
クを記述する言語が、登場していることである。小論では、
その幾つかを紹介したいと思う。代表的なものとして、次
のようなものがある。
 Torch: https://goo.gl/Yg98OO
 Caffe : http://caffe.berkeleyvision.org/
 Net# : https://goo.gl/DKqSBY
Convolutional Networks: 1989
LeNet: a layered model composed of
convolution and subsampling operations
followed by a holistic representation and
ultimately a classifier for handwritten
digits. [ LeNet ]
ネットワーク記述言語登場の背景
基本パターンの確立と一層の複雑化
Convolutional Nets: 2012
AlexNet: a layered model composed of
convolution, subsampling, and further
operations followed by a holistic
representation and all-in-all a landmark
classifier on
ILSVRC12. [ AlexNet ]
+ data
+ gpu
+ non-saturating
nonlinearity
+ regularization
ネットワーク記述言語登場の背景
基本パターンの確立と一層の複雑化
Convolutional Nets: 2014
ILSVRC14 Winners: ~6.6% Top-5
error
- GoogLeNet: composition of multi-
scale dimension-reduced modules
(pictured)
- VGG: 16 layers of 3x3 convolution
interleaved with max pooling + 3
fully-connected layers
+ depth
+ data
+ dimensionality reduction
ネットワーク記述言語登場の背景
基本パターンの確立と一層の複雑化
Torch
Torchは、LeCun率いるFacebookのFAIRが提供
するオープンソースである。ここでは、次のドキュメン
トに従って、その概要を見てみよう。
“Deep Learning with Torch: the 60-minute
blitz” https://goo.gl/A76kjA
Yann LeCun
Torchの基本的なデータ構造
Tensor
-- 初期化されていない 5x3の行列を作る
a = torch.Tensor(5,3)
a = torch.rand(5,3) print(a)
b = torch.rand(3,4)
-- 行列の積: syntax 1
a*b
-- 行列の積: syntax 2
torch.mm(a,b)
-- 行列の積: syntax 3
-- a*b の結果を c に格納する
c=torch.Tensor(5,4)
c:mm(a,b)
CUDA Tensors
 Tensorは、:cuda 関数を使って、GPUに移動できる。演
算もGPU上で実行される。
 GPUでのプログラミング、CUDAについては、マルレク
「マルチコアのプログラミング技法」を参照されたい
http://bit.ly/1pFWw5v
require 'cutorch';
a = a:cuda()
b = b:cuda()
c = c:cuda()
c:mm(a,b) -- done on GPU
次のように、様々なNN(ニュー
ラル・ネットワーク)が記述できる。
 nn.Sequential
 nn.Concat
 nn.Parallel
Neural Networks Sample
これは、「文字」を認識する、ニューラル・ネットワークである。
これを Torchで記述したソースを次に示す。
require ‘nn’
net = nn.Sequential()
net:add(nn.SpatialConvolution(1, 6, 5, 5))
-- 1 input image channel, 6 output channels, 5x5 convolution kernel
net:add(nn.SpatialMaxPooling(2,2,2,2))
-- A max-pooling operation that looks at 2x2 windows and finds the max.
net:add(nn.SpatialConvolution(6, 16, 5, 5))
net:add(nn.SpatialMaxPooling(2,2,2,2))
net:add(nn.View(16*5*5))
-- reshapes from a 3D tensor of 16x5x5 into 1D tensor of 16*5*5
net:add(nn.Linear(16*5*5, 120))
-- fully connected layer (matrix multiplication between input and weights)
net:add(nn.Linear(120, 84))
net:add(nn.Linear(84, 10))
-- 10 is the number of outputs of the network (in this case, 10 digits)
net:add(nn.LogSoftMax())
-- converts the output to a log-probability. Useful for classification problems
print('Lenet5n' .. net:__tostring());
require ‘nn’
net = nn.Sequential()
net:add(nn.SpatialConvolution(1, 6, 5, 5))
-- 1 input image channel, 6 output channels, 5x5 convolution kernel
net:add(nn.SpatialMaxPooling(2,2,2,2))
-- A max-pooling operation that looks at 2x2 windows and finds the max.
net:add(nn.SpatialConvolution(6, 16, 5, 5))
net:add(nn.SpatialMaxPooling(2,2,2,2))
net:add(nn.View(16*5*5))
-- reshapes from a 3D tensor of 16x5x5 into 1D tensor of 16*5*5
net:add(nn.Linear(16*5*5, 120))
-- fully connected layer (matrix multiplication between input and weights)
net:add(nn.Linear(120, 84))
net:add(nn.Linear(84, 10))
-- 10 is the number of outputs of the network (in this case, 10 digits)
net:add(nn.LogSoftMax())
-- converts the output to a log-probability. Useful for classification problems
print('Lenet5n' .. net:__tostring());
CIFAR-10データセット
3x32x32 50,000訓練用データ、10,000テストデータ
https://s3.amazonaws.com/torch7/data/cifar10torchsmall.zip
ニューラル・ネットワークを使う
1. ロードとデータの正規化
2. ニューラル・ネットワークを定義する
3. 損失関数を定義する
4. 訓練用データで、ネットワークを訓練する
5. テスト用データで、ネットワークをテストする
1. ロードとデータの正規化
-- os.execute(
‘wget -c https://s3.amazonaws.com/torch7/data/cifar10torchsmall.zip’)
-- os.execute(‘unzip cifar10torchsmall.zip’)
trainset = torch.load(‘cifar10-train.t7’)
testset = torch.load(‘cifar10-test.t7’)
classes = {‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’,
‘horse', 'ship', 'truck'}
itorch.image(trainset.data[100]) -- display the 100-th image in dataset
print(classes[trainset.label[100]])
2. ニューラル・ネットワークを定義する
require ‘nn’
net = nn.Sequential()
net:add(nn.SpatialConvolution(3, 6, 5, 5))
-- 3 input image channel, 6 output channels, 5x5 convolution kernel
net:add(nn.SpatialMaxPooling(2,2,2,2))
-- A max-pooling operation that looks at 2x2 windows and finds the max.
net:add(nn.SpatialConvolution(6, 16, 5, 5))
net:add(nn.SpatialMaxPooling(2,2,2,2))
net:add(nn.View(16*5*5))
-- reshapes from a 3D tensor of 16x5x5 into 1D tensor of 16*5*5
net:add(nn.Linear(16*5*5, 120))
-- fully connected layer (matrix multiplication between input and weights)
net:add(nn.Linear(120, 84))
net:add(nn.Linear(84, 10))
-- 10 is the number of outputs of the network (in this case, 10 digits)
net:add(nn.LogSoftMax())
-- converts the output to a log-probability. Useful for classification problems
print('Lenet5n' .. net:__tostring());
3. 損失関数を定義する
4. ネットワークを訓練する
criterion = nn.ClassNLLCriterion()
-- Log-likelihood Classificationを使う
trainer = nn.StochasticGradient(net, criterion)
trainer.learningRate = 0.001
trainer.maxIteration = 5 -- just do 5 epochs of training.
trainer:train(trainset)
5. ネットワークをテストし、精度を
チェックする
print(classes[testset.label[100]])
itorch.image(testset.data[100])
-- Let us display an image from the test set to get familiar.
testset.data = testset.data:double()
-- convert from Byte tensor to Double tensor
for i=1,3 do -- over each image channel
testset.data[{ {}, {i}, {}, {} }]:add(-mean[i])
-- mean subtraction
testset.data[{ {}, {i}, {}, {} }]:div(stdv[i])
-- std scaling
end
“Torch Deep Learning Module”
のオープンソース化の発表
“FAIR open sources deep-learning modules
for Torch” 2015年1月16日
https://goo.gl/Yg98OO
 科学と技術における進歩は、科学者が結果だけを共有す
るのではなく、ツールや方法も共有するときに、加速する。
それが、Facebook AI Research (FAIR)が、オープン
な科学とそのツールをオープン化することにコミットしてい
る理由の一つである。
 FAIRにおける機械学習とAIの研究プロジェクトの多くは、
Torchを利用している。それは、ディープ・ラーニングとコ
ンボリューション・ネットに特に力点を置いた、数値計算、
機械学習、コンピュータ・ビジョン向けのオープンソースの
開発環境である。Torchは、多くのアカデミーの研究所で
利用されているだけでなく、 Google/DeepMind,
Twitter, NVIDIA, AMD, Intel といった多くの企業で
利用されている。
 本日、我々は、Torchの最適化されたディープ・ラーニン
グモジュール群をオープンソース化した。これらのモ
ジュールは、これまでのTorchのデフォールトより、極めて
高速であり、より大きなニューラル・ネットをより少ない時
間で訓練することを可能にして、我々の研究プロジェクト
を加速させてきた。
 このリリースは、大規模なコンボリューション・ネット
(ConvNets)と、自然言語処理アプリケーションで共通に
利用される、疎に活性化されるネットワーク用のGPUに最
適化されたモジュールを含んでいる。このConvNetモ
ジュールは、 NVIDIAのcuFFTライブラリーの上に構築さ
れた専用のCUDAカーネルを用いた高速FFTベースのコ
ンボリューション層を含んでいる。
 このモジュールに加えて、今回のリリースには、次のよう
な数多くのCUDAベースのモジュールとコンテナが含まれ
ている。
 ユーザーが、データ・パラレル・モデル(GPU上でのミニ・
バッチによる分割)か、あるいは、モデル・パラレル・モデ
ル(複数のGPU上でのネットワーク分割)の双方を使って、
複数のGPU上での訓練の並列化を可能にするコンテナ。
 離散的なオブジェクト(語のような)の埋め込みの学習や
ニューロンの言語モデルにしばしば利用される最適化さ
れた検索テーブル。
 非常に大きな数からなるクラスの訓練をスピードアップす
る階層的な SoftMax モジュール。
 あるタイプのビジュアルやテキスト・モデルで利用される
Cross-map pooling (MaxOutとして知られている)
 Frank Seide 他の論文に基づいた 1-bit SGDの実装。
 非常に高速なテンポラルなコンボリューション層。それは、
典型的には、発話認識や自然言語アプリで利用される
1-Dコンボリューションの入力をカーネルで計算する。
我々のバージョンは、元のTorchでの実装を、同じBLAS
プリミティブを使って、非常に効率的な枠組みで改良した
ものである。一つのGPUで、入力・カーネル・ストライドの
サイズによって変わるのだが、3倍から10倍の範囲で高
速化することが観察されている。
FFTベースのコンボリューション層コード
 今回のリリースの最も重要な部分は、FFTベースのコンボ
リューション層のコードを含んでいる。というのも、
ConvNetsの訓練での計算時間の大部分を、コンボ
リューションが占めているからである。これらのモデルの
訓練時間の改善は、より迅速な研究・開発をもたらすので、
我々はGPUコンボリューション層の改善に、多くのエンジ
ニアリングの努力を費やした。この作業は、めざましい成
果を生み出した。現在公開されているコードで最速のもの
と比較して、23.5倍の高速化を達成した。我々が言い得
る限りでは、我々のコードは、典型的なディープConvNet
のようなポピュラーなアーキテクチャーでのImageNet
データセットでのオブジェクト認識の訓練で使われている、
公開されている利用可能ないかなるコードより高速である。
参考資料
 “Torch -- A scientific computing framework for
LuaJIT” http://torch.ch/
 “Getting started with Torch”
http://goo.gl/J7NKxC
 “Deep Learning with Torch: the 60-minute blitz”
https://goo.gl/A76kjA
 “Neural Network Graph Package”
https://github.com/torch/nngraph
参考資料
 “Fast Convolutional Nets With fbfft: A GPU
Performance Evaluation” http://goo.gl/PLDanO
 “Fast Training of Convolutional Networks
through FFTs” http://goo.gl/B2qFVq
 “Training an Object Classifier in Torch-7 on
multiple GPUs over ImageNet”
https://goo.gl/b14XOI
Caffe
Caffeは、現在Googleにいる Yangqing Jia が、
UC Berkleyの院生時代に開始したオープンソース
のプロジェクトである。
http://caffe.berkeleyvision.org/
なぜCaffeなのか?
 表現力のあるアーキテキチャーは、アプリケーションとイノ
ベーションを勇気付ける。モデルと最適化は、設定によっ
てハードコードすることなく定義される。CPUとGPUとの間
の切り替えは、GPUマシンで訓練する時に、フラグを一つ
立てるだけである。そのあとで、普通のクラスターなりモバ
イル・デバイスにデプロイすればいい。
 拡張可能なコードは、アクティブな開発を促進する。Caffe
は、最初の一年で、1,000人以上の開発者によって、
forkが行われて、数多くの重要な変化が、彼らの貢献で
なされた。このフレームワークが、コードでもモデルでも、
最新の道を走っていることで、彼らコントリビュータに感謝
している。
なぜCaffeなのか?
 スピード は、実験的研究でも産業界での応用でも、
Caffeを完璧なものにした。Caffeは、一つNVIDIA K40
GPUで、一日あたり、6,000万以上の画像を処理できる。
これは、一画像あたり、推定に1ms、学習に4msというス
ピードである。我々は、Caffeは、利用可能なConvnetの
実装で、最速であると信じている。
 コミュニティ: Caffeは、すでに、アカデミックな研究プロ
ジェクト、スタートアップ企業のプロトタイプ、さらには、ビ
ジョンやスピーチやマルチメディアのアプリでは、大規模な
産業用のアプリにおいても力を発揮している。 caffe-
users group と Githubで、コーヒーを育てる我々のコ
ミュニティに加わって欲しい。
Cafe Tutorial
http://caffe.berkeleyvision.org/tutorial/
Blob storage and communication
// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // data copied cpu->gpu.
foo = blob.cpu_data();
// no data copied since both have up-to-date contents.
bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data();
// no data copied when we are still on GPU.
foo = blob.cpu_data();
// data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data();
// no data copied since both have up-to-date contents
bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.
name: "LogReg"
layer {
name: "mnist"
type: "Data”
top: "data"
top: "label”
data_param {
source: "input_leveldb"
batch_size: 64 }
}
layer {
name: "ip”
type: "InnerProduct”
bottom: "data”
top: "ip”
inner_product_param {
num_output: 2 }
}
layer {
name: "loss”
type: "SoftmaxWithLoss”
bottom: "ip”
bottom: "label”
top: "loss"
}
Net definition and operation
syntax = "proto2”;
package caffe;
// Specifies the shape (dimensions) of a Blob.message
BlobShape {
repeated int64 dim = 1 [packed = true];
}
message BlobProto {
optional BlobShape shape = 7;
repeated float data = 5 [packed = true];
repeated float diff = 6 [packed = true];
repeated double double_data = 8 [packed = true];
repeated double double_diff = 9 [packed = true];
// 4D dimensions -- deprecated. Use "shape" instead.
optional int32 num = 1 [default = 0];
optional int32 channels = 2 [default = 0];
optional int32 height = 3 [default = 0];
optional int32 width = 4 [default = 0];}
.....
.....
Caffe.proto Google Ptotocol Buffer
layer {
name: "loss"
type: "SoftmaxWithLoss”
bottom: "pred”
bottom: "label”
top: "loss"
}
layer {
name: "loss"
type: "SoftmaxWithLoss”
bottom: "pred”
bottom: "label”
top: "loss”
loss_weight: 1
}
loss := 0
for layer in layers:
for top, loss_weight in layer.tops, layer.loss_weights:
loss += loss_weight * sum(top)
Loss
Solver
1. scaffolds the optimization bookkeeping and
creates the training network for learning and
test network(s) for evaluation.
2. iteratively optimizes by calling forward /
backward and updating parameters
3. (periodically) evaluates the test networks
4. snapshots the model and solver state
throughout the optimization
1. calls network forward to compute the output
and loss
2. calls network backward to compute the
gradients
3. incorporates the gradients into parameter
updates according to the solver method
4. updates the solver state according to learning
rate, history, and method
Solver prototxt file
base_lr: 0.01 # begin training at a learning rate of 0.01 = 1e-2
lr_policy: "step" # learning rate policy: drop the learning rate in "steps”
# by a factor of gamma every stepsize iterations
gamma: 0.1 # drop the learning rate by a factor of 10
# (i.e., multiply it by a factor of gamma = 0.1)
stepsize: 100000 # drop the learning rate every 100K iterations
max_iter: 350000 # train for 350K iterations total
momentum: 0.9
Layers Sample
http://caffe.berkeleyvision.org/tutorial/laye
rs.html
layer {
name: "conv1”
type: "Convolution”
bottom: "data”
top: "conv1”
# learning rate and decay multipliers for the filters
param { lr_mult: 1 decay_mult: 1 }
# learning rate and decay multipliers for the biases
param { lr_mult: 2 decay_mult: 0 }
convolution_param {
num_output: 96 # learn 96 filters
kernel_size: 11 # each filter is 11x11
stride: 4 # step 4 pixels between each filter application
weight_filler {
type: "gaussian" # initialize the filters from a Gaussian
std: 0.01 # distribution with stdev 0.01 (default mean: 0)
}
bias_filler {
type: "constant" # initialize the biases to zero (0)
value: 0
}
}
}
Vision Layers / Convolution
layer {
name: "pool1”
type: "Pooling”
bottom: "conv1”
top: "pool1”
pooling_param {
pool: MAX
kernel_size: 3 # pool over a 3x3 region
stride: 2 # step two pixels (in the bottom blob)
# between pooling regions
}
}
Vision Layers / Pooling
Loss Layers
# L1 Norm
layer {
name: "loss"
type: "HingeLoss"
bottom: "pred"
bottom: "label" }
# L2 Norm
layer {
name: "loss"
type: "HingeLoss"
bottom: "pred"
bottom: "label"
top: "loss"
hinge_loss_param { norm: L2 }
}
その他のLayers
 Activation / Neuron Layers
 ReLU / Rectified-Linear and Leaky-ReLU
 Sigmoid
 TanH / Hyperbolic Tangent
 ...
 Data Layers
 Database
 In-Memory
 HDF5 Input
 HDF5 Output
 Images
 ....
layer {
name: "mnist"
# Data layer loads leveldb or lmdb storage DBs for high-throughput.
type: "Data"
# the 1st top is the data itself: the name is only convention
top: "data" # the 2nd top is the ground truth: the name is only convention
top: "label" # the Data layer configuration
data_param {
# path to the DB
source: "examples/mnist/mnist_train_lmdb"
# type of DB: LEVELDB or LMDB (LMDB supports concurrent reads)
backend: LMDB
# batch processing improves efficiency.
batch_size: 64
}
# common data transformations
transform_param {
# feature scaling coefficient: this maps the [0, 255] MNIST data to [0, 1]
scale: 0.00390625
}
}
Data Layer 定義サンプル
その他のLayers
 Common Layers
 Inner Product
 Splitting
 Flaterning
 Reshape
 Concatanation
 Slicing
 ...
Azure ML Net#
「Azure Machine Learning のための Net#
ニューラル ネットワーク仕様言語について」
https://goo.gl/DKqSBY
結合バンドル
 ニューラル ネットワーク構造は、いくつかの層に編成され
たノードによって構成され、各ノード間には、重み付けられ
た結合 (またはエッジ) があります。結合にはそれぞれ方
向があり、結合ごとにソース ノードと宛先ノードを持ちます。
 それぞれのトレーニング可能層 (隠れ層または出力層)
には 1 つ以上の結合バンドルがあります。結合バンドル
は、ソース層と、そのソース層からの結合の仕様で構成さ
れています。指定のバンドルでは、すべての結合が同じ
ソース層と同じ宛先層を共有します。Net# では、結合バ
ンドルはバンドルの宛先層に属すると見なされます。
結合バンドルのタイプ
 既定つまり標準のバンドルは、フル バンドルです。このバ
ンドルでは、ソース層の各ノードが宛先層のすべてのノー
ドに結合します。(keyword ‘all’)
 フィルター バンドル。ユーザーは、ソース層ノードと宛先
層ノードの場所を使用して述語を定義できます。述語が
True の場合は常にノードが結合されます。(keyword
‘where’)
 畳み込みバンドル。ユーザーはソース層の少数の隣接
ノードを定義できます。宛先層の各ノードは、ソース層の
隣接ノードの 1 つに結合します。(keyword
‘convolve’)
結合バンドルのタイプ
 プーリング バンドル (keyword ‘max pool’ または、’
mean pool’) および応答正規化バンドル (keyword
‘response norm’)。 これは、ユーザーがソース層の
少数の隣接ノードを定義するという点で畳み込みバンドル
と似ています。違いは、これらのバンドルのエッジの重み
がトレーニング可能でないことです。代わりに、定義済み
の関数がソース ノード値に適用され、宛先ノードの値を判
断します。
サポートされるカスタマイズ
 隠れ層を作成し、各層のノード数を管理する。
 層間の結合方法を指定する。
 畳み込みや重み共有バンドルなどの特殊な結合性の構
造を定義する。
 複数のアクティブ化関数を指定する。
// 構造には、Pixels と MetaData という 2 つの入力層がある
input Pixels [10, 20];
input MetaData [7];
// Pixels 層は、宛先層 ByRowとByCol を持つ、2 つの結合バンドルに対するソース層
hidden ByRow [10, 12] from Pixels where (s,d) => s[0] == d[0];
hidden ByCol [5, 20] from Pixels where (s,d) => abs(s[1] - d[1]) <= 1;
// Gather 層と Result 層は、複数の接続バンドルにある宛先層
hidden Gather [100]
{
from ByRow all;
from ByCol all;
}
// 出力層の Result は、2 つの結合バンドルにある宛先層。1 つは宛先層として2 番目の
// 隠れ層 (Gather) を持ち、残りの 1 つは宛先層として入力層 MetaData を持つ
output Result [10]
{
from Gather all;
from MetaData all;
}
複数の隠れ層の定義: コンピューター ビジョンの例
input Image [29, 29];
hidden Conv1 [5, 13, 13] from Image convolve
{
InputShape = [29, 29];
KernelShape = [ 5, 5];
Stride = [ 2, 2];
MapCount = 5;
}
hidden Conv2 [50, 5, 5] from Conv1 convolve
{
InputShape = [ 5, 13, 13];
KernelShape = [ 1, 5, 5];
Stride = [ 1, 2, 2];
Sharing = [false, true, true];
MapCount = 10;
}
hidden Hid3 [100] from Conv2 all;
output Digit [10] from Hid3 all;
複数クラス分類の畳み込みネットワークの定義: 数字認識の例
複数クラス分類の畳み込みネット
ワークの定義: 数字認識の例
 構造には単一の入力層 Image があります。
 キーワード convolve は、Conv1 および Conv2 が畳
み込み層であることを示しています。これらの各層の宣言
には、畳み込み属性の一覧が続きます。
 このネットワークには第 3 の隠れ層 Hid3 があり、これ
は第 2 の隠れ層 Conv2 に完全結合されます。
 出力層である Digit は、第 3 の隠れ層 Hid3 のみに結
合されます。キーワード all は、出力層が Hid3 に完全
結合されることを示しています。
Part 3
パーソナル・アシスタント・
システムの現在
 Google Now, Siri
 Microsoft Cortana
 Amazon Alexa
パーソナル・アシスタント・システム
の現在
パーソナル・アシスタント・システム
 AndroidのGoogle Now、iPhoneのSiri、Windowsの
Cortana等の、音声インターフェースの「パーソナル・アシ
スタント・システム」は、多くの人に、AI時代の到来を、一
般のユーザーに印象付ける上で大きな役割を果たしてい
る。AmazonのAlexa、FacebookのMも、そうした動き
に追随している。
 これらの技術は、先の分類では、B. 領域の技術を用いて、
この間、急速に精度を向上させた音声認識(Speech
Recognision)技術とテキスト発声技術(Text-to-
Speech)を、共通のベースにしている。
 ただ、これらのシステムの実装は、現在の機械学習技術・
AI技術の課題をよく示している。
パーソナル・アシスタント・システム
 残念ながら、その実装の多くは、知能を持つというより、
Turingのテストを見かけ上パスしようとしているだけの、
「Turing Test Machine」 と呼ぶべきものである。
 パーソナル・アシスタント・システムを含む質問応答システ
ムの雄は、なんといっても、IBM Watsonである。それは、
単純な「Turing Test Machine」 を超えようという試み
の一つである。レクチャーの後半で、Watsonの技術につ
いて、少し詳しく紹介しようと思う。
Google Now
Google Now API ?
 音声質問応答システムとしてのGoogle NowのAPIは、
公開されていない。
 "Google Now API Will Soon Be Available to
Developers to Put in Their Apps"「Google Nowの
APIが、すぐにでもアプリ開発者に利用可能に ...」
http://goo.gl/X42UuO
 こんな報道も。"An Open Google Now Is About to
Make Android Super Smart" 「オープンなGoogle
Nowは、Android をとびきり賢くしようとしている」
http://goo.gl/WsGMSo
 ただ、注意して欲しいのは、これは、音声質問応答システ
ムとしてのGoogle NowのAPIのオープン化のことでは
ないということだ。
Google Nowの二つの顔
 Google Nowには、二つの顔がある。一つの顔は、音声
応答システムだが、もう一つの顔は、カード・ベースの
ユーザー支援システムである。Googleがオープン化をし
ようとしているのは、後者のGoogle Nowである。
 カード・ベースのユーザー支援システムは、Gmailや
Google カレンダーやGoogle MapやGoogle検索と
いったアプリ(現在は、Googleのアプリが中心である)の
利用履歴や情報から、ユーザーに有用な情報をまとめて
カードの形式で通知する。この仕掛けは、ユーザーのプラ
イバシー保護との関係では、ギリギリの所をついていて、
その意味ではとても興味ふかいのだが、それについては
別の機会に触れたい。
Google Nowのオープン化の狙い
 この意味でのGoogle Nowのオープン化は、サード・
パーティのアプリにも、この仕掛けを利用してもらうことで、
ユーザーに利便性を提供するとともに、最終的には、
Googleがユーザーのビヘービィアの把握の網の目を広
げることにつながる。
 それは、技術の共有という単純なオープンソース化ではな
く、Googleのエコシステムの拡大と密接に結びついてい
る。少なくないアプリが、すでに、Google Nowのカードを
使っている。
http://www.google.com/landing/now/integratio
ns.html
Google Nowの「下半身」
 Googleは、音声質問応答システムとしてのGoogle
NowのAPIを公開するであろうか? 多分、しないと思う。
 Google Nowは、単純なTuring Test Machine ではな
い。Google Nowの下半身は、Googleの検索システム
そのものと融合している。それはまた、Googleの広告ビ
ジネスと深く結びついている。その「秘密」を公開すること
はないだろうと、僕は考えている。
 今回のマルレクのテーマは「機械学習技術」である。脳と
の対比で機械が学習するというイメージは、「学習の主
体」としてはわかりやすい。ただ、機械だけでなく、グロー
バルに拡大したネットワークも学習しうる。その「主体」は、
本来は、Sky-NetでもGoogleでもないと思うのだが。
検索の「知識検索」への変化
 Google Nowの「下半身」である、Google検索は、Web
スケールの大量のデータから文字列を抽出してそのリン
クのリストを返すというスタイルから、2012年の
Knowledge Graphの導入を機に、ユーザーが知りたい
もの、探している「答え」を返すというものに大きく変わった。
見かけは、あまり変わったように見えないかもしれないの
だが、文字列の検索から「知識」の検索への変化は、シス
テムの入れ替えを伴う大きな転換であった。
検索の「知識検索」への変化
 このあたりのことは、過去のマルレクでも取り上げている。
次の資料を参考にされたい。
 「Googleの新しい検索技術 Knowledge Graph に
ついて」
https://goo.gl/pqsHlj
 「大規模グラフデータ処理」
http://bit.ly/1zK41gv
 「大規模分散システムの現在 --- GFS,MapReduce,
BigTableは、どう進化したか」
http://bit.ly/10yW52d
「意味」を検索する
 ただ、これらの情報も過去のもので十分なものではない。
Googleの検索システムは、やりたいこととできることの技
術的矛盾の中で、ダイナミックに変化を続けている。(例え
ば、リアルタイム処理の志向の中で、バッチ処理の
MapReduceは置き換えられたが、グラフ処理のPregel
は、もちろん、そのオープンソース版であるGiraphも、
バッチ処理だ。)
 そして、現在も、「意味」のある情報の検索をめぐる競争は、
Google、Microsoft の間で、熾烈に戦われている(個人
的には、Bingは、健闘していると思う)。それに、グラフ検
索では、Facebookもチャレンジングな取り組みをしてい
る。「意味検索」は、狭義の「機械学習技術」には含まれな
いと考えてもいいのだが、現代のIT技術、大規模分散シ
ステムの未来の主戦場である。
 皮肉なことに、Google検索の実装の詳細は、よくわから
ないのだが、その現象的な振る舞いの変化については、
実によく分析されている。このあたりについては、僕は、熱
心なフォロアーではないのだが、興味のある人は、例えば、
次のサイトの情報を見てみるのがいい。
"Search Engine Land"
http://searchengineland.com/
 この分野は、技術的にだけでなく、現代の「広告ビジネス」
の最前線でもある。この点では、次の「ノート」を参照され
たい(未完であるのだが)。
「IT技術とネットワーク広告(1)」
https://goo.gl/iniMFW
Siri API?
 SiriのAPIは、公開されていない(ように見える)。いくつか
のアプリには、SiriのAPIを提供しているようだが、詳しい
ことはわからない。Androidに、Taskerのような音声コマ
ンドアプリがあるように、iOSにも、同様のアプリはあるよ
うだ。Speechkit "Building an iOS App like
Siri" http://goo.gl/3L4lgG
 Siriの実装の中身はわからないのだが、きっと、cortana,
Echo Allex と同種の実装だと思う。(会話しているとわか
ることがある)
 Siriの実装は非公開だといったが、Siriのパケットから、そ
のプロトコルを解析した強者がいる。
SiriProxy https://github.com/plamoni/SiriProxy
は、Proxyサーバーで、siriパケットを横取りして、siriの
機能のユーザー拡張ができる。
 次のビデオは、このSiriProxyを使って、iPhoneから音声
で自宅のサーモスタットを操作する面白いデモ。
https://www.youtube.com/watch?v=AN6wy0ke
Qqo
 ただ、siriのプロトコルが変更されて、iOS7以降の対応は
していない。やればできると言っているのだが、その道は
とらなかったみたい。https://goo.gl/Pdu6wk
Microsoft Cortana
Cortana VCD
Cortama をプログラムするには、Voice
Commandをあらかじめ定義しておくのが基本。
VoiceCommandDefinition (VCD)のサンプルは、
以下にある。https://goo.gl/jskqr4
<VoiceCommands xmlns=“....">
<CommandSet xml:lang="en-us” Name=”....">
....
<Command Name=”showTripToDestination“>
<Example> Show trip to London </Example>
<ListenFor RequireAppName=”....“> 聞き取り
show [my] trip to {destination}
</ListenFor>
<ListenFor RequireAppName=”....“> 聞き取り
show [my] {builtin:AppName} trip to {destination}
</ListenFor>
<Feedback> 読み上げ
Showing trip to {destination}
</Feedback>
<Navigate Target="foo"/>
</Command>
Voice Command Definitionの形式
helloGoodbye「こんにちは」 「さようなら」
<VoiceCommands ...
<CommandSet ...
<Command Name=“helloGoodbye">
<ListenFor ...>
こんにちは
</ListenFor>
<Feedback> さようなら </Feedback>
...
</Command>
音声入力 音声出力
音声コマンド
音声コマンドの定義ファイル
helloGoodbye「こんにちは」 「さようなら」
音声入力 音声出力
音声コマンド
protected override void OnActivated {
...
string voiceCommandName = ... // 音声イベントから音声コマンド名を
// 取得するおまじない
switch (voiceCommandName) {
case ”helloGoodbye":
...
// 遷移するページ、テキスト出力、その他の処理
...
break;
default:
// 聞き取れなかったよ
break;
}
}
音声コマンドのプログラムのスタイル
Voice Commandの定義サンプル
<VoiceCommands
xmlns="http://schemas.microsoft.com/voicecommands/1.2">
<CommandSet xml:lang="en-us”
Name="AdventureWorksCommandSet_en-us">
<CommandPrefix> Adventure Works, </CommandPrefix>
<Example> Show trip to London </Example>
<Command Name="showTripToDestination">
<Example> Show trip to London </Example>
<ListenFor RequireAppName="BeforeOrAfterPhrase">
show [my] trip to {destination}
</ListenFor>
<ListenFor RequireAppName="ExplicitlySpecified">
show [my] {builtin:AppName} trip to {destination}
</ListenFor>
<Feedback> Showing trip to {destination} </Feedback>
<Navigate Target="foo"/>
</Command>
<Command Name="showTripToDestination">
<Example>Montrer mon voyage à Londres</Example>
<ListenFor RequireAppName="BeforeOrAfterPhrase">
montrer [mon] voyage à {destination}
</ListenFor>
<ListenFor RequireAppName="ExplicitlySpecified">
montrer [mon] {builtin:AppName} voyage à {destination}
</ListenFor>
<Feedback>
Voici les détails du votre voyage à {destination}
</Feedback>
<Navigate Target="foo"/>
</Command>
<Command Name="showTripToDestination">
<Example>显示伦敦之行</Example>
<ListenFor>显示[我]去{destination}的旅行</ListenFor>
<ListenFor RequireAppName="ExplicitlySpecified">
显示[我]{builtin:AppName}去{destination}的旅行
</ListenFor>
<Feedback>显示{destination}之行</Feedback>
<Navigate Target="foo"/>
</Command>
フランス語
中国語
VCD ListenFor タグ
 Command要素の、必須の子要素(10個まで)。
このコマンドのためにアプリが認識するフレーズを含んでいる。
それには、 PhraseList (あるいは PhraseTopic)要素の
Label属性が含まれていてもいい。例えば、
{myList} あるいは {myTopic}のように。
 オプショナルな RequireAppName は、 AppName 要素
が、コマンド呼び出しの際に、どのように用いられるかを指定す
る。次のようなものがある。
 BeforePhrase : ListenForフレーズの前にAppNameを言う
 AfterPhrase : ListenFor + "In|On|Using|With” +AppName
 BeforeOrAfterPhrase : どちらでもいい
 ExplicitlySpecified : ListenForの中にAppNameを含める
VCD ListenFor タグ
 オプショナルな語句は、[]で囲む。話されても話されなくても
マッチには影響しない。
<ListenFor> [Show] {options} </ListenFor>
 次のような記述も可能である。
<ListenFor> Find {*} </ListenFor>
この時、Find ... 以下のフレーズを含めてマッチする。この一
致したフレーズは、SpeechRecognitionResult.Text
プロパティに格納される。
VCD Feedback タグ
 Command要素の、必須の子要素。
コマンドが認識された時に、ユーザー側に表示し、読み上
げられる内容を指定する。
 Feedback要素は、 PhraseList (あるいは
PhraseTopic)要素のLabel属性を含むことができる。
この時、このコマンドのListenFor要素は、同じLabelを含
まなければならない。
VCD PhraseList タグ
 CommandSet 要素のオプショナルな子要素。
一つのCommandSetは、2,000個までのItem要素を
持つことができる。
<CommandSet ...>
<Command Name="cancelTripToDestination"> ...
<ListenFor RequireAppName="BeforeOrAfterPhrase">
cancel [my] trip to {destination}
</ListenFor> ...
<Feedback> Cancelling trip to {destination}</Feedback>
</Command>
<PhraseList Label=“destination”>
<Item>London</Item>
<Item>Las Vegas</Item>
<Item>Melbourne</Item>
<Item>Yosemite National Park</Item>
</PhraseList>
</CommandSet>
Cortana プログラミング
Cortanaを利用したアプリのプログラミングの流れを、
追ってみよう。
https://code.msdn.microsoft.com/Voice-
Commands-Quickstart-64ce68ce#content
プログラムの基本的な流れ
1. Voice Command Definitionを作成する
2. アプリの起動時にVCDをインストールし、Voice
CommandがアプリをActivateするように登録する。
3. アプリをActivateしたイベントが、話されたものかテキスト
かをチェックする。
4. Voice Commandのパラメーターに基づいて、ページの
遷移を準備する。
5. Phrase Topicを使って、聞き取りを許す。
6. Phrase TopicのSubjectを利用して、認識結果を洗練さ
せる。
7. text-to-speech(TTS)を使って、音声で応答する。
8. ....
VCDのインストールと登録
 VCDのインストールは、アプリの起動時に行われる。
protected override async void OnLaunched
(LaunchActivatedEventArgs e) in App.xaml.cs
var storageFile = await
Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
new Uri(“ms-appx:///QuickstartCommands.xml”));
await Windows.Media.SpeechRecognition.VoiceCommandManager.
InstallCommandSetsFromStorageFileAsync(storageFile);
もちろん、イベント・ドリブンの
プログラミング・スタイルである。
イベントのチェックと読み取り
 Voice CommandがActiveになった時、呼び出される。
protected override void OnActivated
(IActivatedEventArgs e) in App.xaml.cs
// Was the app activated by a voice command?
if (e.Kind !=
Windows.ApplicationModel.Activation.ActivationKind.VoiceCommand)
{ return; }
var commandArgs = e as
Windows.ApplicationModel.Activation.VoiceCommandActivatedEventArgs;
Windows.Media.SpeechRecognition.SpeechRecognitionResult
speechRecognitionResult = commandArgs.Result;
もちろん、イベント・ドリブンの
プログラミング・スタイルである。
// The commandMode is either “voice” or “text”, and it indicates
// how the voice command was entered by the user.
// We should respect "text" mode by providing feedback in a silent form.
string commandMode = this.SemanticInterpretation(
"commandMode", speechRecognitionResult);
// If so, get the name of the voice command, the actual text spoken,
// and the value of Command/Navigate@Target.
string voiceCommandName = speechRecognitionResult.RulePath[0];
string textSpoken = speechRecognitionResult.Text;
string navigationTarget = this.SemanticInterpretation(
"NavigationTarget", speechRecognitionResult);
Type navigateToPageType = typeof(MainPage);
string navigationParameterString = string.Empty;
様々なパラメーターの取得
switch (voiceCommandName)
{
case “showASection”:
case “goToASection”:
string newspaperSection = this.SemanticInterpretation(
“newspaperSection”, speechRecognitionResult);
navigateToPageType = typeof(ShowASectionPage);
navigationParameterString = string.Format("{0}|{1}",
commandMode, newspaperSection);
break;
case "message":
case "text":
string contact = this.SemanticInterpretation(
"contact", speechRecognitionResult);
string msgText = this.SemanticInterpretation(
"msgText", speechRecognitionResult);
navigateToPageType = typeof(MessagePage);
navigationParameterString = string.Format("{0}|{1}|{2}",
commandMode, contact, msgText);
break;
case "playAMovie":
string movieSearch = this.SemanticInterpretation(
"movieSearch", speechRecognitionResult);
navigateToPageType = typeof(PlayAMoviePage);
navigationParameterString = string.Format("{0}|{1}",
commandMode, movieSearch);
break;
default:
// There is no match for the voice command name.
break;
}
<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns=
"http://schemas.microsoft.com/voicecommands/1.1">
<CommandSet xml:lang="en-us" Name="commandSet_en-us">
<CommandPrefix> Quickstart, </CommandPrefix>
<Example> Show sports section </Example>
<Command Name="showASection">
<Example> show sports section </Example>
<ListenFor> [show] {newspaperSection} [section] </ListenFor>
<Feedback> Showing the {newspaperSection} section </Feedback>
<Navigate Target="ShowASectionPage.xaml"/>
</Command>
<Command Name="goToASection">
<Example> go to the sports section </Example>
<ListenFor> [go to] [the] {newspaperSection} [section] </ListenFor>
<Feedback> Going to the {newspaperSection} section </Feedback>
<Navigate Target="ShowASectionPage.xaml"/>
</Command>
Voice Command Definition File
<Command Name="message">
<Example> message Avery I'm running late </Example>
<ListenFor> message {contact} {msgText} </ListenFor>
<Feedback> Messaging {contact} {msgText} </Feedback>
<Navigate Target="MessagePage.xaml"/>
</Command>
<Command Name="text">
<Example> text Avery I'm running late </Example>
<ListenFor> text {contact} {msgText} </ListenFor>
<Feedback> Texting {contact} {msgText} </Feedback>
<Navigate Target="MessagePage.xaml"/>
</Command>
<Command Name="playAMovie">
<Example> Play Casablanca </Example>
<ListenFor> Play {movieSearch} </ListenFor>
<Feedback> Playing {movieSearch} </Feedback>
<Navigate Target="PlayAMoviePage.xaml"/>
</Command>
<PhraseList Label="newspaperSection">
<Item> national news </Item>
<Item> world news </Item>
<Item> sports </Item>
</PhraseList>
<PhraseList Label="contact">
<Item> Avery </Item>
<Item> Monica </Item>
<Item> Rob </Item>
</PhraseList>
<PhraseTopic Label="msgText" Scenario="Short Message"/>
<PhraseTopic Label="movieSearch" Scenario="Search">
<Subject>Movies</Subject>
</PhraseTopic>
</CommandSet>
<!-- Other CommandSets for other languages -->
</VoiceCommands>
Amazon Alexa
Amazon EchoとAlexa
 Amazon Echoの振る舞いについては、"Getting
Started with the Alexa Skills
Kit" https://goo.gl/0AdR1T
 "Alexa Skills Kit Voice Design
Handbook" https://goo.gl/wSrkdq
 Resources https://goo.gl/h9VTEx
Alexa 会話サンプル
 User: “Alexa, tell Greeter to say hello”
Alexa: “Hello World!”
 User: “Alexa, ask History Buff what happened
on August 20th”
Alexa: (Reads back three events, in reverse
chronological order) “Want to go deeper in
history?”
User: “Yes”
Alexa: (Reads back next set of three
events) “Want to go deeper in history?”
User: “No”
Alexa 会話サンプル
 User: “Alexa, ask savvy consumer for top
books.”
Alexa: “Getting the best sellers for books. The
top seller for books is…(reads top
seller)…Would you like to hear more?”
User: “Yes”
Alexa: (reads back three book titles) “Would
you like to hear more?”
User: “No”
 User: “Alexa, tell session my color is green.”
Alexa: “I now know that your favorite color is
green…”
Alexa 会話サンプル
 User: “Alexa, tell score keeper to reset.”
Alexa: “New game started without players.
Who do you want to add first?”
User: “Add the player Bob”
Alexa: “Bob has joined your game”
User: “Add the player Jeff”
Alexa: “Jeff has joined your game”
(service saves the new game and ends)
 User: “Alexa, tell score keeper to give red team
three points.”
Alexa: “Updating your score, three points for
red team”
(service saves the latest score and ends)
主要なコマンド Ask と Tell
 Ask recipes how do I make an omelet?
 Ask daily horoscopes what’s the horoscope for
Taurus
 Ask daily horoscopes to give me the
horoscope for Taurus.
 Ask daily horoscopes about Taurus
 Tell scorekeeper to give ten points to Stephen
 Tell scorekeeper that Stephen has ten points.
 Tell scorekeeper
その他のコマンド
 Talk to <invocation name>
 Talk to <invocation name> and <command>
 Open <invocation name>
 Open <invocation name> and <command>
 Launch <invocation name>
 Launch <invocation name> and <command>
 Start <invocation name>
 Start <invocation name> and <command>
 Use <invocation name>
 Use <invocation name> and <command>
 ....
Speechlet「こんにちは」 「さようなら」
Request Response
SampleUtterances.txt
HelloIntent こんにちは
HelloIntent はい。こんにちは
HelloIntent おい
HelloIntent こら
HelloIntent なんかいって
HelloIntent お元気ですか
HelloIntent お元気
HelpIntent ヘルプ
HelpIntent 助けて
HelpIntent どうすればいい
HelpIntent お願い
入力の発話を待ち受けて、
マッチすれば、定義された
Intent Name に対応づける。
Intentは、Requestの一部
として、Speechletに送られ
る。
cortanaと違って、出力用の
データは、プログラム中に
ハードコードされる。
Speechlet「こんにちは」 「さようなら」
Request Response
SampleUtterances.txt
public SpeechletResponse onIntent (...) ... {
...
if ("HelloIntent".equals(intentName)) {
return getHelloResponse();
} else if ("HelpIntent".equals(intentName)) {
return getHelpResponse();
} else {
throw new SpeechletException("Invalid Intent");
}
}
private SpeechletResponse getHelloResponse() {
String speechText = “さようなら”;
SimpleCard card = new SimpleCard();
...
return SpeechletResponse.newTellResponse(speech, card);
}
音声とカードが返る
Alexaは。音声を
Intentに変えて
ユーザーのプログ
ラムに送る
SampleUtterances.txt
ユーザーのプログラム
card
speechspeechの
読み上げ
cardの表示
こんにちは
さようなら
Alexa HelloWorld サンプル
User: “Alexa, say hello”
Alexa: “Hello World!”
User: “Alexa, what can I do?”
Alexa: “You can say hello to me!”
HelloWorldSpeechlet
public class HelloWorldSpeechlet implements Speechlet {
public void onSessionStarted ( ... ) ....
public SpeechletResponse onLaunch ( ... ) ....
public SpeechletResponse onIntent ( ... ) ....
public void onSessionEnded ( ... ) ....
private SpeechletResponse getWelcomeResponse () ....
private SpeechletResponse getHelloResponse() ....
private SpeechletResponse getHelpResponse() ....
}
もちろん、イベント・ドリブンの
プログラミング・スタイルである。
onIntent
@Override
public SpeechletResponse onIntent (final IntentRequest request,
final Session session) throws SpeechletException {
log.info("onIntent requestId={}, sessionId={}",
request.getRequestId(),
session.getSessionId());
Intent intent = request.getIntent();
String intentName = (intent != null) ? intent.getName() : null;
if ("HelloWorldIntent".equals(intentName)) {
return getHelloResponse();
} else if ("HelpIntent".equals(intentName)) {
return getHelpResponse();
} else {
throw new SpeechletException("Invalid Intent");
}
}
Androidのプログラミング・
スタイルを、Amazon LAMDA
上で使っている!
helloworld.speechAsset.
SampleUtterances.txt
HelloWorldIntent say hello
HelloWorldIntent say hello world
HelloWorldIntent hello
HelloWorldIntent say hi
HelloWorldIntent say hi world
HelloWorldIntent hi
HelloWorldIntent how are you
HelpIntent help
HelpIntent help me
HelpIntent what can I ask you
HelpIntent get help
HelpIntent to help
HelpIntent to help me
intentName 発話
cortanaのListenFor
と同じ働きをする。それぞ
れの発話に、intent
Nameが付けられている。
“say hello”と“how are
you”は、同じintent
Nameが割り当てられて
いる。
helloworld.speechAsset.
SampleUtterances.txt
HelpIntent what commands can I ask
HelpIntent what commands can I say
HelpIntent what can I do
HelpIntent what can I use this for
HelpIntent what questions can I ask
HelpIntent what can you do
HelpIntent what do you do
HelpIntent how do I use you
HelpIntent how can I use you
HelpIntent what can you tell me
if ("HelloWorldIntent".equals(intentName)) {
return getHelloResponse();
getHelloResponse
private SpeechletResponse getHelloResponse() {
String speechText = "Hello world";
// Create the Simple card content.
SimpleCard card = new SimpleCard();
card.setTitle("HelloWorld");
card.setContent(speechText);
// Create the plain text output.
PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
speech.setText(speechText);
return SpeechletResponse.newTellResponse(speech, card);
}
getHelpResponse
private SpeechletResponse getHelpResponse() {
String speechText = "You can say hello to me!";
// Create the Simple card content.
SimpleCard card = new SimpleCard();
card.setTitle("HelloWorld");
card.setContent(speechText);
// Create the plain text output.
PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
speech.setText(speechText);
// Create reprompt
Reprompt reprompt = new Reprompt();
reprompt.setOutputSpeech(speech);
return SpeechletResponse.newAskResponse(speech, reprompt, card);
}
helloworld.speechAsset.
IntentSchema.jason
{
"intents": [
{
"intent": "HelloWorldIntent",
"slots": []
},
{
"intent": "HelpIntent",
"slots": []
}
]
}
HelloWorldSpeechletRequestStr
eamHandler
public final class HelloWorldSpeechletRequestStreamHandler
extends SpeechletRequestStreamHandler {
private static final Set<String> supportedApplicationIds =
new HashSet<String>();
static {
/*
* This Id can be found on
* https://developer.amazon.com/edw/home.html#/"Edit" the relevant
* Alexa Skill and put the relevant Application Ids in this Set.
*/
supportedApplicationIds.add(
"amzn1.echo-sdk-ams.app.[unique-value-here]");
}
public HelloWorldSpeechletRequestStreamHandler() {
super(new HelloWorldSpeechlet(), supportedApplicationIds);
}
}
Alexa History Buff サンプル
User: “Alexa, ask History Buff what
happened on August 20th”
Alexa: (Reads back three events, in reverse
chronological order) “Want to go deeper in
history?”
User: “Yes”
Alexa: (Reads back next set of three
events) “Want to go deeper in history?”
User: “No”
Wikipediaのデータを利用している。月日についての
SampleUtterances.txtが、すごいことになっている。
コードの断片は、Appendixに。
Alexa Score Keeper サンプル
User: “Alexa, tell score keeper to give red
team three points.”
Alexa: “Updating your score, three points
for red team”
(service saves the latest score and ends)
セッションの管理参考になるかも。チーム、点数のデータは
DynamoDBに格納されている。コード断片は、Appendixに。
Turing Test Machine ?
ああ言えば、こう言う
Man-Machine Interfaceの変化
 キーボードとディスプレー
入力 scanf(), 出力 printf() “Hello, Maruyama!”
C, Java, ... ブロックする入出力
 マウスとタッチスクリーン
onclick=..., $(#diva). text(“Hello, world!”);
jQuery, AngularJS, React, ... 非同期イベント・ドリブン
 音声入出力
Speech Recognition Chip, Text-To-Speech Chip
もちろん イベント・ドリブンのスタイル
ただし、音声はプログラム上は、「テキスト」として扱われる
(なぜなら、プログラムは文字の世界だから)
ニューラル・ネットワークと言語能力
 人間の言語能力については、ニューラル・ネットワークか
らのアプローチは、大きな成功を収めていないように見え
る。ただ、それはやむを得ないことだと思う。
 5億年前のカンブリア紀に、「目」を獲得して以来、生物は、
優れた知覚能力と運動能力を発達させてきた。こうした能
力を機械で実現するのが、ニューラル・ネットワークの得
意な分野。生物の進化の歴史からみれば、人間の言語能
力は、こうした感覚・運動系の能力の上に、30万年前に
登場したばかりである。
 ただ、別の見方をすれば、ニューラル・ネットワークのアプ
ローチは、機械によるSpeech Recognition, Text-To-
Speechに、決定的な役割を果たしている。
Chomskyの「言語能力」論
 この点では、Chomskyの「言語能力」論が、極めて示唆的
である。彼は、言語能力(Faculty of Language)を広い意
味での言語能力(FLB)と狭い意味での言語能力(FLN)を区
別する。
 その上で、広い意味での言語能力は、感覚・運動システム
(sensory-motor system)と概念・志向システム
(conceptual-intentional system)と、recursionのため
の計算メカニズム(これが、狭い意味での言語能力 FLNで
ある)から構成されているという。
 現在の言語へのニューラル・ネットからのアプローチは、この
言語能力を構成する感覚・運動システムの機械による実現
として、成果を上げていると言える。
“The Faculty of Language: What Is It, Who Has It,
and How Did It Evolve?” http://goo.gl/pgSppH
アシスタント・システム
人間と機械との双対的な「共生」
「型の理論」と証明支援システム
-- Coqの世界 http://bit.ly/1qbdXVE
Part 4
IBM Watsonは、
何をしているのか?
http://bit.ly/1v9dHvz
このビデオは、とても
印象的である
IBM Watsonとは何か?
 クイズ番組 Jeopardy! で優勝することを目標に、 2007
年に開発が始まったIBMのWatsonは、2011年には、人
間のチャンピオンを破った。
 Watsonは、直接のターゲットをJeopardyに絞っている
のだが、広範囲の分野での「質問応答システム」として、
最高の達成とみなされている。
 Watsonには、自然言語で記述された「構造化されていな
いデータ」の処理について、多くのアイデアが盛り込まれ
ている。それらは、今後の自然言語と知識の処理のスタイ
ルに大きな影響を与えていくだろう。
 Watsonの進化は今も続いている。それは対話機能を獲
得し、医療分野を始めとして、パーソナル・アシスタント・シ
ステムとして対象領域を拡大しようとしている。
Watsonの行っている処理の概要
Watsonの行っている処理は、極めて複雑で多岐に
わたっている。ここでは、
まず、そのあらましを
簡単に見ておこう。
D. A. Ferrucci
Watsonの行っている処理の概要
Watsonは、自然言語を
解析する能力を持つ
 Watsonと、先に見たSiriやCortanaといった「パーソナル・
アシスタント・システム」との最大の違いは、文の解析能力
の違いにある。
 Watsonは、浅いレベルでは、文を文法的に構文解析して、
その上で、深いレベルで、その論理的な意味を分析しようと
する。自然言語解析の枠組みは、ESG(English Slot
Grammar)という文法理論に基づいている。
 Watsonは、この言語解析の能力を利用して、自然言語で
記述されたWikipedia等の膨大なドキュメントから、形式化
された知識データベースを作成することができる。
 ただ、Watsonは、こうした解析から得られたデータから、論
理的な推論ルールに基づいて、答えを探しているわけでは
ない。
質問の分析
 Watsonが最初に行うことは、質問の分析である。もちろ
ん、質問文は、先に見たESGを用いて解析される。
 ただ、質問の分析の焦点は、質問の意味的・論理的含意
ではなく、次のことを明らかにすることに置かれている。
1. Focus: 答えを指している質問の一部である語句を見つ
ける。
2. LAT(lexical answer types): どのような「型」を持つ
答えが求められているのか分析する。
3. 質問自身がどのようなタイプのものなのかの分析。
4. 特別な取り扱いが必要な、特殊な役割を持つ語句はない
かの分析
質問の分析
答えの候補の生成
 Watsonは、質問の分析が終わると、答えの候補を複数
生成する。
 ここで用いられる基本的な方法は、質問文を構成する語
句をキーワードにした、Watsonが内蔵する Wikipedia
等のドキュメントに対する全文「検索」である。
 答えの候補としてピックアップされるのは、この検索にマッ
チしたドキュメントのタイトル等、いくつかの方法がある。
それについては、あとで述べる。
答えの候補の生成
答えの候補とその「証拠」を評価する
 複数の答えの候補が出されたら、あらためて、その答え候
補を検索文字列に追加して、検索を行う。
 マッチしたドキュメント中の文言(Passage)を、「証拠」とし
て収集する。
 答えの候補とその証拠を、様々な方法で色々な角度から
「評価」して点数をつける。こうしたモジュール化された評
価の多様性は、Watsonの能力の高さと柔軟さの基礎を
構成する。
 一つの質問に対して100の答えの候補を生成し、一つの
答えの候補に対して100の証拠を集め、一つの候補と証
拠の対に対して100の評価を走らせる。こうした、100 x
100 x 100 の百万オーダーの処理を、Watsonは、数
秒で終わらせる。
答えの候補とその「証拠」を評価する
最終的な判断
 いろいろな学習モデルを参照して、評価の点数に、重み
付けをして、最終的な判断を下す。
最終的な判断
ESG(English Slot Grammar)
Watsonの自然言語理解のベースになっているのは、
Michael C. McCordが開発したSlot Grammarと
いう枠組みである。
Slot Grammarの基本文献
 次の三つの論文が、Slot Grammarの基本的文献であ
る。
 “A Formal System for Slot Grammar”
http://goo.gl/KR56Es
 “The Slot Grammar Lexical Formalism”
http://goo.gl/57vxL4
 “Using Slot Grammar”
https://goo.gl/P1ZgcQ
Slotとは?
 Slotというのは、基本的には、文中の句の文法的な役割
を表している。いくつかのSlotの例を挙げる。
subj subject (主語)
obj direct object (直接目的語)
iobj indirect object (間接目的語)
comp predicate complement (述語補語)
objprep object of preposition (前置詞目的語)
ndet NP determiner (名詞句限定子)
 Slotのもう一つの役割は、意味論的な役割である。
例えば、compは、述語の「位置を持つ引数」として、言葉
の意味を表す。
Slot Grammarでの文法的解析
 次の図は、“Mary gave John a book”を、Slot
Grammarで解析したものである。
 文法的には、スロット subjは、"Mary"で「満たされ」、ス
ロット iobjは、"John"で「満たされ」ている。等々。こうし
た観点からは、スロットが文法的な役割を果たしているこ
とがわかる。
Slot Grammarでの意味的解析
 意味論的な観点からスロットの役割を見るには、giveの
語義を考えよう。それを論理的に表現したものを give1と
すると、give1(e, x, y, z)は、「イベントeで、xはyにz
を与える」を意味する。
 この時、先の図の文章の論理的な表現は、
∃e∃y( book(y) ∧ give1(e, Mary, y John))
になる。
 こうした論理的な観点からは、スロット subj, obj, iobj
は、述語give1の引数 x, y, z の名前とみなすことがで
きる。こう考えてもいい。これらのスロットは、動詞の意味
を表す述語の位置を持つ引数だと。
Complement Slotと
Adjunct Slotと
 このように述語の引数になるスロットは、complement
Slot と呼ばれ、Slot Grammar Lexicon(スロット文法
語彙集)という辞書を通じて、語義に関連ずけられる。
 一方、それ以外のスロット、ndet(冠詞・定冠詞)のような
スロットは、adjunct Slotと呼ばれて、Slot Grammar
のsyntaxに関連することになる。
 Slot Grammarで重要な役割を担っているのは、その辞
書、Lexicon 語彙集である。ここでは、次の論文に従って、
その形式 SLF(Slot Grammar Lexical Formalism)
を紹介しよう。"The Slot Grammar Lexical
Formalism"http://goo.gl/57vxL4
 まず、もっとも簡単な形式は、次のようになる。これは、
“access” という語の登録形式である。
access
< v obj
< n (p to)
Slot Grammar Lexicon
Slot Grammar Lexicon
 ここで、見出語は、accessである。この見出語について二
つの要素 v obj と n (p to) が登録されている。
vはverbで「動詞」を表し、nはnounで「名詞」を表してい
る。これらは、見出語の「品詞」にあたる。この表現は、
accessは、動詞と名詞があることを示している。
access 見出語
< v obj v は動詞
< n (p to) n は名刺
 品詞 v, n のあとに続く obj, (p n)は、スロットを表して
いる。
Slot Grammar Lexicon
 次のエントリー
give < v obj iobj
は、giveは動詞(v)で、二つのスロット obj と iobj を取
ることを表している。
Alice gave the book to Bob.
Alice gave Bob the book.
 最初の文では、スロット obj は、名詞句(NP) the book
で満たされ、スロット iobj は前置詞句(PP) to Bobで満
たされている。二つ目の文では、スロット iobj は、異なる
位置で、名詞句 Bobで満たされ、スロット obj は、やはり
異なる位置で、名詞句 the bookで満たされている。
 二つの文で、iobjを満たしているものは、NPとto-PPで異
なるのだが、満たしているものの論理的役割は同じなの
で、二つの文、どちらでも、Bobが本を与えられた人物で
あることがわかる。
Lexconのエントリーの例
意味フレーム
 Slot GrammarのLexiconでは、
見出語 < 品詞 スロット の後ろに、その語の「特徴」を
表す情報が並ぶ。
 その語についてのその他の付加的な情報も、この後ろに
並ぶ。Slot Grammar Lexiconでは、こうした記述を
Sense Frame 「意味フレーム」と呼んでいる。
見出語 < 品詞 スロット 諸特徴 その他の情報 .....
Features
見出語 < 品詞 スロット 諸特徴 その他の情報 .....
 「諸特徴 (Features)」と簡単に書いたが、品詞ごとに、
動詞についてのFutures、名詞についてのFutures、形
容詞についてのFeatures、副詞についてのついての
Futures ....と、数多くのFeaturesがある。
 先の論文、“The Slot Grammar Lexical
Formalism” http://goo.gl/57vxL4 の多くの部分は、
このFeaturesの記述に当てられている。
 Featuresの詳細については、スペースの関係で、ここで
は触れない。次に、その一部のリストを示す。
“Mary gave a book to John.”
の解析
「表層構造 (Surface Structure)」と
「深層構造 (Deep Structure)」
 先の図で重要なのは、文法的な構造を表す「表層構造
(Surface Structure)」と意味を担う「深層構造 (Deep
Structure)」の二つから文を解析しようとしているところ
だ。(もっとも、これは50年以上前のChomsky以来の古
典的な観点だ)
 もう少し、詳しく見てみよう。
Slot Grammarで「表層構造 (Surface Structure)」を
担っているのは、"Tree Line"と"Slot"と"Features"だと
されている。一方で、「深層構造 (Deep Structure)」を
担っているのは、"Word Senses"と"Arguments"だと
される。
“Mary gave a book to John.”
表層構造・深層構造
 今度は、この図の中心をなす下半分に注目しよう。
この領域は、大きく、三つの部分からなる。
 一番左は、Slot単位の構文解析木 Tree Line である。
これは、文法的な「表層構造 (Surface Structure)」を
表している。
 中央部分は、語義 Word Sense だが、それぞれは「原
形」としてLexiconの「見出し語」に対応している。
Lexiconの「意味フレーム (Sense Frame)」は、「見出
し語」に対して、Slot を「引数」として対応づける情報を与
える。ただ、ここで第一引数として与えられているのは、そ
れぞれの語の文中での出現順位である。
 結局、以前に見たように、次の論理式が、この文の「意
味」を表現することになる。
∃e∃y( book(y) ∧ give1(e, Mary, y John))
 この図の右側は、それぞれの語のFeatureを表している。
Featureは、Lexiconの「意味フレーム (sense
Frame)」で与えられる。
“Mary gave a book to John.”
Tree Line + Word Sense + Features
Featureサンプル
 Mary のFeatureは、“noun propn sg h”だが、それぞ
れのFeatureの意味は、
noun: 「名詞」
propn: proper noun で「固有名詞」
sg: single で「単数」
h: humanで、「人間」
いずれも、辞書には出てきそうな情報である。
 giveのFeatureは、“verb vfin vpast sg vsubj” だが、
それぞれのFeatureの意味は、
verb: 「動詞」
vfin: finite verb で「定動詞」
vpast:「動詞過去形」
sg: 「単数」 である。
Wikipedia Infobox と
DBpedia
DBpedia is a crowd-sourced community
effort to extract structured information from
Wikipedia and make this information
available on the Web.
Wikipediaからの情報抽出
 Wikipedia Infoboxは、投稿者がこのツールを使うと、
自動的にタグ付けされたデータが生成されるというもの。
http://en.wikipedia.org/wiki/Help:Infobox
 DBpediaは、基本的には、先のInfoboxを利用して、
Wikipediaから構造化されたデータを抽出して、Webで
利用出来るようにしようというコミュニティの取り組み。
https://en.wikipedia.org/wiki/DBpedia
{{Infobox scientist
| name = Marie Skłodowska-Curie
| image = Marie Curie c1920.png
| image_size=220px
| caption = Marie Curie, ca. 1920
| birth_date = {{birth date|1867|11|7|df=y}}
| birth_place = [[Warsaw]], [[Congress Poland|Kingdom of Poland]],
then part of [[Russian Empire]]<ref>http://www.nobelprize.org/nobel_prizes/
| death_date = {{death date and age|df=yes|1934|7|4|1867|11|7}}
| death_place = [[Passy, Haute-Savoie]], France
| residence = [[Poland]] and [[France]]
| citizenship = Poland<br />France
| field = [[Physics]], [[Chemistry]]
| work_institutions = [[University of Paris]]
| alma_mater = University of Paris <br />[[ESPCI]]
| doctoral_advisor = [[Henri Becquerel]]
| doctoral_students = [[André-Louis Debierne]]<br />[[Óscar Moreno]]<br />
| known_for = [[Radioactivity]], [[polonium]], [[radium]]
| spouse = [[Pierre Curie]] (1859–1906)
| prizes = {{nowrap|[[Nobel Prize in Physics]] (1903)<br />[[Davy Medal]] (
| footnotes = She is the only person to win a [[Nobel Prize]] in two different s
| religion = Agnostic
| signature = Marie_Curie_Skłodowska_Signature_Polish.jpg
}}
Marie CurieのInfoboxでの記述
DBpediaでのビートルズのエントリー
DBpediaでのビートルズのエントリー
Marie Curieの検索で
表示される「要約」
「要約」は、infobox等から生成される
Marie Curieの検索の要約
 Marie Skłodowska-Curie was a French-Polish
physicist and chemist, famous for her
pioneering research on radioactivity. She was
the first person honored with two Nobel
Prizes—in physics and chemistry. Wikipedia
 Born: November 7, 1867, Warsaw
 Died: July 4, 1934, Sancellemoz
 Spouse: Pierre Curie (m. 1895–1906)
 Discovered: Polonium, Radium
 Children: Irène Joliot-Curie, Ève Curie
 Education: University of Paris (1894),
University of Paris (1893), More
要約システムは、普遍的か?
 Google Knowledge Graphで、情報の「要約」の機能
が追加されたのは、注目に値する変化である。検索シス
テムの変化として、正しい方向の一つだと思う。
 Google Knowledge Graphが、一定量の、要約のデー
タベースを持っているのは事実であり、それは、その実装
方法を含めて、興味深いことである。
 ただ、それは、「最良」のものであろうか? 質的な問題は、
置いておいても、重要なのは、その量である。量的には、
Wikipediaのページでさえ、全てのページの要約が提供
されている訳ではないことにすぐ気づく。一般のページの
要約には、ほど遠いのが現状である。その意味では、全
てのページを対象にする、ページランクのような普遍性を、
現状では、それは持っている訳ではない。
誰が、要約をしているのか?
 こうした量的な制約は、基本的には、要約のデータが、ど
のように生成されているのかという問題に帰着する。いっ
たん、要約のデータが、なんらかの形で出来てしまえば、
我々は、その出自を問うことはないのだが。
 要約データを、どう生成するのかという点では、基本的な
アプローチは2つある。一つは、対象となるテキストから、
機械が要約を生成する、自動情報抽出のアプローチ。もう
一つは、Web上の情報に人間がタグ付けをして、機械が
それを利用出来るようにしようという、Semantic Web流
のアプローチである。
DBpedia is a crowd-sourced community effort to extract
structured information from Wikipedia and make this
information available on the Web.
質問の分析
“Question analysis: How Watson reads a clue”
http://brenocon.com/watson_special_issue/02%20que
stion%20analysis.pdf
質問の分析
Question analysis:
How Watson reads a clue
「質問の分析:Watsonは、どのようにヒントを
読むのか?」
A. Lally, J. M. Prager, M. C. McCord, B. K.
Boguraev, S. Patwardhan, J. Fan, P. Fodor,
and J. Chu-Carroll
http://brenocon.com/watson_special_issue/02%20q
uestion%20analysis.pdf
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在
機械学習技術の現在

Contenu connexe

En vedette

Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】
Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】
Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】Toshitaka Muraishi
 
IoT縛りの勉強会! IoTLT vol.18
IoT縛りの勉強会! IoTLT vol.18IoT縛りの勉強会! IoTLT vol.18
IoT縛りの勉強会! IoTLT vol.18Seigo Tanaka
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Yoji Kiyota
 
Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較YumaMatsuoka
 
TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅Takeshi Mikami
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考えるmaruyama097
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望maruyama097
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolationmaruyama097
 
Spark GraphFrames のススメ
Spark GraphFrames のススメSpark GraphFrames のススメ
Spark GraphFrames のススメNagato Kasaki
 
大規模グラフデータ処理
大規模グラフデータ処理大規模グラフデータ処理
大規模グラフデータ処理maruyama097
 
Pix2pixによるcs立体図の地すべり検出
Pix2pixによるcs立体図の地すべり検出Pix2pixによるcs立体図の地すべり検出
Pix2pixによるcs立体図の地すべり検出Ryousuke Wayama
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術maruyama097
 
Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向Nagato Kasaki
 
【カスタマージャーニー型】ウェブ解析実践講座
【カスタマージャーニー型】ウェブ解析実践講座【カスタマージャーニー型】ウェブ解析実践講座
【カスタマージャーニー型】ウェブ解析実践講座Akihiko Uchino
 
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)tak9029
 
マーケティング領域におけるデータの活用と情報共有 201501
マーケティング領域におけるデータの活用と情報共有 201501マーケティング領域におけるデータの活用と情報共有 201501
マーケティング領域におけるデータの活用と情報共有 201501Noriko Hashimoto
 
Tech Lab Paak講演会 20150601
Tech Lab Paak講演会 20150601Tech Lab Paak講演会 20150601
Tech Lab Paak講演会 20150601Takashi J OZAKI
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)NTT DATA OSS Professional Services
 

En vedette (20)

Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】
Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】
Unity初心者が2 d sprite使ってゲームを作ってみた【後半戦】
 
IoT縛りの勉強会! IoTLT vol.18
IoT縛りの勉強会! IoTLT vol.18IoT縛りの勉強会! IoTLT vol.18
IoT縛りの勉強会! IoTLT vol.18
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理
 
Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較
 
TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考える
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolation
 
Apache Sparkのご紹介 (後半:技術トピック)
Apache Sparkのご紹介 (後半:技術トピック)Apache Sparkのご紹介 (後半:技術トピック)
Apache Sparkのご紹介 (後半:技術トピック)
 
Spark GraphFrames のススメ
Spark GraphFrames のススメSpark GraphFrames のススメ
Spark GraphFrames のススメ
 
大規模グラフデータ処理
大規模グラフデータ処理大規模グラフデータ処理
大規模グラフデータ処理
 
Pix2pixによるcs立体図の地すべり検出
Pix2pixによるcs立体図の地すべり検出Pix2pixによるcs立体図の地すべり検出
Pix2pixによるcs立体図の地すべり検出
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術
 
Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向
 
【カスタマージャーニー型】ウェブ解析実践講座
【カスタマージャーニー型】ウェブ解析実践講座【カスタマージャーニー型】ウェブ解析実践講座
【カスタマージャーニー型】ウェブ解析実践講座
 
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
 
マーケティング領域におけるデータの活用と情報共有 201501
マーケティング領域におけるデータの活用と情報共有 201501マーケティング領域におけるデータの活用と情報共有 201501
マーケティング領域におけるデータの活用と情報共有 201501
 
Tech Lab Paak講演会 20150601
Tech Lab Paak講演会 20150601Tech Lab Paak講演会 20150601
Tech Lab Paak講演会 20150601
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
 
HTrace: Tracing in HBase and HDFS (HBase Meetup)
HTrace: Tracing in HBase and HDFS (HBase Meetup)HTrace: Tracing in HBase and HDFS (HBase Meetup)
HTrace: Tracing in HBase and HDFS (HBase Meetup)
 

Plus de maruyama097

Convolutionl Neural Network 入門
Convolutionl Neural Network 入門Convolutionl Neural Network 入門
Convolutionl Neural Network 入門maruyama097
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twittermaruyama097
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界maruyama097
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来maruyama097
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02maruyama097
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識maruyama097
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?maruyama097
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考maruyama097
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットmaruyama097
 
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?maruyama097
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programmingmaruyama097
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界maruyama097
 
Next Billion -- Androidへの期待と新しい技術革新の地平
Next Billion -- Androidへの期待と新しい技術革新の地平Next Billion -- Androidへの期待と新しい技術革新の地平
Next Billion -- Androidへの期待と新しい技術革新の地平maruyama097
 
マルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCLマルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCLmaruyama097
 
量子コンピュータの新しい潮流 -- D-Waveのアプローチ
量子コンピュータの新しい潮流 -- D-Waveのアプローチ量子コンピュータの新しい潮流 -- D-Waveのアプローチ
量子コンピュータの新しい潮流 -- D-Waveのアプローチmaruyama097
 
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向maruyama097
 

Plus de maruyama097 (20)

Convolutionl Neural Network 入門
Convolutionl Neural Network 入門Convolutionl Neural Network 入門
Convolutionl Neural Network 入門
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界
 
Aurora
AuroraAurora
Aurora
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケット
 
Google Dremel
Google DremelGoogle Dremel
Google Dremel
 
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
Next Billion -- Androidへの期待と新しい技術革新の地平
Next Billion -- Androidへの期待と新しい技術革新の地平Next Billion -- Androidへの期待と新しい技術革新の地平
Next Billion -- Androidへの期待と新しい技術革新の地平
 
マルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCLマルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCL
 
量子コンピュータの新しい潮流 -- D-Waveのアプローチ
量子コンピュータの新しい潮流 -- D-Waveのアプローチ量子コンピュータの新しい潮流 -- D-Waveのアプローチ
量子コンピュータの新しい潮流 -- D-Waveのアプローチ
 
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向
Androidの次の飛躍を考える --- Webアプリ / HTML5 開発の新しい動向
 

機械学習技術の現在