2018年12月24日月曜日

App Inventor for Android で SVM(サポートベクトルマシン)分類

以下は同じような心境とお考えください。

「なぜ山に登るのか」
「なぜスマホでSVM分類するのか」

下記の書籍は、数多くある機械学習関連のうちの非常に優れた一冊です。これに刺激を受けて、その中にあった、SVMによる分類の例題を、Android向けにデモアプリとして動かしました。下図のとおりです。

歴史上の人物の特徴量を与えて、その人を「政治家」か「非政治家」かに分類する例題です。



SVMのJavaライブラリは、LIBSVM(国立台湾大学による)を利用させていただきました。上記のAndroidアプリは、MIT App Inventorを使って作成しました。既存のApp Inventorのブロックだけでは、このようなアプリはほとんど作成できません。そこで、LIBSVMを使ったJavaアプリを作成し(下記書籍を参考に)、App InventorのActivity Starter機能(ブロック)を使って、これを呼び出す形にしています。上の実行例画面でその概要を示します。↑拡大してご覧下さい。

このアプリでは、20名のデータのうち、ランダムに1名を選んで、それを「テスト用データ」とし、残り19名のデータを「学習用データ」として学習、テストを繰り返し実行できます。

また、このアプリの学習データを入れ替えれば、類似の問題、例えば有名な「タイタニック号の乗客の生死」の分類等にも(データ加工に幾らかの工夫は必要でしょうが)適用できそうです。

●参考書籍
杉本徹+岩下志乃共著「Javaで学ぶ自然言語処理と機械学習」、オーム社

2018年12月20日木曜日

A good example of Extension for App Inventor

If you want to create your own blocks (Extensions blocks) with App Inventor, how about referring to the example below. It is an ImageProcessor Extension published on the MIT App Inventor site. This makes two images to be combined into one.
http://appinventor.mit.edu/extensions/

It is said to be "Unsupported" materials, but intelligible Java source code has been released. The main functions of this extension are as follows:
  • Fetch two images into the application, then creates an image combining the two.
  • Give a weight to decide which image to adopt strongly.
  • For all the pixels, for each of the elements of R, G, B, A, both images are combined according to the weight. It is as follows: (pixel in image C) = weight * (pixcel in image A) + (1 - weight) * (pixcel in image B)
  • Writes the image of the join result to external storage. In doing so, give write permission with annotation @UsesPermissions.
From the Java source code of this Extension, you can learn the following basic items:
  • Basic operation of pixels of an image
  • How to make a function block with and without return value
  • Generation of user event and its processing
  • How to set properties (image size, weight,  etc.)
After understanding this Java source program, I made a very simple application using this extension. The following figure shows the entire source program of this application. Of course, thanks to this Exrensions block, this is extremely consice. Furthermore, after preparing the Java source list, you do not need to set up the build environment yourself. The following cloud builder will take care of everything.

Complete source program using Extensions blocks
Two examples of execution result of this application are shown below. The images as expected were obtained. How fun this is!

Original images(above) and the combined image(blow)

I would like to introduce my second version Extension which is a little advanced now.


With this experience as a clue, you want to develop yet another unique Extensions. The following reference sites would help you.

# How to make Extension concretely
http://ai2.appinventor.mit.edu/reference/other/extensions.html
# Java source code for existing blocks in App Inventor
https://github.com/mit-cml/appinventor-sources/tree/master/appinventor/components/src/com/google/appinventor/components/runtime


2018年12月19日水曜日

Java is Still Free

「Javaは有償化される!」というニュースが流れていました。しかし、本当にそうなのか、真の意味はどうなのかを問う記事を私は過去に書きました。以下の記事です。
Java(JDK)有償化で大学等での教育研究に支障はあるか

また、下記のサイトにもその関連記事が掲載されています。
「すべての人のためのJavaプログラミング 書籍サポートページ」
https://www.i.h.kyoto-u.ac.jp/users/tsuiki/javaEveryone3/link.html
「Javaプログラミングを学ぶ...」

このほど、Oracle Code Oneで発表された講演に、「Java is still free」というのがあったそうです。これは読んでみる価値がありそうです。日本のJava Championらによる以下の記事は、正確そうで信頼できそうです。

https://docs.google.com/document/d/1HtUnuAkUEDGL2gwUOkrDrmLe_zrD6wpAyqYBZxRmHv4/edit

https://codezine.jp/article/detail/11258?utm_source=cz-news&utm_medium=email&utm_campaign=cz-news20181219

2018年12月13日木曜日

Creating my own extension blocks for App Inventor

MIT App Inventor for efficiently developing mobile applications has functions named Extensions that users can develop their own blocks. If you know Java, in principle you can do that, but in fact it's not so easy. Development methods for Extensions are presented in several sites, among which the AppyBuilder Code Editor shown in the following is extremely easy to use and useful:
https://amerkashi.wordpress.com/2018/11/26/appybuilder-code-editor/
http://Editor.AppyBuilder.com

Anyway, here we will create a simple and unique block with Extensions. The figure below is a hearing training application using English news. There is a counter to record how many times you have heard a particular news. Of course, even when resuming after turning off the power of smartphone, that counter must be continued. In other words, it must be created as a persistent counter.

Persistent counter in a real app
We will proceed with a simple application that extracts only this persistent counter portion as follows.

Persistent counter for an examination

If you use TinyDB, you can easily create such a counter as shown below. However, to do that, first you need to read the value of the counter (tag) from TinyDB, add 1 to it, and store the result in TinyDB again. This is very troublesome, because this counter is supposed to be used in many situations.

Persistent counter made with normal TinyDB (built-in)

To alleviate this complexity, we have created a new block to "count up one tag value" that is not found in the conventional Tiny DB. Including the original TinyDB functions, I made this name FoYoDB. As you can see, count-up part became very neat!

Persistent counter made with new FoYoDB (Extension)

In order to have versatility in this FoYoDB, we also made a block that allows you to arbitrarily specify "step value for counting up" as follows. This time, we created Extensions to extend original TinyDB, but from now on we would like to tackle the development of Extensions with higher originality.

All blocks created as an extension FoYoDB

Google Fusion Tables Turndown

One of the easy-to-use web databases on various smartphone applications is Google Fusion Tables. This has been effectively used especially in MIT App Inventor, Thunkable, AppyBuilder and others. So I was surprised at the email from Google that I received recently. In the mail, it was written as follows:

"we will be retiring Fusion Tables. We plan to turn down Fusion Tables and the Fusion Tables API on December 3, 2019. .... Maps using the Fusion Tables Layer in the Maps JavaScript API v3.37 will start to see errors in August 2019."

please see also MIT App Inventor Forum:
https://groups.google.com/forum/#!topic/mitappinventortest/Z5ft8KY93O4


Famous Pizza Party app based on Fusion Tables

In other words, the day we have to say good-by to FusionTables is coming! Besides this, there is also a key-value type Tiny WebDB as a web database that can be used from a smartphone. However, this Fusion Tables is a highly versatile SQL type, and furthermore it was superior in visualization and cooperation with maps. Retiring this valuable database makes us sad.

Let's write some memories of Fusion Tables. As an example of App Inventor app, Pizza Party using this was famous. Below are excellent commentaries, which many enthusiasts were able to create their own applications based on.

http://appinventor.mit.edu/explore/ai2/pizzaparty.html

In addition, the following Pura Vida Apps (by Taifun) has responded to various troubles in using Fusiontables. Many users will also appreciate it.

"Frequently Made Errors with Fusion Tables and how to fix them"
"How to use the Service account option to connect to a Fusion Tables"
https://puravidaapps.com/fusionservice.php

Currently, with smartphone applications, more advanced Firebase DB and CloudDB can be used. Actually in App Inventor, those functions are either built in as standard or provided as one of Extensions. In the future, these will gradually be used. 

Thank you Google Fusion Tables!
WebDB expected as a successor to Fusion Tables

2018年12月10日月曜日

A paper on parallel algorithms for old supercomputers

As you may know, ResearchGate is one of social network services for academic persons. I have not used it very much, but I registered as a member in the past. Recently, the following e-mail arrived from ResearchGate.



The above paper was accepted in IEEE Transactions in 1985 (about 33 years ago). A kind of parallel computing algorithms for the supercomputer (vector machine) at the time was proposed and analyzed. This modest e-mail tells me that this paper is cited from 31 other papers and that 51 subscriptions have been made by ResearchGate readers. 

It is not a big event, but I am happy myself. At that time, the supercomputer was a vector computer with several number of parallel pipelines controlled by chaining technology. After that, there are thousands of processor configurations that are said to be massively parallel, and now they are transitioning to millions of many core (multi-core) configurations. However, underlying foundation of most parallel algorithms would be common to any configuration. For that reason, the algorithms for the old vector machine may still be a reference now.

2018年11月30日金曜日

八木勲先生が、国際会議BESC2018でBest Paper Award受賞

 神奈川工科大学情報工学科の八木勲先生が、国際会議BESC2018でBest Paper Awardを受賞されたとのことです。たいへんおめでとうございます!
 受賞論文名などは下記に掲載されています。

 正確な受賞名は、Distinguished Research on Behavioral and Economic Computingとなっています。八木先生は、現在の情報工学科では数少ない、この分野の専門家として継続的に研究されてきました。当方は素人なので、論文内容はそのタイトルにあるMarket Liquidity(市場流動性)とAgent-based(エージェント指向)という用語からおぼろげながらに推測するしかありません。それでも、これは、現在の社会、経済情勢での課題解決に向けた遠大な研究テーマであるように思われます。今後のいっそうのご活躍を期待致します。

2018年11月22日木曜日

人工知能学会での招待講演と言えば...

本日(11/22)から、人工知能学会合同研究会2018が開催されました。
慶応大学矢上キャンパス2018/11/22〜23
https://www.ai-gakkai.or.jp/sigconf/

以下、ごくわずかな情報に過ぎませんが、ご参考になる点があれば幸いです。
私が聴講したのは、以下の招待講演1件だけです。他には何も参加しませんでした。



このような学会で、招待講演となれば、ずばり、これしかないでしょう!というタイトルでした。

岡野原 大輔 氏「深層学習の現在とこれから」
株式会社Preferred Networks 代表取締役副社長

(以下、当方の浅学ゆえに、不正確さや誤解が含まれているかも知れません。その前提でご覧いただければありがたいです。)

  • B2Fのマルチメディアルーム(恐らく数百席以上の座席)は超満員で立ち見もいた。
  • ディープラーニングの構成などに関する基本的な解説があった。
  • Preferred Networks社の開発した、あるいは関わった応用例が紹介された。
  • 小生(この記事の執筆者)は、10月のCEATEC Japan 2018の会場で、ファナックの「バラ積み(picking)ロボット」とトヨタのロボットを使った「お片付けロボット」を見学した。それは、当社で開発したディープラーニングによるものだった。
  • 技術的な目標としては、次の3段階が考えられるという。Step1:自社でデモを作って見学してもらう、Step2:CEATECのような大規模な会場で4日間連続運転で公開してデモする、Step3:実用に供する。多くは、まだStep2どまりだという。
  • Deep Learningが高度な画像認識などで驚異的な認識性能を示す場合が増えているが、実は、なぜこれだけ優れた結果がだせるのかは、未解明の部分が多いとのこと。
  • 当社では自動運転技術にも取り組んでいる。交差点で「ぶつからない車」のデモで有名になったものも手がけた。その際、教えていないある行動、すなわち、人間が思い付かなかった行動で衝突を避けた車が出現した。それは、実社会では御法度の、「交差点内でバックして避けた」であった。これを見ると、本当に自然に創発がなされたように感じられる。しかし、自動運転ではそのような危険性も孕んでいる。
  • 実用レベルのDeep Learningでは、典型例として、ひとつの学習あたり170万枚の画像を用意、NVIDIAの高性能GPU 512台を使って30時間などという膨大なコストをかけている。
  • 人間は、そんなに膨大なエネルギーを必要とせずに認識できているように思われる。DNAに織り込まれているものが効いているのか。例えば、幼児に(絵本で)象のイラストを1枚見せて教えた後に、動物園につれて行くと、すぐに、初めてみた象を指さして「ゾウさん」などと言う。
  • 今後のDeep Learningに求められるもののひとつに、「メタ学習」がある。例えば、ある種のものの認識に要した学習法(ネットワーク構造と重みの他、多数のハイパーパラメータに関する)があり、また別のものの認識のための学習法がある。そのような「学習の仕方」を学習することである。それによって、少ないデータから適切に学習を進められる途を得る。

2018年11月16日金曜日

丸一日、英語漬けになってみた

 英語がかなりできる人でも、ヒアリング&スピーキング能力をさらに高めたいと思っているようです。その思いは、多くの方々と共有できそうです。そこで、手軽に、ヒアリングができるようにと、下記の記事を書きました。

「英語ニュース ヒアリングアプリのカスタマイズ」
https://sparse-dense.blogspot.com/2018/11/blog-post_12.html

 ですが、これで繰り返し聞いて、その効果を高めるには何かが必要なはず。これと密接に関係するのですが、日本人の多くは、英文の単語一つづつを正確に発音しようとする傾向があるとのこと。私もその一人かも知れない。それだと逆に通じない。そこを打破して、ネイティブの発音(スピーキング)に近づける。それによって、ヒアリングもスッと自分の耳に入ってくる。英語らしい表現と瞬発力も必須。そんなことを目指した1日講座を受講してみました。

 「聞き取れる」ならば「話せる」と考える人も多いようですが、この講座はむしろ逆の立場のようです。すなわち、「ネイティブに近い音読を重ねる」ことにより「ネイティブ発音が耳に入ってくる」という方針のようでした。

「丸一日英語漬け」が終わり、丸の内オアゾを出て北口へ向かう
 
丸の内オアゾでその講座はありました。受講者の大半は、現役のビジネスマン、ビジネスウーマンのようです。彼ら彼女らに混じって丸一日、なんとか頑張って英語漬けになってきました。詳細はここには書けませんが、とても貴重な指導を受けることができました。This lecture taught me the tips of speaking and hearing. 一日だけとはいえ、一定のコツが掴めた気がしています。そして、この後に、上記の「英語ニュース ヒアリングアプリのカスタマイズ」で作ったソフトで、英語ニュースを聞けば、だいぶちがうのではないか。それは今後やってみることですが。

 ただし、この受講の効果も、訓練を続けないと次第に消滅してしまう。世の中厳しい。

2018年11月14日水曜日

再び、ソニーのNeural Network Console

 今回は、ソニーのNeural Network Consoleについてです。ちょうど1年前に、これを使って、人工知能でお菓子を認識するという記事を4つ書きました。お菓子の袋を振った音の認識が、こんなに楽にできるという雑誌の記事を見て追試したにすぎませんが。その一つは以下のものです。

(Neural Network Consoleを利用した当方の過去の記事)

 しかし、今回の記事は、このNeural Network Consoleの解説本が本日、新たに出版されたということに注目します。2冊の目の本ということですが、1冊目は、Windows単体のNeural Network Consoleを使って、画像認識(CNNによる)の例題が主に書かれていました。それに比べて、今回の2冊目は、クラウド版のNeural Network Consoleを使った解説です。しかし、Windodws単体版でも使い方は基本的に同じです。それよりも、今回の新版では、RNNを解説しています。時系列データの処理、自然言語処理が含まれています。これには、またグラッときます。Deep Learningへ入力するデータの準備についても解説があります。Tensorflow - Kerasもあり、MATLABもあり、あまり目移りするのも良くないですが。


 CNNでもRNNでも、本格的なディープラーニングをやろうとすれば、長時間演算となり、GPUが無いPCでは限界があります。しかし、あらたにGPU付きの高価なPCを買うのは躊躇します。買っても、そんなに使わないかもしれない。このジレンマ、なんとかならないか。

 その一つの答えが、クラウドでGPU付きのマシンをレンタルで使うことです。Amazon、Googleでもそれはやっています。しかし、私は、このソニーのクラウド版Neural Network Consoleがいいのではないかと思っています。というのは、それと同じ環境のWindows版が手元にあるわけですから、その上で徹底的に試行すればよい。そして、いよいよ、本格Deep Learning 決行となれば、そのデータなどをクラウド側へ移して実行すればよい。クラウド料金体系(CPU, GPU有無やProcessing Time従量課金)も明確ですから、その時だけクラウドにすれば良い。

 ということで、しばらく休止していた、Neural Network Consoleの利用を再開して、意味のあるAIアプリを開発する方向に向かう。そのような状況で、今回の新刊出版はとても参考になりそうです。

(注)クラウド版のNeural Network Consoleは、CPU合計10時間(GPU無し)、Work Space 10GB、Project 10個の範囲で無料となっています。それを越えて使う場合は、従量制で課金(GPU使用指定も可能、予算上限設定も可能)のオプションがあります。小生の場合、上記で示した「お菓子の袋を振った音の認識」の一連の試行で、すでに無料枠CPU約6時間を消費してしまいました!(1回当たり、CPU 30分前後の試行でしたが。)

2018年11月12日月曜日

英語ニュース ヒアリングアプリのカスタマイズ

 英語の資料や文献を読む機会は多い。一方、家にいるとほとんど英語のヒアリング、スピーキングになりません。普段から、英語ヒヤリングを向上させたいと思っている人は多いと思います。そのための手段や教材は無数にあるようですが、手軽にヒアリングでき、楽しめるサイトを、今頃になって見つけました。 JapanTimes社のhttp://st.japantimes.co.jp/news/ です。その中で例えば、「ガソリン車」を、gasolineではなくpetrolと言っているところがあったりするので、(米国よりも)やや英国風かなとも思いますが、その特徴を列挙してみます。

  • スマホからも、インターネットに接続していればいつでも聞ける。
  • 国内、海外の多様なニュースが盛りだくさんで、内容が洗練されている。
  • 音声で40秒前後と、短いのがよく、繰り返して聞く気になる。
  • ネイティブの男女の声で、妥協しないノーマルスピードで厳しいのが良い。
  • テキストもあり、聞き慣れない単語にカーソルを当てると和訳がポップアップ。
  • 的確な(Google翻訳ではない!)全和訳テキストもある。 

 以下の画面は、「ノーベル文学賞のカズオイシグロ氏がナイトに」のニュースです。

英語ニュース(音声・テキスト)視聴 オリジナル版
http://st.japantimes.co.jp/news/ より引用

 素晴らしい!これで十分と思って、少し使っていくうちに、やはり自分用にカスタマイズしたくなる点が出てきました。どのソフトもそういうもの。結論として、以下の画面のようなアプリにカスタマイズしました。これで何がいいのかを示します。

英語ニュース(音声・テキスト)視聴 自作版 Version1

  • あくまで、ヒアリングが目的なので、最新ニュースでなくてもよい。
  • 気に入った10件のニュースをダウンロードして、繰り返し聞くことに特化。
  • ひとつが短いので、何度も繰り返して聞くためのループ再生スイッチを設定。
  • ネット接続が不要で、広告や関連情報がなく、スッキリ集中できる。
  • オリジナル版よりも操作が少なく、すぐに所望の音声、テキスト へ行ける。
  • ヒアリング訓練が十分済んだら、また別の10件を設定できる。追加も可能。

 このようなカスタマイズですが、思い付いたら直ぐに作れないとやる気がしません。それに応えるのが、App Inventorなのです。もちろん、今回もこれで楽に作れました。以下に、そのデザイン画面とブロック(処理部)の全体を示します。



 この図からは分かりにくいのですが、ダウンロードした音声とテキストは適当な場所(Android端末内)に格納するようになっています。その内容を交換できるので汎用的。
 その後、さらに、以下のことを追加/改訂してVersion2に:

  • プログラムは全く変更せずに、ニュースを幾らでも追加できるようにした。(.txt、.mp3ファイルとも、sdcardに置くことにした。)
  • テキストの文字(英文、和文)の表示の拡大縮小を可能にした。
  • 実際に内容を充実させるため、英語のニュースを50個とエッセイ10個を登録した。
  • それらを、ランダムに選択して聞く機能を設けた。
英語ニュース(音声・テキスト)視聴 自作版 Version2

2018年11月9日金曜日

類似語検索:秋田-こまち-ザギトワ

 単語の「類似度」は、曖昧さを残した用語ですが、人間が感じる(考える)類似度と、コンピュータが自然言語処理などで扱う類似度は、似て非なるものがあるようです。しかし、ここでは、後者、すなわち、コンピュータでの処理だけを扱います。

 類似語は、その元となる辞書の内容に依存します。ここでは、前回記事の続きとして、「朝日新聞単語ベクトル」を辞書とした類似語検索を行います。近年の単語ベクトル化の方式は、「単語の意味は、周囲に出現する単語によって形成される」という分布仮説に基づいていることに注意します。単語のベクトル空間においては、意味的に類似の単語は、その距離が近くなっているはずです。以下に、「秋田」など単語の類似語検索例をいくつか検討します。

【例1】「岡山」→「桃太郎」を連想の場合、「秋田」から連想される「桃太郎」の類似語は?
【例2】「こまち」から「秋田」を連想の場合、「桃太郎」から連想される「秋田」の類似語は?
【例3】「ザギトワ」から「秋田」を連想の場合、「桃太郎」から連想される「秋田」の類似語は?
【例4】「秋田」を念頭に置いた場合、「桃太郎」から連想される「秋田」の類似語は?
【例5】「秋田」を念頭に置いた場合、「秋田」から連想される類似語は?




 この2例から、朝日新聞単語ベクトル空間において、「こまち...秋田」の関係が、「桃太郎...岡山」の関係と良く類似していることが分かります。それは、例1と例2での単語ベクトル空間のイメージ図からも分かります。それでは、次に、例2での「こまち」を「ザキトワ」に置き換えた類似語探索を行ってみます。「ザギトワ」は、人気のフィギュアスケーターであり、秋田犬を贈呈された記事が多数存在するからです。


 例3でも、「ザギトワが秋田」ならば、「桃太郎は岡山」の関係は保たれています。しかし、検索結果の「岡山」の確からしさ(類似度)は、やや失われているように見えます。「秋田」と共に出現する頻度は、「こまち」の方が「ザギトワ」よりも高いように思われます。次の例4は、秋田に関連するこれらの用語を削除した場合の類似語検索です。



 この例4では、「秋田」は単に場所を示す単語として貢献しているようです。「桃太郎から連想される秋田の類似語」は、「山形」という結果です。たしかに、山形にも、桃太郎伝説は存在していて、いろいろな資料もありました。最後の例5は、「桃太郎」も削除してしまい、単に、「秋田」の類似語を検索した場合です。



 
「秋田」と言えば、「大館」という結果は納得できます。もちろん、他にもたくさん、連想できる単語があるはずですが、この朝日新聞単語ベクトル空間では、そうなっているということです。
 以上の5例から、断定的なことは言えませんが、場合によっては、強力な「意味検索」が可能であり、いろいろと応用の可能性を秘めていると思えます。しかし、実際に真に有用な応用に結びつけるには、まだかなりの検討、研究を要するようにも感じます。    

 

2018年11月4日日曜日

囲碁のプロ棋士の間にもAIが...

 小生は、AI(人工知能)の社会での応用をできるだけ見聞きして、できればその技術の内容にも踏み込もうとしています。これまでにも、画像認識・理解、計測器の波形の予測、自然言語処理などでのAIを学んで来ました。まだまだ先は長い気がしますが、新しい知見に触れることで飽きがきません。

 今回は、囲碁や将棋の世界におけるAIです。ちょっとした話題に過ぎませんが、簡単なレポートをここに書きます。プロの棋士たちも今やAI囲碁、AI将棋で練習して、自分の戦略の幅を広げているという話を聞いています。その一例にあたるかも知れないことが本日ありました。

 NHK Eテレで「第66回 NHK杯テレビ囲碁トーナメント」を見ていました。山田規三生九段と結城聡九段という強豪の対決でした。持ち時間が限られているため、テンポが速いのが、見ている私にはうれしいです。

NHK Eテレ(2018-11-4)より引用

さて、解説は、高段者の男性と女流棋士だったのですが、男性解説者が、途中で、「この手は、AI囲碁の手ですね。」と言った場面がありました。下図にあるとおり、結城九段が置いた(4の九)黒石です。私自身は、この場面での、この手の善し悪しはあまり理解できませんでしたが、AI囲碁の影響が、プロ棋士の間にも浸透しているらしいという現実を垣間見た気がして、貴重な瞬間でした。(もちろん、結城九段ご自身が、そう考えられた手なのかどうかは、全く不明であることを、ここでお断りしておきます。)

序盤の一場面

 ところで、この手がその後、効いたのでしょうか。中盤になった盤面は以下のとおりです。序盤に比べて、この石のまわりに関しては、解説者の説明のとおり、黒が善戦しているようにも見えます。はたして、上で述べた「AI囲碁によるかも知れない手」が効いているのでしょうか。

中盤の一場面

(注) テレビ画面の引用について
 上の3つの画像は、NHK Eテレ(2018-11-4の午後放送)の画面の一部を引用させていただいたものです。これは、「文化庁が掲げる引用の7つの要件」に合致すると考えられる範囲で利用させていただきました。

2018年11月3日土曜日

MATLAB EXPO 2018Japan参加レポート

開催日:2018-10-30(火)、開催場所:グランドニッコー東京 台場
 MathWorks Japanとしては、今年は10回目の開催。公式サイト:下記に概要があるが、参加者限定で講演スライド(各50枚程度)も開示された。
 http://www.matlabexpo.com/jp/index.html


展示会場、講演会場とも超満員!

 基調講演3件、一般講演28件(7並列)、ポスター11件、企業展示20社、MathWorks社14ブース、その他に、Lightning Talksなど。MathWorks社1社のイベントなのに、予想をはるかに超える参加者に圧倒された。AI技術とその応用への関心の高さと期待の大きさを改めて感じた。参加者数、内容の充実度等は、お台場の豪華ホテルでの開催に相応しいものであった。主にMATLAB/Simulinkを利用したAIのユーザの活用事例とMathWorks社からの解説的な講演。ユーザーの適用例では、MathWorks社のコンサルトを受けているか、共同開発しているものいくつかあった。当社は、AIに不慣れだが何とか活用したいという企業からのニーズに応えている。
 
 講演は企業が多かったが、大学の研究室の成果も発表できるだろう。ポスター11件のうち、9件は大学であった。AI応用関係に強い関心を持つ技術者等のこれだけの人の前での発表はインパクトがある。色々見聞きしたが、帰り際には、「統計学が最強の学問である」(著者:西内啓)が頭をよぎった。AIも結局のところ統計学に根ざしているのか。来年度は、同じこのホテルで、2019-5-28に開催される。Call for Presentationも配布された。

小生が最も感じ入った発表を2つほど示します。

●大林組技術研:ディープラーニングを活用した山岳トンネルの岩盤評価
 トンネル掘りに何種類かあるが、ここでは、岩盤が堅く、何種かの岩石が混在して掘削が難しい「山岳トンネル」を掘って行く過程での、岩盤の状況判断にAIを活用する試みが発表された。現場の作業員のこれまでの経験や勘だけに頼らず、地質専門家の判断と同程度のAI判断を使い、現場担当者の判断を支援したい。AIで全部置き換えるつもりではやっていない。現場で経験した切羽の画像はそれほど多くはないので、教師付きディープラーニングをスクラッチからやるのは難しい。そこで、やや古典的とはなっているがAlexNetを使い、そこで学習された実績(学習済みモデル)を使う。転移学習である。

 また、AlexNetは分類結果(切羽の5段階評価結果)まで出せるが、ここでは、主に分類判定の精度を高めるため、分類フェーズをAlexNetからカットして、従来からの機械学習で実績のあるSVM(サポートベクタマシン)で行った。試行結果は思いのほか良好だったので、驚いたとのこと。4評価項目で各五段階評価の結果を得た。例えば、「割目状態:5分類評価」では、89%の的中率を得た。今後はさらに、進行していく掘削の切羽の状況を時系列的に評価する手法も取り入れたい。(LSTMとは言わなかったが、そのような物を念頭に置いているのかも。)

 この試行結果から、実用化の方向へ向かう気にさせられた。しかし、Deep Learningでやっている中味が説明できないので、不安な面があるとのこと。各コンボリューションで本当に何を判断しているのかがもっと分かる手段を得たい。色はどうも見ていないようだ。そうではなく、模様らしい。などと述べていた。
 以上のような、土木の現場でもDeep Learningが適用されつつあることに、新鮮みを感じた。

●JAXA:3日でできるディープラーニング~宇宙機の自撮り画像評価~
 このポスターは注目された。Lightning Talksでも話された。ユーモアもあって、まさにLightning Talkにふさわしく、技術的にも高く評価できると思う。宇宙機が自撮りした画像を地球へ送ってくるわけだが、宇宙での通信量やエネルギーの制約から、極めて限られたデータしか送信できない状況がある。そんな時に、失敗した自撮り画像をたくさん送られてきても非常に困る。そこで、ディープラーニングで、あたかも人間がそこにいて判断したかのような、特選画像を送ってくるような状況にしたい。

 そのために、月と「はやぶさ」の模型を作って1万枚の自撮り画像(学習用画像)を試行的に作った様子が、Ligtning Talksでユーモアを織り交ぜて説明され、会場の笑いを誘った。しかし、きちんと、「3日で、MATLABを使って、Deep Learningで結果を出した」ことが高く評価されたようだ。私も、このポスターに1票投じた。(最優秀ポスターの投票が来場者により行われた。)


ユーモアを交えたLightning Talkの様子

2018年11月2日金曜日

巨大コーパスの類似単語ベクトルをみる

 [これよりも少し詳しい関連記事を追加しました。ここにあります。]

 自然言語処理には、巨大なコーパスが必要とされます。日本語では一例として、Wikipedia日本語版が使われています。さらに、この規模の約10倍にもなる超巨大コーパス(朝日新聞の直近34年間の主要記事)に出現する単語の単語ベクトルもあります。朝日新聞単語ベクトル」です。
このデータファイルの取得申請を行い、入手できました。それを今後利用するための準備として、以下に示すような類似語検索を試行しました。

 まず、単語ベクトルの意味と、単語ベクトル演算について簡単に示しました。詳細は、ここでは述べられませんが、「単語が他の単語の近くに出現する頻度に基づいて、単語をベクトル空間モデルに埋め込む」ということです。類似した単語は似たベクトルで表現されることになります。一般には、コーパスの語彙数に応じた巨大な次元数になりますが、主要な次元だけに圧縮した空間を使います。「朝日新聞単語ベクトル」では、Word2Vec(CBOWモデル)による300次元のベクトルになっています。



 以下に、上図(MATLAB Text Analytics Toolboxの解説書(英文))を参考に作成)のような仕組みを利用した、類似語検索の例(傑作16選)を示します。もちろん、適当な類似語が見つからない場合もありますが、ここでは、試用段階なので、うまく行った例だけを示して、今後の活用への意気込みを高めたいと思います。

 以下をほぼ満たす(単語A, B, Yはgiven)、単語Aの適切な類似語単語Xは?
 「単語A - 単語B = 単語X - 単語Y

No.2:室蘭工業大学に類似していて、北海道ではなく、神奈川にある...
No.4:バイコヌールに相当する米国のロケット発射場...
No.9:女子アイススケータのザギトワに秋田犬を贈呈しましたね...
(しかし、実は、"ザギトワ"でなくても、例えば、"メアリ"でも結果は同じでした!すなわち、過去34年間の新聞記事全体に占める、"ザギトワ"と"秋田"の関係性は、それほど強くなかった。秋田は単に「場所」という意味が効いているようである。単語ベクトルと言っても、数学のベクトルとは意味合いが違う側面がありますので、その解釈には注意した方がよさそうです。)
No.11:パガニーニと言えばバイオリン曲、ショパンと言えばピアノ...
No.12:ピアノ曲のショパンに相当するバイオリン曲の作曲家はパガニーニだけではない...

2018年10月28日日曜日

私には嬉しい「Javaで自然言語処理」

 機械学習全般に、そのソフトウェアの多くにはPythonが使われており、この分野ではそれが必須となっているようです。確かに、行列や数値計算やグラフ出力などで強力な機能を備えており、簡潔にプログラムを記述できます。ですから、私もPythonを使って学んだり、プログラムを書いたりしています。

 しかし、一方では、長年使ってきたJava言語の魅力は捨てがたいものがあります。そんななかで、小生が最近取り組んでいる「自然言語処理と機械学習」Javaで学ぶという書籍が発売になりました。内容はとても精緻に書かれている印象があります。当然ながら、広く使われているMeCab、CaboCha、LIBSVM、word2vecなどのツールやライブラリも、Pythonの場合と同じように、Javaと連携しています。私にとっては、とても嬉しい書籍なので、これも学びます。

私にはうれしい書籍が発売になった

2018年10月27日土曜日

自然言語処理をMATLABで楽しむ(その3)

 単語のベクトル表現により、単語間の加算や減算ができることを利用します。

 前回(その2)では、日本語Wikipediaの全文の全単語のベクトル表現化を行って、指定した特定の植物に最も類似する植物を見つけました。うまく行った例を5つ示しましたが、失敗の場合もあります。失敗のパタンはいくつかありますが、同音異義語もその一つです。

 同音異義による類似検索失敗の例を以下に示します。「サワラ」という植物に最も近い類似語として、魚の「オヒョウ」が出力されました!「サワラ」という魚がいるためです。

植物の「サワラ」の類似語検索の結果です。ウヒョゥ!困りました。


 ここで思い付いたのが、以下の類語検索例です。「男ではないが、王子のように振る舞う女の類義語」または「男で王子のような人は、女ではどんな人」を検索するには、以下のように、単語(ベクトル)間の加減算を使えばいい。

  most_similar(positive = [ '王子', '' ], negative = '' )
  →  (‘王女',  0.6557) good !

 これに習って、植物の(魚ではない)「サワラ」の類語検索をします。つまり、「魚のサワラのようなのは、植物ではどんなの」を探します。

  most_similar(positive = [ 'サワラ', '植物' ], negative = '' )
  →  (‘コナラ',  0.7683) good !「コナラ」は植物!

 この検索結果を、画像でも主観的に確かめてみます。以下のとおり、まずまずです。


2018年10月26日金曜日

自然言語処理をMATLABで楽しむ(その2)

 テキストで表現された植物の特徴事典から、類似植物を見つけられるか?

(最後の方に、「類似度」とは何かについて追加しました。)

 これをやってみたいと思います。ここでは事典として、植物に限らず、広く社会科学、工学、理学、医学等の膨大な用語を解説している「日本語Wikipedia」を用います。そのテキスト全文(公開されている)から全ての単語(名詞、動詞、形容詞など)を切り出し、それを多次元(ここでは次元削減後の100次元)ベクトル表現したものを用意します。それらベクトル間の類似度で、単語どうしの類似性を判断します。以上は、現代の自然言語処理の定番のやり方なのであります。

 日本語Wikipedia全文のテキストは、xml形式の圧縮版で2.75GBあります。その中の全単語をベクトル表現化したものは、どこかで公開されているかも知れませんが、今回は自分で全部作ることにしました。解凍、テキスト化、形態素解析を行い、分かち書きの結果をWord2Vecでベクトル表現化しました。それら全体に要したパソコン(Core i7, 3GHz)の処理経過時間は、実に約5時間でした!(その間は、コーヒータイム&クラシック音楽鑑賞なので問題なし。)

 その結果何ができるかと言いますと、例えば、テキストとして与えた、植物名「クヌギ」に対して最も類似度の高い言葉(恐らく植物名になる)を見つけられます。結構うまく行った類似検索結果を以下に5つ示します。
  • 「クヌギ」に最も類似するもの→「コナラ」(accuracy 0.90)
  • 「リンドウ」に最も類似するもの→「キキョウ」(accuracy 0.87)
  • 「ホタルブクロ」に最も類似するもの→「ムラサキケマン」(accuracy 0.88)
  • 「カラマツ」に最も類似するもの→「アカマツ」(accuracy 0.94)
  • 「サワグルミ」に最も類似するもの→「アカガシ」(accuracy 0.88)

 繰り返しになりますが、この類似度検索は、テキストで書かれた情報だけを使っています。画像などでの判断は全く行っていません。ですから、この類似度判定結果が妥当かどうかを、主観的に画像による形態比較で判断してみます。以下がその結果です。Very Goodではないでしょうか。

 これらの画像は、以下のURLにあるものを使わせていただきました。
 渡辺 坦 氏による「植物の名前を探しやすいデジタル植物写真集」
 



  まとめとして、日本語Wikipedia(このテキスト情報だけ)を使って、指定した植物名に最も類似すると思われる植物名を特定できました。もちろん、いつもうまく行くとは限りませんが、上記の5題の結果は、いくつかの可能性を示していると思います。

-------------------------------
 ここまで来たところで、「類似度」とは何かを確認したいと思います。上記と同じ、Wikipediaを使った「夏」と「休暇」の類似語検索結果は以下のようになりました。

  •  → (0.90)、(0.88)、(0.87)
  • 休暇 → 休養(0.69)、休み(0.69)、育休(0.67)

 これは、現代の自然言語処理(単語のベクトル表現化)で主流となっている「分布仮説」が使われているためと思われます。すなわち、「単語の意味は、その周囲に出現する単語によって形成される」ということです。ですから、例えば、「夏」と「冬」は全く違うじゃないかと思うかも知れませんが、両者は文章の中で共に近傍に出現するか、あるいは良く似た文脈に出現する確率が高いことを示しています。また同様に、「休暇」と「休養」が別々に出現する文章があった場合、それらの文章は同じような文脈で使われることが多い。すなわち、「休暇」と「休養」のまわりに出現する単語は似ている、と考えられるのです。
 上記の植物の説明文において、植物学上の分類や葉の形状や花の色、等々に関する多数の単語の出現具合が似ているかどうかで類似度が決まるはず。このような背景を踏まえて結果を眺める必要がありそうです。

2018年10月21日日曜日

自然言語処理をMATLABで楽しむ(その1)

(最後の方に、Word2Vec Word Embeddingを追加しました。)

 現代の自然言語処理は、機械学習(Deep Learningを含む)が重要な役割を担っているようです。しかし、この記事は、難しいことを言うのではなく、楽しんでみようというつもりで書きます。ここでは、MATLABを使います。というのも、その最新版(R2018b)のText Analytics Toolboxでは日本語対応の機械学習機能も提供されているからです。もとのテキストの前処理や、解析結果のビジュアル化なども含んでいます。
 何か実際のまとまった日本語のテキストデータを対象としたいですね。ここでは、以下のWebサイトを利用させていただきました。

植物の名前を探しやすい デジタル植物写真集(作成:渡辺 坦 氏)
http://plantidentifier.ec-net.jp

 植物の名前を探し出して、その説明を見つけるためのサイトです。「大まかな特徴から細かな特徴へと段階的に見て探す」、「花の色によって探す」、「葉の形状によって探す」等々などが提供されています。豊富な写真も掲載されています。また、「植物の名前で探す」のセクションには、約2,500の植物それぞれについて、その特徴が1行で簡潔に記述されています。葉の形状や花の色などを含めて、特徴が自由形式で書かれています。JsonやXmlなどのフォーマットではなく、まさに自然言語の様式なのです。具体的には、以下のような記述が約2,500行あります。
 
 ... 前省略
 ムキュウギク: ゲンペイコギク の別名
 ムギワラギク: 葉は被針形で、花茎先に盛り上がった総苞片が開く。
 ムクゲ: 先が3浅裂した葉が互生し、紅紫色の5弁花が咲く。
 ムクノキ: 葉は長楕円形で、丸い核果が黒紫色に熟す。
 ムクロジ: 偶数羽状複葉、花は黄緑色で、飴色の袋に黒い核がある。
 ムサシアブミ: 3出複葉が2枚あり、あぶみ状の仏炎苞が出る。
 ムシクサ: 葉は狭被針形で、葉腋に白い4弁花が単生し、蒴果がつく。
 ムシトリナデシコ: 葉は長卵形で花は薄紅色で萼筒が長く花下の茎が粘る。
 ムシトリビランジ: 根生葉は線形で、紅紫色で花筒の長い5弁花が咲き蒴果がつく。
 ムシヨケギク: 葉は羽状に細裂し、舌状花は白く筒状花は黄色い。
 ムスカリ: 葉は細長く、ブドウの房のように青く丸い花がぶら下がる。
 ムツオレグサ: 淡緑色の小穂のついた枝が花茎に密着し細長い花序となる。
 ムニンノボタン: 葉は長楕円形で3脈明瞭で、白い花が咲き丸い蒴果がつく。
 ムベ: 葉は革質の掌状複葉で、楕円形の液果は割れない。
 ムユウジュ: 羽状複葉の小葉は長楕円形で、赤橙色の花が散形状に咲く。
 ムラサキ: 根は暗紫色で太く葉は被針形で、花冠の5裂した白い花が咲く。
 ... 後省略


 MATLABのText Analytics Toolboxでこのテキスト全体を解析してみます。まず、単語の出現頻度解析です。原文を一定の前処理を行って整形したあと、形態素解析して単語を切り出し、単語をベクトル化し、と言う手順を含みます。その結果として得られたWord Cloudが以下の図です。この結果は、単語間の相互関係には関知せず、単に単語の出現頻度の高いものを大きく表示しただけです。しかし、これだけでも、このテキスト全体の概要をよく表していると思います。

2,500の植物の特徴記述における単語出現状況 - Word Cloud

上の左図からは、「花」や「葉」や「...状」を主題として書かれたテキストであることが分かります。また、右図には、左図に項目に関する色や大きさについての形容詞が示されています。これらの図だけでも、約2,500行の文書に対するある種の要約になっていると言えるのではないでしょうか。

 次に、もう一歩踏み込んで、この文書全体を解析します。トピックモデルというやつです。難しそうですが、LDA(Latent Dirichlet Allocation)という手法が、関数呼び出し一発で使えるようになっています。これは、文書のなかから自動的にトピックスを見つける(潜在的な意味を見つける)というものです。MATLABでは、"An LDA model discovers underlying topics in a collection of documents and infers word probabilities in topics"と書かれています。 さっそくやってみます。もちろん、トピックスのキーとなる単語などは全く指定していません。結果は以下の通りでした。(幾つかのパラメータにより変動します。)


LDAにより自動的に発見(抽出)された3つのトピックス

 先に示したWord Cloudで出現頻度の高かった「花」、「葉」、「...状」を中心としたトピックスが示され、それぞれを形成する単語の出現頻度(確率)が示されています。例えば、「花」と「葉」のトピックスはちょっと微妙ではありますが、花の色や葉の形状がおぼろげながら纏められているようです。また、「...状」のトピックでは、葉や枝の付き方などの状況がある程度示されているように思われます。応用としては、これらのトピックスにある値(特性を表す単語)を手がかりに、特定の植物の特徴を与えて検索することに繋がるかも知れません。

 さらに奥へ進んでみます。Word2VecによるWord Embeddingです。だんだん、混沌とした未知の領域に入って行く感がありますが、可能性は感じ取れます。下図のように、形態素解析後の有効な単語(word)をベクトル空間へ埋め込みます。この場合のベクトル空間の次元は、形態素解析後の語彙の数になり、単語のベクトル成分は、その単語の周りにくる他の単語の出現確率を反映しているはずです。埋め込み結果の一例を以下に示します。(拡大してご覧下さい。)


 100次元ベクトルを、t-SNEによる2次元scatteringでプロットした図なので、近くに見える単語のベクトルが必ずしも近い(良く似ている)とは言えませんが、それらのベクトルの成分(単語の出現確率)のいくつかは近いはずです。一例として、図の赤枠内にある、近くにある3つの単語に関して、その出現元の文を示します。

 マルバアオダモ: 奇数羽状複葉の小葉は卵形で鋸歯不明瞭、花は白く果実は披針形。
 ハマクサギ葉は広卵形で、花は白→淡黄と変わり、丸い核果が黒紫に熟す。
 ギンバイカ葉は卵形で芳香があり、長い雄しべが多数ある白い5弁花が咲く。

確かに、3つの植物の葉の形状(卵形)と花の色(白)に共通的な記述がありました!とりあえずGoodですね。
これら3者の写真(Wikipediaより引用)も確認します。主観的にも、上記の結果は納得できそうです!