Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

機械学習技術の現在

11,896 views

Published on

2015/09/29 マルレク第三回

Published in: Internet
  • Be the first to comment

機械学習技術の現在

  1. 1. 機械学習技術の現在
  2. 2. I PROPOSE to consider the question, 'Can machines think?' I PROPOSE to consider the question, 'Can machines think?' -- Turing
  3. 3. 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
  4. 4. 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
  5. 5. 機械学習技術の現在 @maruyama097 丸山不二夫
  6. 6. はじめに  現代のIT技術とその利用の一つの新しい焦点は、ML(機 械学習)技術とAI(人工知能)技術にある。機械が、人間 のように学習し、人間のように思考する。これは科学者た ちの長い間の夢だった。私たちは、そうした夢が実現する 時代の始まりに立っているのかもしれない。  ただ、近年の機械学習技術・AI技術とその利用の急速な 発展と拡大は、現象的には、これらの技術に対する人々 の全体的な理解を難しくしている。これらの技術で、何が 出来て何が課題なのか、よく知ることがないと、空想的な 楽観論と、技術否定に通じかねない悲観論の両極に、技 術の評価が振動する。
  7. 7. はじめに  今回のレクチャーは、機械学習技術・AI技術の現在につ いて、オーバービューを与えることを目的にしている。出 来るだけ多くの人に、これらの技術の到達点と課題の概 略を知ってもらいたいと思っている。畢竟、機械学習を知 るためには人間の学習が必要であり、人工知能を作るに は人間の知能が必要である。IT技術者の方には、自身で この分野への問題意識を深めていくことを期待している。
  8. 8. 「機械学習技術の現在」 Agenda Part 0: 機械学習技術・AI技術を構成する複数の 流れ Part 1: データの統計的分析をもとに、数値予測・ クラス分けを行うアプローチ Part 2: Deep Learning・ニューラルネットワーク に基づくアプローチ Part 3: パーソナル・アシスタント・システムの現在 Part 4: IBM Watsonは、何をしているのか? Appendix
  9. 9. Part 0 機械学習技術・AI技術を 構成する複数の流れ 現在の機械学習技術・AI技術は、単一の技術ではな い。それは、複数の流れからなると考えると全体像が 把握しやすい。ここでは、それを、大雑把に四つの流 れにまとめてみた。
  10. 10. 機械学習技術・AI技術を 構成する複数の流れ A) 既知のデータの統計的分析をもとに、新しいデー タの、数値予測・クラス分けを行うもの。 B) ニューラルネットワークの手法を用いて、生物の 感覚・運動系の能力の相同物を機械上で実現し ようとするもの。 C) 経験的に構築された知識・推論システムと人間固 有の言語能力に関わるもの。 D)人間の数学的・論理的な推論能力に関わるもの。
  11. 11. A. データの統計的分析に基づく、 数値予測・クラス分け  これは昔から統計学の手法として存在する、回帰分析や クラスター分析と考え方は、基本的に同じものである。  ただ、マシンのパワーが飛躍的に増大して、大量のデータ を短時間で処理できるようになり、かつ効果的なビジュア リゼーションが可能になったのが、実践的には新しく、か つ重要な変化である。  現在、クラウドで提供されている、大部分の機械学習の サービスは、このクラスに属する。  同時に、「決定論的なアプローチ」に対する「統計的なアプ ローチ」の優位という方法論的な自覚は、現在の機械学 習技術・AI技術の多くの領域に、大きな影響を与えつつ ある。
  12. 12. B. ニューラルネットワークに基づく、知 覚・運動系へのアプローチ  現在、活発に研究・応用が進んでいる分野である。文字 認識・発話の文字列への変換、静止画・動画からの対象 の判別・動きの検出等々で、大きな成功を収めている  基本的なモデルの起源は、生物の知覚・感覚(主要には、 視覚・聴覚)を司る神経回路網にある。  生物の知覚・感覚の能力は、運動能力と密接に結びつい て、感覚・運動系を構成しているので、ロボットの動作の 制御、ドローンの姿勢制御、自動運転等にも、このアプ ローチは有効で、応用分野を拡大している。  人間の生産労働の代替としての生産の機械化も、知覚と 自律的な運動能力を持つ機械たちのネットワーク化に よって、新しい段階に進むことが予想される。
  13. 13. C. 人間の経験的な知識システム・言 語能力に関わるもの  この領域でも、多くのレベルで多くの取り組みがなされて いる。小論もこの分野に多くのスペースを割いている。  「パーソナル・アシスタント・システム」 GoogleのGoogle Now, AppleのSiri, MicrosoftのCortana, Amazon のAlexa等々。私たちの身近なところで、もっとも活発に 応用が進んでいる分野。完成度の高い 「質問応答システ ム」として、IBMのWatsonがある。 Watsonについては、 この講演の後半で、詳しく触れたい。  「パーソナルアシスタント」のプログラムは、Turing Test 的には、「知的」にふるまっているように見えるのだが、そ の多くの実装は、「知的」なものとは言えない。
  14. 14. C. 人間の経験的な知識システム・言 語能力に関わるもの  「知識データベース」 Semantic Web等の知識のグラフ 表現の試みを始めとして、人間が経験的に得た様々の知 識を活用するモデルを、機械上に構築しようというもの。 基本的には、グラフとして構造化されたデータを扱う。  Google Nowは、「パーソナル・アシスタント・システム」 であるが、「知識グラフ」を活用した検索システムと結びつ いている。それは、今後ますます明確に、新しいスタイル での「広告システム」と結びついていくだろう。おそらく、そ うした動きは、避けられないのではと、僕は考えている。  知識データベースのエンジンは、文字列の検索エンジン から自立を始めたばかりである。現状では、それ単独では、 「論理的」でも、「推論」が得意なわけではない。
  15. 15. C. 人間の経験的な知識システム・言 語能力に関わるもの  「機械翻訳システム」 本来は、意味理解を含む人間の一 般的な言語能力に関わっている。ただ、機械翻訳の場合、 質問に答えることが求められているわけではない。それは、 ある言語から他の言語への形式的な「書き換え」システム なのかもしれない。  この領域は、最終的には、機械が人間のように、言語の 「意味」を理解して、「知識」を活用して「意味」のある活動 をするのを目指している。ある意味、人工知能の本丸であ る。ただ、多くの課題が残されている。
  16. 16. D. 人間の数学的・論理的な推論能力 に関わるもの  ここでは、経験的な起源からは相対的に独立な、純粋に 数学的な定理の証明や、複雑な証明の機械による支援 が課題になる。この分野でも、COQ等の「証明支援システ ム」を中心に、興味ふかい前進がある。  マルレク「「型の理論」と証明支援システム -- Coqの世界」 http://bit.ly/1qbdXVE を参照されたい。  かつての日本の「第五世代」的な、AIに対する「論理的」 な(というより「定理証明的」な)アプローチは、現在のAI 研究においては主流ではない。ただ、そのことは、他のす べての領域と同じように、数学的・論理的なアプローチの 有効性を否定するものではない。  数学や物理といった知識の体系は、誰もが生得的に持つ 言語能力や経験的な知識の体系には、還元されない。
  17. 17. Part 1 データの統計的分析をもとに、数値 予測・クラス分けを行うアプローチ この分野については、昨年度のマルレク・マルゼミ 「エンタープライズと機械学習」で二回にわたって取り 上げているので、そちらを参照してほしい。
  18. 18. http://bit.ly/1tqiKUJ
  19. 19. 「エンタープライズと機械学習」 Part II 「機械学習のアルゴリズム」  昨年のマルレク「エンタープライズと機械学習」 http://bit.ly/1tqiKUJ (2014年11月25日)の Part IIに主要なアルゴリズムの簡単な紹介がある。  Gradient Descent  Decision Tree  Boosted Decision Tree  Support Vector Machine
  20. 20. 簡単にするために、二次元のグラフで考え よう。ある点から始めて、その点から極小 点に近ずくためには、どうすればいいか? 二つの場合がある。 その点が極小点の右側にある場合には、 その点のx座標を少し減らせばいい。 その点が極小点の左側にある場合には、 その点のx座標を少し増やせばいい。 その点が、極小点の右にあるか左にある かは、その点での接戦の傾きが、正である か負であるかでわかる。 よって、α を正の数値とすれば、次の式が、 より近づいた点の位置を与える。 直感的な説明 Gradient Descent
  21. 21. 0 1 J(0,1) ある場合には、最小値ではなく、局所的な 極小値に、入り込むことがある。 Gradient Descent
  22. 22. 「エンタープライズと機械学習」 Part III 「開発サンプル」  「エンタープライズと機械学習」 http://bit.ly/1tqiKUJ のPart III 「Azure MLでの予測ソリューション開発サ ンプル」に、いくつかのユースケースの紹介がある。  また、マルゼミ「エンタープライズと機械学習」 http://bit.ly/1CNwlPi は、Azure MLに即してだが、 個別の事例について、少し詳しい説明がある。
  23. 23. サンプルと使用されたモデル  クレジットのリスク予測 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
  24. 24. データ構造・アルゴリズム等 プログラム 設計 実装 配備 アプリケーション レスポンスリクエスト 学習モデルと 訓練用データの選択 機械学習アルゴリズム 設計 機械学習 配備 アプリケーション レスポンスリクエスト 訓練用データ 人間の仕事 機械の仕事 Smart Machine
  25. 25. 「最適化問題」と量子コンピュータ  機械学習のアルゴリズムの多くは、ある関数の値を最小 にするという形の「最小化問題」に還元される。  「最適化問題」へのアプローチとしては、アニーリング量子 コンピュータを用いたものも興味深い。  それについては、「量子コンピューターの新しい潮流 --- D- Waveのアプローチ」 http://bit.ly/1rwyzyv の「D-Waveマ シンのプログラミング 生成関数と最適化問題への還元」を参照 されたい。  アニーリング量子コンピュータが取り組もうとした課題の 多くが、別のアプローチでの機械学習技術の課題と共通 していることに留意する必要がある。
  26. 26. http://arxiv.org/pdf/1210.0811v2.pdf gradient descent method
  27. 27. Part 2 ニューラル・ネットワークに基づく 感覚・運動系へのアプローチ  ニューラル・ネットワークを巡るいくつかのトピック  ニューラル・ネットワークのハードウェアとその変化  ニューラル・ネットワークを記述する言語の登場
  28. 28. ニューラル・ネットワークの いくつかのトピック
  29. 29. ISCA 2015で新設されたCAMEL Workshop 「機械学習のためのコンピューター・アーキテクチャー」 2015年6月 ACM/IEEE http://goo.gl/WIFpTT The 42nd International Symposium on Computer Architecture (ISCA) 「アカデミー」 での動き
  30. 30. CAMEL の Opening Remark のスライド http://goo.gl/JVjGne 「アカデミー」 での動き
  31. 31. https://goo.gl/b5Pe5j MS ResearchのDeep Learning “Project Adam” 1,400万枚の画像を学習して、22,000のカテゴリーに分類できる。 イヌとネコを区別できるだけでなく、イヌの犬種も正しく判別する。 http://goo.gl/2EMIkJ
  32. 32. MS ResearchのDeep Learning “Project Adam” あの「Googleのネコ」マシンより、1/30のマシンで、50倍早く、 二倍の精度で、画像認識ができるという
  33. 33. http://goo.gl/reCbkj Google 自動運転カー 2015年より公道実験開始
  34. 34. NVIDIA CES 2015 GPUを使った画像認識技術を生かして自動運転カーへの搭載を目指す。 http://www.nvidia.com/object/ces2015.html
  35. 35. http://goo.gl/LCN8dh Boston Dynamics LS3
  36. 36. Team MIT: Atlas Robot Push Recovery https://www.youtube.com/watch?t=193&v=2mhIYetkNIg
  37. 37. Google Deep Dream deepdream https://goo.gl/GIDVg8 dreamscope https://goo.gl/uQauPs
  38. 38. https://dreamscopeapp.com/i/V6S4Td49Th
  39. 39. ニューラル・ネットワークの ハードウェアとその変化  サーバー・クラスター  GPU  FPGA  専用チップ
  40. 40. ニューラル・ネットワークの ハードウェアの変化  Server Cluster: 「Googleの猫」の認識に成功したシ ステムは、巨大なシステムだった。  GPU: 現在は、GPUを利用してシステムは小型化し、研 究室内のマシンでも同じ処理が可能になっている。先に 紹介したオープンソースの多くは、デフォールトでGPUの 使用を想定している。  FPGA: MSのCatapultやSiriusのサーバーサイドのよ うに、クラウド上に、FPGAを使って高性能で低電力なシス テムを構築する研究も活発に行われている。  専用チップ: LeCun等のNeuFlow、IBMのTrueNorth のように、ニューラル・ネットワーク専用チップの開発が、 始まっている。
  41. 41. 2012年7月 http://arxiv.org/pdf/1112.6209.pdf&embedded=true Google 猫論文
  42. 42.  我々は、ラベル付けされていないデータだけから、高レベ ルの、クラスに固有の特徴を検出することが出来るかとい う問題を考察した。例えば、ラベル付けされていないイ メージだけから、顔の検出が可能かという問題である。  この問題に答える為に、我々は、9層からなるローカルに 疎に結合した、プーリングとローカルなコントラストの正規 化の機能を備えた自動エンコーダを、大規模な画像デー タセット(モデルは10億のコネクションを持ち、データセット は、インターネットからダウンロードした200x200ピクセ ルの一千万個のイメージからなる)上で訓練した。
  43. 43.  我々は、このネットワークを、1000台のマシン(16,000コ ア)のクラスター上で、並行計算モデルと非同期SGDを 使って、三日間訓練した。  広く受け入れられているように見える直観に反して、我々 の実験結果は、顔であるかそうでないかのラベルをイメー ジにつける必要なしに、顔の検出が可能であることを明ら かにした。  コントロールの実験では、この特徴の検出は、変換だけで なく、拡大や画面外への回転に対しても、頑健であること を示した。
  44. 44. The architecture and parameters in one layer of our network. Jeff Dean
  45. 45. Google Brain 巨大なサーバー・クラスター
  46. 46. 2013年6月 http://goo.gl/HjbcDp NgのCommodith Off-The-Shelf論文 Andrew NG
  47. 47. 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月
  48. 48. この論文: http://stanford.io/162lrZ4 GPUの利用
  49. 49. 消費電力600kWから4kWへ 5百万ドルのシステムから、3万3千ドルのシステムへ
  50. 50. SICS 2014 http://bit.ly/1BOIEuC MS Catapult論文 FPGAの利用
  51. 51. http://bit.ly/1z2zMy1
  52. 52. 2015年6月 http://icri-ci.technion.ac.il/files/2015/07/A2-CAMEL2015-Chung.pdf MS CAMEL論文 Eric Chung
  53. 53. 処理能力は、1/6だが、 エネルギー効率は、9倍
  54. 54. 2015年8月 http://goo.gl/wxXAQr IBM TrueNorth発表 専用チップの利用
  55. 55. http://paulmerolla.com/merolla_main_som.pdf
  56. 56. 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
  57. 57. 2012年 IEEE NWSCA’12 http://yann.lecun.com/exdb/publis/pdf/pham-mwscas-12.pdf
  58. 58. 人間の脳のエネルギー効率は、 驚異的に高い。 AIのハードの世界でも大きな変化が 進んでいるのだが、留意すべきこと ....
  59. 59. 「人間と機械」という対比 だけでなく、「生物と機械」 という対比でも、考えるこ とは面白い。 ニューラル・ネットワークが、 今後、大活躍するであろう 「感覚-運動系」でも、生物の 能力は、驚異的である。
  60. 60. ニューラル・ネットワークを 記述する言語の登場  Torch  Caffe  Net#
  61. 61. ニューラル・ネットワークを 記述する言語の登場  ハードウェアだけでなく、ニューラル・ネットワークのソフト ウェアも大きな変化が進行している。  ソフトウェアの変化で重要なことは、ニューラル・ネットワー クを記述する言語が、登場していることである。小論では、 その幾つかを紹介したいと思う。代表的なものとして、次 のようなものがある。  Torch: https://goo.gl/Yg98OO  Caffe : http://caffe.berkeleyvision.org/  Net# : https://goo.gl/DKqSBY
  62. 62. 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 ] ネットワーク記述言語登場の背景 基本パターンの確立と一層の複雑化
  63. 63. 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 ネットワーク記述言語登場の背景 基本パターンの確立と一層の複雑化
  64. 64. 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 ネットワーク記述言語登場の背景 基本パターンの確立と一層の複雑化
  65. 65. Torch Torchは、LeCun率いるFacebookのFAIRが提供 するオープンソースである。ここでは、次のドキュメン トに従って、その概要を見てみよう。 “Deep Learning with Torch: the 60-minute blitz” https://goo.gl/A76kjA Yann LeCun
  66. 66. 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)
  67. 67. 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
  68. 68. 次のように、様々なNN(ニュー ラル・ネットワーク)が記述できる。  nn.Sequential  nn.Concat  nn.Parallel
  69. 69. Neural Networks Sample これは、「文字」を認識する、ニューラル・ネットワークである。 これを Torchで記述したソースを次に示す。
  70. 70. 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());
  71. 71. 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());
  72. 72. CIFAR-10データセット 3x32x32 50,000訓練用データ、10,000テストデータ https://s3.amazonaws.com/torch7/data/cifar10torchsmall.zip
  73. 73. ニューラル・ネットワークを使う 1. ロードとデータの正規化 2. ニューラル・ネットワークを定義する 3. 損失関数を定義する 4. 訓練用データで、ネットワークを訓練する 5. テスト用データで、ネットワークをテストする
  74. 74. 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]])
  75. 75. 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());
  76. 76. 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)
  77. 77. 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
  78. 78. “Torch Deep Learning Module” のオープンソース化の発表 “FAIR open sources deep-learning modules for Torch” 2015年1月16日 https://goo.gl/Yg98OO
  79. 79.  科学と技術における進歩は、科学者が結果だけを共有す るのではなく、ツールや方法も共有するときに、加速する。 それが、Facebook AI Research (FAIR)が、オープン な科学とそのツールをオープン化することにコミットしてい る理由の一つである。  FAIRにおける機械学習とAIの研究プロジェクトの多くは、 Torchを利用している。それは、ディープ・ラーニングとコ ンボリューション・ネットに特に力点を置いた、数値計算、 機械学習、コンピュータ・ビジョン向けのオープンソースの 開発環境である。Torchは、多くのアカデミーの研究所で 利用されているだけでなく、 Google/DeepMind, Twitter, NVIDIA, AMD, Intel といった多くの企業で 利用されている。
  80. 80.  本日、我々は、Torchの最適化されたディープ・ラーニン グモジュール群をオープンソース化した。これらのモ ジュールは、これまでのTorchのデフォールトより、極めて 高速であり、より大きなニューラル・ネットをより少ない時 間で訓練することを可能にして、我々の研究プロジェクト を加速させてきた。  このリリースは、大規模なコンボリューション・ネット (ConvNets)と、自然言語処理アプリケーションで共通に 利用される、疎に活性化されるネットワーク用のGPUに最 適化されたモジュールを含んでいる。このConvNetモ ジュールは、 NVIDIAのcuFFTライブラリーの上に構築さ れた専用のCUDAカーネルを用いた高速FFTベースのコ ンボリューション層を含んでいる。
  81. 81.  このモジュールに加えて、今回のリリースには、次のよう な数多くのCUDAベースのモジュールとコンテナが含まれ ている。  ユーザーが、データ・パラレル・モデル(GPU上でのミニ・ バッチによる分割)か、あるいは、モデル・パラレル・モデ ル(複数のGPU上でのネットワーク分割)の双方を使って、 複数のGPU上での訓練の並列化を可能にするコンテナ。  離散的なオブジェクト(語のような)の埋め込みの学習や ニューロンの言語モデルにしばしば利用される最適化さ れた検索テーブル。  非常に大きな数からなるクラスの訓練をスピードアップす る階層的な SoftMax モジュール。
  82. 82.  あるタイプのビジュアルやテキスト・モデルで利用される Cross-map pooling (MaxOutとして知られている)  Frank Seide 他の論文に基づいた 1-bit SGDの実装。  非常に高速なテンポラルなコンボリューション層。それは、 典型的には、発話認識や自然言語アプリで利用される 1-Dコンボリューションの入力をカーネルで計算する。 我々のバージョンは、元のTorchでの実装を、同じBLAS プリミティブを使って、非常に効率的な枠組みで改良した ものである。一つのGPUで、入力・カーネル・ストライドの サイズによって変わるのだが、3倍から10倍の範囲で高 速化することが観察されている。
  83. 83. FFTベースのコンボリューション層コード  今回のリリースの最も重要な部分は、FFTベースのコンボ リューション層のコードを含んでいる。というのも、 ConvNetsの訓練での計算時間の大部分を、コンボ リューションが占めているからである。これらのモデルの 訓練時間の改善は、より迅速な研究・開発をもたらすので、 我々はGPUコンボリューション層の改善に、多くのエンジ ニアリングの努力を費やした。この作業は、めざましい成 果を生み出した。現在公開されているコードで最速のもの と比較して、23.5倍の高速化を達成した。我々が言い得 る限りでは、我々のコードは、典型的なディープConvNet のようなポピュラーなアーキテクチャーでのImageNet データセットでのオブジェクト認識の訓練で使われている、 公開されている利用可能ないかなるコードより高速である。
  84. 84. 参考資料  “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
  85. 85. 参考資料  “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
  86. 86. Caffe Caffeは、現在Googleにいる Yangqing Jia が、 UC Berkleyの院生時代に開始したオープンソース のプロジェクトである。 http://caffe.berkeleyvision.org/
  87. 87. なぜCaffeなのか?  表現力のあるアーキテキチャーは、アプリケーションとイノ ベーションを勇気付ける。モデルと最適化は、設定によっ てハードコードすることなく定義される。CPUとGPUとの間 の切り替えは、GPUマシンで訓練する時に、フラグを一つ 立てるだけである。そのあとで、普通のクラスターなりモバ イル・デバイスにデプロイすればいい。  拡張可能なコードは、アクティブな開発を促進する。Caffe は、最初の一年で、1,000人以上の開発者によって、 forkが行われて、数多くの重要な変化が、彼らの貢献で なされた。このフレームワークが、コードでもモデルでも、 最新の道を走っていることで、彼らコントリビュータに感謝 している。
  88. 88. なぜCaffeなのか?  スピード は、実験的研究でも産業界での応用でも、 Caffeを完璧なものにした。Caffeは、一つNVIDIA K40 GPUで、一日あたり、6,000万以上の画像を処理できる。 これは、一画像あたり、推定に1ms、学習に4msというス ピードである。我々は、Caffeは、利用可能なConvnetの 実装で、最速であると信じている。  コミュニティ: Caffeは、すでに、アカデミックな研究プロ ジェクト、スタートアップ企業のプロトタイプ、さらには、ビ ジョンやスピーチやマルチメディアのアプリでは、大規模な 産業用のアプリにおいても力を発揮している。 caffe- users group と Githubで、コーヒーを育てる我々のコ ミュニティに加わって欲しい。
  89. 89. Cafe Tutorial http://caffe.berkeleyvision.org/tutorial/
  90. 90. 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.
  91. 91. 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
  92. 92. 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
  93. 93. 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
  94. 94. 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
  95. 95. 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
  96. 96. 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
  97. 97. Layers Sample http://caffe.berkeleyvision.org/tutorial/laye rs.html
  98. 98. 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
  99. 99. 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
  100. 100. 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 } }
  101. 101. その他のLayers  Activation / Neuron Layers  ReLU / Rectified-Linear and Leaky-ReLU  Sigmoid  TanH / Hyperbolic Tangent  ...  Data Layers  Database  In-Memory  HDF5 Input  HDF5 Output  Images  ....
  102. 102. 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 定義サンプル
  103. 103. その他のLayers  Common Layers  Inner Product  Splitting  Flaterning  Reshape  Concatanation  Slicing  ...
  104. 104. Azure ML Net# 「Azure Machine Learning のための Net# ニューラル ネットワーク仕様言語について」 https://goo.gl/DKqSBY
  105. 105. 結合バンドル  ニューラル ネットワーク構造は、いくつかの層に編成され たノードによって構成され、各ノード間には、重み付けられ た結合 (またはエッジ) があります。結合にはそれぞれ方 向があり、結合ごとにソース ノードと宛先ノードを持ちます。  それぞれのトレーニング可能層 (隠れ層または出力層) には 1 つ以上の結合バンドルがあります。結合バンドル は、ソース層と、そのソース層からの結合の仕様で構成さ れています。指定のバンドルでは、すべての結合が同じ ソース層と同じ宛先層を共有します。Net# では、結合バ ンドルはバンドルの宛先層に属すると見なされます。
  106. 106. 結合バンドルのタイプ  既定つまり標準のバンドルは、フル バンドルです。このバ ンドルでは、ソース層の各ノードが宛先層のすべてのノー ドに結合します。(keyword ‘all’)  フィルター バンドル。ユーザーは、ソース層ノードと宛先 層ノードの場所を使用して述語を定義できます。述語が True の場合は常にノードが結合されます。(keyword ‘where’)  畳み込みバンドル。ユーザーはソース層の少数の隣接 ノードを定義できます。宛先層の各ノードは、ソース層の 隣接ノードの 1 つに結合します。(keyword ‘convolve’)
  107. 107. 結合バンドルのタイプ  プーリング バンドル (keyword ‘max pool’ または、’ mean pool’) および応答正規化バンドル (keyword ‘response norm’)。 これは、ユーザーがソース層の 少数の隣接ノードを定義するという点で畳み込みバンドル と似ています。違いは、これらのバンドルのエッジの重み がトレーニング可能でないことです。代わりに、定義済み の関数がソース ノード値に適用され、宛先ノードの値を判 断します。
  108. 108. サポートされるカスタマイズ  隠れ層を作成し、各層のノード数を管理する。  層間の結合方法を指定する。  畳み込みや重み共有バンドルなどの特殊な結合性の構 造を定義する。  複数のアクティブ化関数を指定する。
  109. 109. // 構造には、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; } 複数の隠れ層の定義: コンピューター ビジョンの例
  110. 110. 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; 複数クラス分類の畳み込みネットワークの定義: 数字認識の例
  111. 111. 複数クラス分類の畳み込みネット ワークの定義: 数字認識の例  構造には単一の入力層 Image があります。  キーワード convolve は、Conv1 および Conv2 が畳 み込み層であることを示しています。これらの各層の宣言 には、畳み込み属性の一覧が続きます。  このネットワークには第 3 の隠れ層 Hid3 があり、これ は第 2 の隠れ層 Conv2 に完全結合されます。  出力層である Digit は、第 3 の隠れ層 Hid3 のみに結 合されます。キーワード all は、出力層が Hid3 に完全 結合されることを示しています。
  112. 112. Part 3 パーソナル・アシスタント・ システムの現在  Google Now, Siri  Microsoft Cortana  Amazon Alexa
  113. 113. パーソナル・アシスタント・システム の現在
  114. 114. パーソナル・アシスタント・システム  AndroidのGoogle Now、iPhoneのSiri、Windowsの Cortana等の、音声インターフェースの「パーソナル・アシ スタント・システム」は、多くの人に、AI時代の到来を、一 般のユーザーに印象付ける上で大きな役割を果たしてい る。AmazonのAlexa、FacebookのMも、そうした動き に追随している。  これらの技術は、先の分類では、B. 領域の技術を用いて、 この間、急速に精度を向上させた音声認識(Speech Recognision)技術とテキスト発声技術(Text-to- Speech)を、共通のベースにしている。  ただ、これらのシステムの実装は、現在の機械学習技術・ AI技術の課題をよく示している。
  115. 115. パーソナル・アシスタント・システム  残念ながら、その実装の多くは、知能を持つというより、 Turingのテストを見かけ上パスしようとしているだけの、 「Turing Test Machine」 と呼ぶべきものである。  パーソナル・アシスタント・システムを含む質問応答システ ムの雄は、なんといっても、IBM Watsonである。それは、 単純な「Turing Test Machine」 を超えようという試み の一つである。レクチャーの後半で、Watsonの技術につ いて、少し詳しく紹介しようと思う。
  116. 116. Google Now
  117. 117. 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のオープン化のことでは ないということだ。
  118. 118. Google Nowの二つの顔  Google Nowには、二つの顔がある。一つの顔は、音声 応答システムだが、もう一つの顔は、カード・ベースの ユーザー支援システムである。Googleがオープン化をし ようとしているのは、後者のGoogle Nowである。  カード・ベースのユーザー支援システムは、Gmailや Google カレンダーやGoogle MapやGoogle検索と いったアプリ(現在は、Googleのアプリが中心である)の 利用履歴や情報から、ユーザーに有用な情報をまとめて カードの形式で通知する。この仕掛けは、ユーザーのプラ イバシー保護との関係では、ギリギリの所をついていて、 その意味ではとても興味ふかいのだが、それについては 別の機会に触れたい。
  119. 119. Google Nowのオープン化の狙い  この意味でのGoogle Nowのオープン化は、サード・ パーティのアプリにも、この仕掛けを利用してもらうことで、 ユーザーに利便性を提供するとともに、最終的には、 Googleがユーザーのビヘービィアの把握の網の目を広 げることにつながる。  それは、技術の共有という単純なオープンソース化ではな く、Googleのエコシステムの拡大と密接に結びついてい る。少なくないアプリが、すでに、Google Nowのカードを 使っている。 http://www.google.com/landing/now/integratio ns.html
  120. 120. Google Nowの「下半身」  Googleは、音声質問応答システムとしてのGoogle NowのAPIを公開するであろうか? 多分、しないと思う。  Google Nowは、単純なTuring Test Machine ではな い。Google Nowの下半身は、Googleの検索システム そのものと融合している。それはまた、Googleの広告ビ ジネスと深く結びついている。その「秘密」を公開すること はないだろうと、僕は考えている。  今回のマルレクのテーマは「機械学習技術」である。脳と の対比で機械が学習するというイメージは、「学習の主 体」としてはわかりやすい。ただ、機械だけでなく、グロー バルに拡大したネットワークも学習しうる。その「主体」は、 本来は、Sky-NetでもGoogleでもないと思うのだが。
  121. 121. 検索の「知識検索」への変化  Google Nowの「下半身」である、Google検索は、Web スケールの大量のデータから文字列を抽出してそのリン クのリストを返すというスタイルから、2012年の Knowledge Graphの導入を機に、ユーザーが知りたい もの、探している「答え」を返すというものに大きく変わった。 見かけは、あまり変わったように見えないかもしれないの だが、文字列の検索から「知識」の検索への変化は、シス テムの入れ替えを伴う大きな転換であった。
  122. 122. 検索の「知識検索」への変化  このあたりのことは、過去のマルレクでも取り上げている。 次の資料を参考にされたい。  「Googleの新しい検索技術 Knowledge Graph に ついて」 https://goo.gl/pqsHlj  「大規模グラフデータ処理」 http://bit.ly/1zK41gv  「大規模分散システムの現在 --- GFS,MapReduce, BigTableは、どう進化したか」 http://bit.ly/10yW52d
  123. 123. 「意味」を検索する  ただ、これらの情報も過去のもので十分なものではない。 Googleの検索システムは、やりたいこととできることの技 術的矛盾の中で、ダイナミックに変化を続けている。(例え ば、リアルタイム処理の志向の中で、バッチ処理の MapReduceは置き換えられたが、グラフ処理のPregel は、もちろん、そのオープンソース版であるGiraphも、 バッチ処理だ。)  そして、現在も、「意味」のある情報の検索をめぐる競争は、 Google、Microsoft の間で、熾烈に戦われている(個人 的には、Bingは、健闘していると思う)。それに、グラフ検 索では、Facebookもチャレンジングな取り組みをしてい る。「意味検索」は、狭義の「機械学習技術」には含まれな いと考えてもいいのだが、現代のIT技術、大規模分散シ ステムの未来の主戦場である。
  124. 124.  皮肉なことに、Google検索の実装の詳細は、よくわから ないのだが、その現象的な振る舞いの変化については、 実によく分析されている。このあたりについては、僕は、熱 心なフォロアーではないのだが、興味のある人は、例えば、 次のサイトの情報を見てみるのがいい。 "Search Engine Land" http://searchengineland.com/  この分野は、技術的にだけでなく、現代の「広告ビジネス」 の最前線でもある。この点では、次の「ノート」を参照され たい(未完であるのだが)。 「IT技術とネットワーク広告(1)」 https://goo.gl/iniMFW
  125. 125. Siri API?  SiriのAPIは、公開されていない(ように見える)。いくつか のアプリには、SiriのAPIを提供しているようだが、詳しい ことはわからない。Androidに、Taskerのような音声コマ ンドアプリがあるように、iOSにも、同様のアプリはあるよ うだ。Speechkit "Building an iOS App like Siri" http://goo.gl/3L4lgG  Siriの実装の中身はわからないのだが、きっと、cortana, Echo Allex と同種の実装だと思う。(会話しているとわか ることがある)
  126. 126.  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
  127. 127. Microsoft Cortana
  128. 128. Cortana VCD Cortama をプログラムするには、Voice Commandをあらかじめ定義しておくのが基本。 VoiceCommandDefinition (VCD)のサンプルは、 以下にある。https://goo.gl/jskqr4
  129. 129. <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の形式
  130. 130. helloGoodbye「こんにちは」 「さようなら」 <VoiceCommands ... <CommandSet ... <Command Name=“helloGoodbye"> <ListenFor ...> こんにちは </ListenFor> <Feedback> さようなら </Feedback> ... </Command> 音声入力 音声出力 音声コマンド 音声コマンドの定義ファイル
  131. 131. helloGoodbye「こんにちは」 「さようなら」 音声入力 音声出力 音声コマンド protected override void OnActivated { ... string voiceCommandName = ... // 音声イベントから音声コマンド名を // 取得するおまじない switch (voiceCommandName) { case ”helloGoodbye": ... // 遷移するページ、テキスト出力、その他の処理 ... break; default: // 聞き取れなかったよ break; } } 音声コマンドのプログラムのスタイル
  132. 132. 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>
  133. 133. <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> フランス語 中国語
  134. 134. 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を含める
  135. 135. VCD ListenFor タグ  オプショナルな語句は、[]で囲む。話されても話されなくても マッチには影響しない。 <ListenFor> [Show] {options} </ListenFor>  次のような記述も可能である。 <ListenFor> Find {*} </ListenFor> この時、Find ... 以下のフレーズを含めてマッチする。この一 致したフレーズは、SpeechRecognitionResult.Text プロパティに格納される。
  136. 136. VCD Feedback タグ  Command要素の、必須の子要素。 コマンドが認識された時に、ユーザー側に表示し、読み上 げられる内容を指定する。  Feedback要素は、 PhraseList (あるいは PhraseTopic)要素のLabel属性を含むことができる。 この時、このコマンドのListenFor要素は、同じLabelを含 まなければならない。
  137. 137. 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>
  138. 138. Cortana プログラミング Cortanaを利用したアプリのプログラミングの流れを、 追ってみよう。 https://code.msdn.microsoft.com/Voice- Commands-Quickstart-64ce68ce#content
  139. 139. プログラムの基本的な流れ 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. ....
  140. 140. 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); もちろん、イベント・ドリブンの プログラミング・スタイルである。
  141. 141. イベントのチェックと読み取り  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; もちろん、イベント・ドリブンの プログラミング・スタイルである。
  142. 142. // 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; 様々なパラメーターの取得
  143. 143. 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;
  144. 144. 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; }
  145. 145. <?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
  146. 146. <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>
  147. 147. <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>
  148. 148. Amazon Alexa
  149. 149. 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
  150. 150. 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”
  151. 151. 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…”
  152. 152. 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)
  153. 153. 主要なコマンド 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
  154. 154. その他のコマンド  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>  ....
  155. 155. Speechlet「こんにちは」 「さようなら」 Request Response SampleUtterances.txt HelloIntent こんにちは HelloIntent はい。こんにちは HelloIntent おい HelloIntent こら HelloIntent なんかいって HelloIntent お元気ですか HelloIntent お元気 HelpIntent ヘルプ HelpIntent 助けて HelpIntent どうすればいい HelpIntent お願い 入力の発話を待ち受けて、 マッチすれば、定義された Intent Name に対応づける。 Intentは、Requestの一部 として、Speechletに送られ る。 cortanaと違って、出力用の データは、プログラム中に ハードコードされる。
  156. 156. 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); } 音声とカードが返る
  157. 157. Alexaは。音声を Intentに変えて ユーザーのプログ ラムに送る SampleUtterances.txt ユーザーのプログラム card speechspeechの 読み上げ cardの表示 こんにちは さようなら
  158. 158. Alexa HelloWorld サンプル User: “Alexa, say hello” Alexa: “Hello World!” User: “Alexa, what can I do?” Alexa: “You can say hello to me!”
  159. 159. 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() .... } もちろん、イベント・ドリブンの プログラミング・スタイルである。
  160. 160. 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 上で使っている!
  161. 161. 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が割り当てられて いる。
  162. 162. 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();
  163. 163. 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); }
  164. 164. 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); }
  165. 165. helloworld.speechAsset. IntentSchema.jason { "intents": [ { "intent": "HelloWorldIntent", "slots": [] }, { "intent": "HelpIntent", "slots": [] } ] }
  166. 166. 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); } }
  167. 167. 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に。
  168. 168. 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に。
  169. 169. Turing Test Machine ? ああ言えば、こう言う
  170. 170. Man-Machine Interfaceの変化  キーボードとディスプレー 入力 scanf(), 出力 printf() “Hello, Maruyama!” C, Java, ... ブロックする入出力  マウスとタッチスクリーン onclick=..., $(#diva). text(“Hello, world!”); jQuery, AngularJS, React, ... 非同期イベント・ドリブン  音声入出力 Speech Recognition Chip, Text-To-Speech Chip もちろん イベント・ドリブンのスタイル ただし、音声はプログラム上は、「テキスト」として扱われる (なぜなら、プログラムは文字の世界だから)
  171. 171. ニューラル・ネットワークと言語能力  人間の言語能力については、ニューラル・ネットワークか らのアプローチは、大きな成功を収めていないように見え る。ただ、それはやむを得ないことだと思う。  5億年前のカンブリア紀に、「目」を獲得して以来、生物は、 優れた知覚能力と運動能力を発達させてきた。こうした能 力を機械で実現するのが、ニューラル・ネットワークの得 意な分野。生物の進化の歴史からみれば、人間の言語能 力は、こうした感覚・運動系の能力の上に、30万年前に 登場したばかりである。  ただ、別の見方をすれば、ニューラル・ネットワークのアプ ローチは、機械によるSpeech Recognition, Text-To- Speechに、決定的な役割を果たしている。
  172. 172. Chomskyの「言語能力」論  この点では、Chomskyの「言語能力」論が、極めて示唆的 である。彼は、言語能力(Faculty of Language)を広い意 味での言語能力(FLB)と狭い意味での言語能力(FLN)を区 別する。  その上で、広い意味での言語能力は、感覚・運動システム (sensory-motor system)と概念・志向システム (conceptual-intentional system)と、recursionのため の計算メカニズム(これが、狭い意味での言語能力 FLNで ある)から構成されているという。  現在の言語へのニューラル・ネットからのアプローチは、この 言語能力を構成する感覚・運動システムの機械による実現 として、成果を上げていると言える。
  173. 173. “The Faculty of Language: What Is It, Who Has It, and How Did It Evolve?” http://goo.gl/pgSppH
  174. 174. アシスタント・システム 人間と機械との双対的な「共生」 「型の理論」と証明支援システム -- Coqの世界 http://bit.ly/1qbdXVE
  175. 175. Part 4 IBM Watsonは、 何をしているのか?
  176. 176. http://bit.ly/1v9dHvz このビデオは、とても 印象的である
  177. 177. IBM Watsonとは何か?  クイズ番組 Jeopardy! で優勝することを目標に、 2007 年に開発が始まったIBMのWatsonは、2011年には、人 間のチャンピオンを破った。  Watsonは、直接のターゲットをJeopardyに絞っている のだが、広範囲の分野での「質問応答システム」として、 最高の達成とみなされている。  Watsonには、自然言語で記述された「構造化されていな いデータ」の処理について、多くのアイデアが盛り込まれ ている。それらは、今後の自然言語と知識の処理のスタイ ルに大きな影響を与えていくだろう。  Watsonの進化は今も続いている。それは対話機能を獲 得し、医療分野を始めとして、パーソナル・アシスタント・シ ステムとして対象領域を拡大しようとしている。
  178. 178. Watsonの行っている処理の概要 Watsonの行っている処理は、極めて複雑で多岐に わたっている。ここでは、 まず、そのあらましを 簡単に見ておこう。 D. A. Ferrucci
  179. 179. Watsonの行っている処理の概要
  180. 180. Watsonは、自然言語を 解析する能力を持つ  Watsonと、先に見たSiriやCortanaといった「パーソナル・ アシスタント・システム」との最大の違いは、文の解析能力 の違いにある。  Watsonは、浅いレベルでは、文を文法的に構文解析して、 その上で、深いレベルで、その論理的な意味を分析しようと する。自然言語解析の枠組みは、ESG(English Slot Grammar)という文法理論に基づいている。  Watsonは、この言語解析の能力を利用して、自然言語で 記述されたWikipedia等の膨大なドキュメントから、形式化 された知識データベースを作成することができる。  ただ、Watsonは、こうした解析から得られたデータから、論 理的な推論ルールに基づいて、答えを探しているわけでは ない。
  181. 181. 質問の分析  Watsonが最初に行うことは、質問の分析である。もちろ ん、質問文は、先に見たESGを用いて解析される。  ただ、質問の分析の焦点は、質問の意味的・論理的含意 ではなく、次のことを明らかにすることに置かれている。 1. Focus: 答えを指している質問の一部である語句を見つ ける。 2. LAT(lexical answer types): どのような「型」を持つ 答えが求められているのか分析する。 3. 質問自身がどのようなタイプのものなのかの分析。 4. 特別な取り扱いが必要な、特殊な役割を持つ語句はない かの分析
  182. 182. 質問の分析
  183. 183. 答えの候補の生成  Watsonは、質問の分析が終わると、答えの候補を複数 生成する。  ここで用いられる基本的な方法は、質問文を構成する語 句をキーワードにした、Watsonが内蔵する Wikipedia 等のドキュメントに対する全文「検索」である。  答えの候補としてピックアップされるのは、この検索にマッ チしたドキュメントのタイトル等、いくつかの方法がある。 それについては、あとで述べる。
  184. 184. 答えの候補の生成
  185. 185. 答えの候補とその「証拠」を評価する  複数の答えの候補が出されたら、あらためて、その答え候 補を検索文字列に追加して、検索を行う。  マッチしたドキュメント中の文言(Passage)を、「証拠」とし て収集する。  答えの候補とその証拠を、様々な方法で色々な角度から 「評価」して点数をつける。こうしたモジュール化された評 価の多様性は、Watsonの能力の高さと柔軟さの基礎を 構成する。  一つの質問に対して100の答えの候補を生成し、一つの 答えの候補に対して100の証拠を集め、一つの候補と証 拠の対に対して100の評価を走らせる。こうした、100 x 100 x 100 の百万オーダーの処理を、Watsonは、数 秒で終わらせる。
  186. 186. 答えの候補とその「証拠」を評価する
  187. 187. 最終的な判断  いろいろな学習モデルを参照して、評価の点数に、重み 付けをして、最終的な判断を下す。
  188. 188. 最終的な判断
  189. 189. ESG(English Slot Grammar) Watsonの自然言語理解のベースになっているのは、 Michael C. McCordが開発したSlot Grammarと いう枠組みである。
  190. 190. 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
  191. 191. Slotとは?  Slotというのは、基本的には、文中の句の文法的な役割 を表している。いくつかのSlotの例を挙げる。 subj subject (主語) obj direct object (直接目的語) iobj indirect object (間接目的語) comp predicate complement (述語補語) objprep object of preposition (前置詞目的語) ndet NP determiner (名詞句限定子)  Slotのもう一つの役割は、意味論的な役割である。 例えば、compは、述語の「位置を持つ引数」として、言葉 の意味を表す。
  192. 192. Slot Grammarでの文法的解析  次の図は、“Mary gave John a book”を、Slot Grammarで解析したものである。  文法的には、スロット subjは、"Mary"で「満たされ」、ス ロット iobjは、"John"で「満たされ」ている。等々。こうし た観点からは、スロットが文法的な役割を果たしているこ とがわかる。
  193. 193. 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 の名前とみなすことがで きる。こう考えてもいい。これらのスロットは、動詞の意味 を表す述語の位置を持つ引数だと。
  194. 194. Complement Slotと Adjunct Slotと  このように述語の引数になるスロットは、complement Slot と呼ばれ、Slot Grammar Lexicon(スロット文法 語彙集)という辞書を通じて、語義に関連ずけられる。  一方、それ以外のスロット、ndet(冠詞・定冠詞)のような スロットは、adjunct Slotと呼ばれて、Slot Grammar のsyntaxに関連することになる。
  195. 195.  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
  196. 196. 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)は、スロットを表して いる。
  197. 197. Slot Grammar Lexicon  次のエントリー give < v obj iobj は、giveは動詞(v)で、二つのスロット obj と iobj を取 ることを表している。 Alice gave the book to Bob. Alice gave Bob the book.
  198. 198.  最初の文では、スロット obj は、名詞句(NP) the book で満たされ、スロット iobj は前置詞句(PP) to Bobで満 たされている。二つ目の文では、スロット iobj は、異なる 位置で、名詞句 Bobで満たされ、スロット obj は、やはり 異なる位置で、名詞句 the bookで満たされている。  二つの文で、iobjを満たしているものは、NPとto-PPで異 なるのだが、満たしているものの論理的役割は同じなの で、二つの文、どちらでも、Bobが本を与えられた人物で あることがわかる。
  199. 199. Lexconのエントリーの例
  200. 200. 意味フレーム  Slot GrammarのLexiconでは、 見出語 < 品詞 スロット の後ろに、その語の「特徴」を 表す情報が並ぶ。  その語についてのその他の付加的な情報も、この後ろに 並ぶ。Slot Grammar Lexiconでは、こうした記述を Sense Frame 「意味フレーム」と呼んでいる。 見出語 < 品詞 スロット 諸特徴 その他の情報 .....
  201. 201. Features 見出語 < 品詞 スロット 諸特徴 その他の情報 .....  「諸特徴 (Features)」と簡単に書いたが、品詞ごとに、 動詞についてのFutures、名詞についてのFutures、形 容詞についてのFeatures、副詞についてのついての Futures ....と、数多くのFeaturesがある。  先の論文、“The Slot Grammar Lexical Formalism” http://goo.gl/57vxL4 の多くの部分は、 このFeaturesの記述に当てられている。  Featuresの詳細については、スペースの関係で、ここで は触れない。次に、その一部のリストを示す。
  202. 202. “Mary gave a book to John.” の解析
  203. 203. 「表層構造 (Surface Structure)」と 「深層構造 (Deep Structure)」  先の図で重要なのは、文法的な構造を表す「表層構造 (Surface Structure)」と意味を担う「深層構造 (Deep Structure)」の二つから文を解析しようとしているところ だ。(もっとも、これは50年以上前のChomsky以来の古 典的な観点だ)  もう少し、詳しく見てみよう。 Slot Grammarで「表層構造 (Surface Structure)」を 担っているのは、"Tree Line"と"Slot"と"Features"だと されている。一方で、「深層構造 (Deep Structure)」を 担っているのは、"Word Senses"と"Arguments"だと される。
  204. 204. “Mary gave a book to John.” 表層構造・深層構造
  205. 205.  今度は、この図の中心をなす下半分に注目しよう。 この領域は、大きく、三つの部分からなる。  一番左は、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)」で与えられる。
  206. 206. “Mary gave a book to John.” Tree Line + Word Sense + Features
  207. 207. 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: 「単数」 である。
  208. 208. Wikipedia Infobox と DBpedia DBpedia is a crowd-sourced community effort to extract structured information from Wikipedia and make this information available on the Web.
  209. 209. Wikipediaからの情報抽出  Wikipedia Infoboxは、投稿者がこのツールを使うと、 自動的にタグ付けされたデータが生成されるというもの。 http://en.wikipedia.org/wiki/Help:Infobox  DBpediaは、基本的には、先のInfoboxを利用して、 Wikipediaから構造化されたデータを抽出して、Webで 利用出来るようにしようというコミュニティの取り組み。 https://en.wikipedia.org/wiki/DBpedia
  210. 210. {{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での記述
  211. 211. DBpediaでのビートルズのエントリー
  212. 212. DBpediaでのビートルズのエントリー
  213. 213. Marie Curieの検索で 表示される「要約」 「要約」は、infobox等から生成される
  214. 214. 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
  215. 215. 要約システムは、普遍的か?  Google Knowledge Graphで、情報の「要約」の機能 が追加されたのは、注目に値する変化である。検索シス テムの変化として、正しい方向の一つだと思う。  Google Knowledge Graphが、一定量の、要約のデー タベースを持っているのは事実であり、それは、その実装 方法を含めて、興味深いことである。  ただ、それは、「最良」のものであろうか? 質的な問題は、 置いておいても、重要なのは、その量である。量的には、 Wikipediaのページでさえ、全てのページの要約が提供 されている訳ではないことにすぐ気づく。一般のページの 要約には、ほど遠いのが現状である。その意味では、全 てのページを対象にする、ページランクのような普遍性を、 現状では、それは持っている訳ではない。
  216. 216. 誰が、要約をしているのか?  こうした量的な制約は、基本的には、要約のデータが、ど のように生成されているのかという問題に帰着する。いっ たん、要約のデータが、なんらかの形で出来てしまえば、 我々は、その出自を問うことはないのだが。  要約データを、どう生成するのかという点では、基本的な アプローチは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.
  217. 217. 質問の分析 “Question analysis: How Watson reads a clue” http://brenocon.com/watson_special_issue/02%20que stion%20analysis.pdf
  218. 218. 質問の分析
  219. 219. 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

×