ジオマーリン

geomerlin.com に関することを中心に。難しいことをもっと難しく書くブログ。

自然言語処理@深層学習を少ない教師データで効果を出す提案(ベクトル化、スパースモデリング)

たくさんデータを集めることのほうが、プログラミングよりもよっぽど大変なニューラルネット

自然言語処理だと、教師データを作れそうで作れないからすごくフラストレーションがたまる。

 

ここで真剣に教師データ不足について考察してみる。

教師データ不足を分析すると二通りの不足の仕方がでてくる。

①大量に使えそうなデータは存在するが加工が容易ではない

②教師データが本当にない

 

まず解決方法をそれぞれ見当をつけてみる

①大量に使えそうなデータは存在するが加工が容易ではない→2段階で学習する

②教師データが本当にない→スパースモデリング

 

こう見当をつけた理由は以下の通り

①word2vecに加工しておけば、大量のコーパスデータを背後に準備できるから、訓練データで出てない単語でも推測できる。

 

自然言語処理は特にbagofwords形式だとスカスカになるからL1正則化で精度を上げられる。

 

調べてみたところChainerにはL1正則化が準備されている!!!

これで精度が上がったら報告しようと思う。

AI時代に重要なのは技術かリベラル・アーツか? 『記号と再帰』の表紙をみて思ったこと。

 リベラル・アーツ教育はなぜ見捨てられないのだろう?

 

 簡単な話、リベラル・アーツ教育の定義が「それさえしっかりやっていれば、何が大切か分かる教育」とすることもできるからなのかもしれない。

 

 しかし、僕はなんだか計算哲学の本からは違う答えが匂ってくる気がした。

 田中久美子の「記号と再帰」を3年前に読んだときを思い出した。このコンピューター哲学の本は、哲学的記号論ソシュール/パース)と、ラムダ計算理論やプログラミング言語設計を結びつけて面白い結論を出した本だった。

 

「基本的に関数は”一つの入力と一つの出力”に帰着できるが、再帰関数は関数名が必須となってしまうため”一つの入力と一つの出力と一つの関数名”までにしか帰着できない。そしてこれは二項関係と三項関係に対応する。三項関係はつまりネットワークだ。」

と要約できる主張だった。

 この本は明らかにゲーデルエッシャー・バッハの影響を受けていて、壮大な計算論が割り切れない哲学に回収されるところもどこか似ていた。(GEBは途中を読み飛ばしたこともあり、語れるほど熟読していない)

 そして二冊ともなぜか、その視点自体が結論や経過よりも魅力的だったことを覚えている。その視点とは、再帰(フィードバック)構造とネットワークへの形式システムの拡張が知能の根源だと考える視点だ。

 

 たぶん今AI界で活躍しているのはゲーデルエッシャー・バッハを読んだ世代だと思う。そして今AIの中心的な議題として残るベイズ主義・フィードバック構造・創発・ネットワーク・平衝は全部数学・統計・計算機で回収できず、どこか割り切れない哲学が割り込んでいるカンジがある。

 

 AI時代にこそ必要なのはリベラル・アーツなのではないか。そう思わせるものこそ、AI時代を作った書籍なんだよなーと思った。

 

 だけど、「機械学習が今すごいから、お前ら全員古文をガリ勉しろ」っていうのは、なんか明らかにおかしい。たぶん「リベラル・アーツが重要」っていう思想の要約は「成熟した価値観を持て」ということでしかない気がする。それって学校で教わるものではなくない?というカンジもする。

 

 この投資家の対談は面白いと思う。投資の世界では知能システムによる運用成績がヒトよりよくなってしまったことが有名だ。それも知りながらこのヒトはこう言っているのだと思う。

 

www.businessinsider.jp

 

 それに対してこの記事も面白い

www.gizmodo.jp

 

 どちらの記事でも共通するのは、「技術者は無視できない」という世界観と、「単なる技術者」に畏怖の念を覚えていないところだ。もしリベラル・アーツとやらが、技術も”成熟した価値観”も与える教育なら、ほぼ全員がそれを求めるところだろう。ひとつ言えるのは、そんな教育今まで見たこともないし、聞いたこともない。利害が絡んだ嫌な経験がない「綺麗なリベラル・アーツ」が成熟した価値観を与える気がしないし、技術力だけで社会の頂点にたてる「パワフルな技術者」も知らないから。

 

 

 これほど、僕もふくめ全員がグチャグチャ悩むトピックだけど、一番すっきりする答えをくれるのは技術至上主義のシンギュラリティ論者だな。

 だって彼らの主張は

 「みんな将来脳みそにプラグぶっさすんだから、勉強なんて無駄無駄無駄」

 だから。

 

 ここでこのシンギュラリティ的な考え方には教養はないと感じる。なぜなら簡単に考えすぎて、慎重さが足らないから。そして思うのはリベラル・アーツっていうのはグチャグチャ悩む能力だってこと。つまりよく言えば「考える体力」みたいなのと関係がある。ホフスタッターも田中久美子もみんながどうでも良いって思うものを、数学・計算機と哲学についてずっとグチャグチャ考えて、あんなに非凡な成果をだしたんだなと思う。

 

 リベラル・アーツが見捨てられない理由はもう簡単だ。

 誰も頭にまだプラグをぶっさしてないなら、技術者だろうが投資家だろうがテクノロジー・エリートだろうがグチャグチャ考える必要があるからだ。

 

無駄っぽいことについてグチャグチャ考えることが許される世の中、それがリベラル・アーツ重視な世の中なら、大歓迎だな。だってグチャグチャこの文章を書いたんだから。

地政学リスク(GPR)を算出する知能システムを組んだ

要約地政学リスクの教師データを作成し、ディープラーニングシステムを組んだ。タイトルを入力すると地政学リスクが算出されるシステムである。この効果は http://geomerlin.comで確認できる。

 

トランプvs北朝鮮の市場への影響が発端となって、「地政学リスク」という単語がまた注目されている。

どのくらい注目されているのかは下図で一発(検索回数)

 

  しかし、「リスク」という表現がなされているだけで、メディアではどういう指標でどうやって算出しているかが全く報じられていない。

 もし地政学リスクが算出できるものでないならば、そのような表現をする必要がどのくらいあるだろうか?「地政学リスク」ではなく「危険性」でよくないだろうか?

むろん地政学界隈の先生方はそんな状況を許すわけがなく、ちゃんとGPRと言う指標が次の論文で指摘されている。

Dario Caldara , Matteo Iacoviello 共著 「地政学リスクを算出する」

https://www2.bc.edu/matteo-iacoviello/gpr_files/GPR_PAPER.pdf

 

この論文から次のグラフを引用させて頂く

f:id:geomerlin-com:20170416222122p:plain

このグラフがGPRの月次グラフであり、データセットも公開されている。

GPRの算出方法は論文中に書いてあるのでここでは割愛させて頂く。

すこし西側中心の指標に見えてしまうのは、”地政学リスク”の定義が「地政学的要因による市場への波及リスク」であることを考えれば、差し引いて納得できるのではと思う。

最も重要なことは、これにより教師データが作れるというところにある

というわけで各年月次の地政学的事象をwikipediaデータから取得し、これとGPRをセットにして教師データを作成した。

これをニューラルネットワーク(chainer)で学習させ、文章(ヘッドライン)に対してGPRが近似として算出するシステムとなった。

ニューラルネットの構成は次のとおりである

①入力はBagOfWords形式

ドロップアウトなし

③出力層は1ユニット、GPRをそのまま出力

 

結果がつぎのとおり。

次の僕が勝手に作ったヘッドラインを打ち込んで見る。

①"アジア経済が再び成長の兆し、ドル高の影響か?"
②"ロシア,ユーゴ空爆。1000人死亡"
③"アメリカ,ユーゴへ空爆。1000人死亡"
④"フランス、シリアへ軍事介入。空爆を開始"
⑤"アメリカで同時テロ発生1000人死亡。ISILか?"
⑥"アメリカ陸軍、イラクへ再び侵攻。イラク戦争再燃”

①GPR:52.08543396
②GPR:67.87326813
③GPR:89.07659912
④GPR:98.18653107
⑤GPR:118.4070816
⑥GPR:165.49940491

 

予想通りの順番にはなった。個人的には②が小さすぎるかな?

とにもかくにも、ある程度マトモな地政学リスクの導出システムができた。

これはgeomerlinにすぐに反映させようと思う。そして改良していきたい思う。

geomerlin.com

動的サイト(ゲームライブラリ・D3)はハイブリッドアプリに不向きなのか?

D3.jsは可視化のためのjsライブラリだ。これを使ってモバイルアプリを出すことを考えているヒトもいるかもしれないので書いておこうと思う。なぜならD3.jsはハイブリッドアプリとして出すのには懸念事項があるからだ。

 

・ハイブリッドアプリはグラフィック描画によわい

ハイブリッドアプリとはそもそもネイティブアプリ(swift,java)とウェブアプリ(ブラウザ上でhtml/

css+js)の中間だ。

monacaの経験しかないので,monacaについてしか言及できないが、ウェブアプリを素早くモバイルアプリにするためにできている。多くのウェブサイトは静的サイトであることに注意しなければならない。ハイブリッドアプリは静的サイトのアプリ化を指向している。

 

さて動的サイトにかなり重要である要素はjavascriptそして今はsvgも加わる。

svgの描画・レンダリングはそれぞれのブラウザの仕様で行われている。たとえばchromeでは高速で動作するが、firefoxでは操作性に影響があるほど遅く動いたりする。

ハイブリッドアプリは内側に独自のブラウザが内包されているようなものだと考えて良い。

 

これらの状況から予想できることは、静的サイト向けに作られているハイブリッドアプリの描画エンジンは動的サイトのjsによる大量のDOM計算に耐えられないのでは?ということだ。

monacaで使われている描画エンジンはどう考えてもchromeほど最適化されていない。

はっきり言って遅い。

これから調べなければならないことはネイティブコードのようにうまく動くjsはどのライブラリで作れるかだ。

 

日本語の自然言語処理技術の市場規模は266億円?

日本語のNLPの市場規模はどれくらいか気になった。

 

とりあえず最もシンプルな概算を行う。

日本語NLP規模 = 世界NLP市場規模 × ネット上使用言語の日本語率

        = 76億ドル * 0.032 = 266億円

 

参考:

 世界NLP市場規模

http://researchstation.jp/report/MAM/2/Natural_Language_Processing_2021_MAM286.html

 ネット日本語率

インターネットで使われている言語の普及率をグラフ化してみる(2016年)(最新) - ガベージニュース

ニューラルネットワーク(Chainer)を使うようになって考えたこと

 機械学習をシステムに組み込みたかったけど、SVMを作るのが今まで難しすぎたということが障害だった。

SVMを組むのが難しいのは次の二点

①特徴量を設定するのが難しいこと

②教師データを集めるのが難しい

 

 そしてSVMではなくNN(ニューラルネットディープラーニング)を導入したらすんなりシステムで機械学習が作動するようになった。

 今のニューラルネットが何が素晴らしいかといえば、①特徴量云々を無視できることだ。

ニューラルネット教師データさえ揃えば何も心配はない

 

この②教師データを集めるのが難しい は何も解決していないし、問題は大きくなってすらいる。

僕はネカフェで大量にニュースにタグをつけたけど、「人工知能が人類を云々」的議論のきっかけになっている深層学習技術とこの作業のイメージギャップは確かなものだった。

 

どう考えても、(1)少ない教師データから学習する技術 (2)雑多なデータから教師データを認識する技術 がないと「全ての技術者に有益・不可欠な技術」にはならないと思う。

そしてこれは人工知能機械学習)技術者が解決するものというよりは各システム設計者・NN使用者がうまくニューラルネットを設計して始めてできるものだろうと思う。

 

このコラムの途中でPFNの代表が「これからのシステム開発はNNの設計が中心になる」と言っていたけれど、

itpro.nikkeibp.co.jp

これには僕はある程度うなずくことや理解ができる。しかしそれは、設計者が上の(1)少ない教師データから学習する技術、(2)雑多なデータから教師データを認識する技術を自力でできるAI技術の素地が整ってから始まる世界だと思う。

あるいはいくらでも教師データがそこら中に転がっているネット社会がうまれるのか?

 

MonacaのInappbrowserのエラーを遅延ロードで回避

モナカに大きなプロジェクト(長いjsファイルやエラー前提のシステム)を入れるとプラグインがうまく応答しないことがある。

 

これは憶測なので違ったら指摘して欲しいけど、プラグインが動かない原因はこれ

①仕様上devicereadyイベント発火ではじめてプラグインが使用可能

②devicereadyイベントまでに、jsファイルのロードが掛かり過ぎるORエラーが起こると、発火しないもしくは、プラグインのjsが作動しなくなる

 

というわけでバカでかいプロジェクトをそのままindex.htmlに直接書いたりロードするとうごかなくなりました。

そこで<script src="js/bakadeka.js"></script>と書いて読み込んだファイルを以下に変更

<script src="src/jquery.min.js"></script>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
$.getScript("js/bakadeka.js")
}
<script>

何をしたかというと、ondevicereadyでプラグイン使用可能を確定したうえで、そのあとjsファイルを読み込んだ。(jqueryは各自でダウンロードしてコピペ+アップしてください)

ちなみにhtmlも遅延ロードしてみたが、うまく表示されなかったので諦めた。