2020年9月23日水曜日

指先に載るAIカメラ

念のため、末尾に(注1)(注2)(注3)を追記しました。)
→続編はこちらにあります。

  掌どころか指先に載ってしまう、この小さなカメラですが、AI(人工知能)のためのニューラルネットワークプロセッサ(CNNやFFTアクセラレータを含む)を搭載しているとのことですから驚きます。日経ソフトウェア最新号(2020年11月号)に紹介記事が出ています。M5StickVという製品ですが、注目度が高く品薄のようです。ようやく、秋葉原の店の通販で、3,500円で購入できました。

AIネットワークプロセッサ搭載の超小型カメラ(レンズは背面)

    初期状態で搭載されているのは、顔検出アプリです。人の顔の膨大なデータを使った学習は既に終了していて、その学習結果を使って、顔をリアルタイムに検出するものです。さっそく試してみました。首相官邸のホームページに、新内閣の閣僚が並んだ写真が載っています。検出結果の一例を以下の図に示します。管総理と麻生副総理のお顔が検出され白い枠線で囲まれています。ベリーグッド。見せますね。

管総理と麻生副総理(首相官邸ホームページの写真からの顔検出)

    これ以外にも、学習済みデータはいくつか用意されています。例えば、有名な手書き数字認識(MNIST)のための学習済データ(モデル)も提供されています。これを利用して、自分で紙に描いた数字をリアルタイムに認識させるには、[入力画像前処理]+[forward計算]+[表示処理]の合計で、マイクロPythonプログラム約25行だけ書けばよいのです。すなわち、学習過程のプログラムは書きませんが、認識するためのプログラムは高レベルで小さく作れますので、AIの初歩の勉強にもなります。こんなに小さな安価なデバイスで、それができるは素晴らしいと思います。

手書き数字「5」を認識した状態(confidence = 0.829)
    
 もうひとつ行ってみます。Brownie 1000というアプリも公開されています。何かものを撮影した場合、1000種のラベルのどれに該当するかを、音声で答えてくれます。以下の例では、犬のぬいぐるみを撮影したところ、日本語で、「いぬです」と返って来ました。なかなかです。

「犬です」と音声で応答(Brownie 1000による)

 以上のような既存のアプリや、提供されている学習済のデータ(モデル)では物足りなくなった場合は、ちゃんとそれに応えてくれます。例えば、自分で多種類のコインを多数持っていて、コインを識別させたいとします。その場合は、種類毎にコインの画像(各ラベル毎に35枚以上)を用意して、指定のwebサイトへ送れば、その学習結果を送り返してくれるサービスもやっています。上記の手書き数字の場合と同様に、返送されてくる学習結果を利用して認識(識別)用の短いプログラムを作れば良いのです。実用性はあまりないかと思いますが、AIの勉強にはとてもよいデバイスではないでしょうか。

(注1)ここで利用する学習済みモデルは、kmodelという形式です。しかし、Google ColabやAnacondaで別途学習させてできるモデル(h5 keras)をkmodelに変換するツールもあります。したがって、中級から上級の人にとっても、このデバイスは色々と使い道があるかもしれませんね。

(注2)ただし、このデバイス、まだ不安定な動作をする場合もあり、色々と調査して対処する必要が生じるかも知れません。実際、小生の経験では、最新のファームウェアに書き換えた場合、上記のいずれの例も不具合が起こるため、少し古いファームウェアにダウングレードしました。

(注3)残念ながら、通信機能(WiFiなど)は搭載されていません。他のデバイスと連結させて何とか通信できないこともないようですが、WiFi機能搭載のM5StickV+はすでに開発済とのことですから、その国内発売を期待したいと思います。

2020年9月15日火曜日

Voice Calculator: well-crafted AI tutorial

Japanese (Summary)
  MIT App Inventorの高校生向けAIチュートリアル6例目として、「Voice Calculator」が追加されました。これは、音声入力「3.14掛ける8はいくら?」や「では、12の3.5倍は?」等々に対して、計算結果を音声で答えます。初歩的とはいえ、自分なりのミニ「Siri」やミニ「OK Google!」もどきなので、受講生の興味を惹くのではと思います。実際にやってみると、"こんなに簡単に!?"と思うはずです。それは、第一にApp Inventor自体の優秀さ、第二に(皆様方の実験の準備などと同じく)適切な手引きが周到に準備されているからです。そして、このアプリは一つの雛形に過ぎないので、自分でいろいろと拡張・発展を考えるよう促しています。そこがひとつ重要なのだと思います。高校生向け講座や、大学低学年のAI導入の参考になるかも知れません。大人でも、スマホで楽しめます!この優れたチュートリアルに、私が補足すべきことはないのですが、この記事では、日本語版にする場合の留意点(文字単位の検査か、あるいは正規表現利用か)を中心に書きましたので、ご参考になれば幸いです。

Creating your very first own voice calculator

    This time, a new tutorial Voice Calculator [1], mainly for high school students, has been added to the "Artificial Intelligence with MIT App Inventor" [2]. It executes basic arithmetic operations given by voice. Although it is a rudimentary application, it is a challenging task because commands are given in natural language. For example, for multiplication, various utterances as shown in Fig. 1 is allowed. Addressing these challenges will help us to understand how Alexa and Siri, which are commonly used on smartphones, understand human speech, and respond appropriately.


Fig.1 Acceptable utterance examples for multiplication

    This project makes use of speech recognition and text processing blocks built into App Inventor. And, the calculation result is responded with a synthetic voice. The explanation of the creation procedure is meticulously assembled and easy to understand. You will be given appropriate hints along the way, so you will be able to complete an app like Fig. 2 without frustration.

Fig.2 Voice Calculator made with MIT App Inventor


    I don't need to add anything to this excellent tutorial. However, there are some things to consider when creating this project in Japanese, so I will show it below.

Extracting numerical values from the uttered text

(1) Splitting at spaces
    Fig. 3 shows an example in which the utterance related to multiplication is converted into text by voice recognition. Note that in the English version numbers are separated by spaces, but in the Japanese version there are no such spaces. In the English version, you can extract numerical values (two in this case) by paying attention to space and using App Inventor's text processing "split at spaces" and "is number?" as shown in Fig.4. However, this method cannot be applied to the Japanese version because there is no such white space. 

Fig.3 Resulting text from speech recognition 


Fig.4 Extracting numbers by splitting at spaces

(2) Character by character inspection in the Japanese version
    In the Japanese version, an alternative method is required such as shown in Fig.5. Here, you need to scan the text character by character to see if it's a number or a period. This seems somewhat complicated but will be useful for beginners to practice string manipulation.

Fig.5 Extracting numbers by examining each character

(3) Using Regular Expressions
    Alternatively, you can use a regular expression search. For real numbers, give the regular expression pattern "[\d.]+" or "[0-9.]+". The simplest way is to use regular expression extension such as [3]. Fig. 6 shows an example of its use.

Fig.6 Extracting numbers using a regular expression extension

    You can also write a short JavaScript program as another way to use regular expressions. Fig.7  illustrates it. A good tutorial on calling JavaScript programs from MIT App Inventor can be found in reference [4].

Fig.7 Extracting numbers with regular expressions in JavaScript

    By the way, recently, the format of the file path given to the WebViewer URL has changed. That is, as shown in Fig.7, specify "http://localhost/..." as the file path for both debug execution and production execution. Please see Evan's posts [5][6] and related post [7] for more details.

Notice

    It has also been shown that recently developed new Text Blocks can be used effectively. For example, as shown in Fig. 8, not only "contains" but also "contains any" and "contains all" are very useful when determining whether the utterance is intended for multiplication.

Fig.8 An example of newly developed Text Block


References

[1] Voice Calculator
http://appinventor.mit.edu/explore/resources/ai/voice-calculator

[2] Artificial Intelligence with MIT App Inventor
http://appinventor.mit.edu/explore/ai-with-mit-app-inventor

[3] Regular expression extension (by kevinkun)
https://community.thunkable.com/t/regular-expression-extension/3657

[4] WebView Javascript Processor for App Inventor
https://appinventor.mit.edu/explore/ai2/webview-javascript

[5] App Inventor nb185 is live
https://community.appinventor.mit.edu/t/app-inventor-nb185-is-live/15563

[6] File Path Updates Starting with Android 10, Aug 8, 2020 evan's Blog
http://appinventor.mit.edu/blogs/evan/2020/08/08/file-path-updates-android-10

[7] How to call a simple Javascript function
https://community.appinventor.mit.edu/t/how-to-call-a-simple-javascript-function/15698




2020年9月10日木曜日

50年を越えて復刻されたある数学入門書

 人は、年をとるにつれて、感傷的に青春時代を思い起こすことがあります。今回の記事もそのような類いですが、それでもかなり抑制気味に書いていますのでご容赦下さい!?

    大学入学後間もなく、夢中になって読んだ(勉強した)数学書のひとつに「赤攝也著:集合論入門、培風館刊」があります。180ページほどの小冊子ではありますが、はしがきに「本書は、現代の数学的標準にてらしても、ほとんど杜撰な点を含まないものとなったと信じている」と書かれていたことに心が惹かれました。確かに、一歩一歩丁寧に精緻な叙述になっていますが、最後の方はかなり難解になっていました。すなわち、「整数と実数の濃度は異なる」ことに関する理論を経て、最後は、圧巻の「整列可能定理」と「ツォルンの補題(付録)」で終わっています。小生の手元にある本書には、「1967年8月31日読了」とメモ書きが残っていました。実に、今から53年前のことです!

    なぜ、今回この記事を書いたのかと言いますと、最近になってこの書が「文庫本」として復刻されているのを偶然知ったからです。普通のポピュラーな文庫本ではありません。「ちくま学芸文庫」という、筑摩書房による学術部門文庫判レーベルの一つです。これは名著の証ですね。さらに驚いたことに、著者の赤攝也先生ご自身が、「文庫化に際して」という文章を巻頭に寄せておられることです。すなわち、原本(培風館)の初版は1957年で、文庫本は2014年出版ですから、57年も経過しているのです。素晴らしいことだと思います。

    この50年を越える時の流れを振り返り、以下に新旧の本の写真を載せたいと思います。

(赤攝也先生は、他にも多数の数学の名著を書かれており、そのいくつかは同様にこの文庫で復刻されています。誠に残念ながら、先生は、昨年(2019年)お亡くなりになっていたことが分かりました。ご冥福をお祈り致します。)

赤攝也先生著「集合論入門」ちくま学芸文庫(2014)、培風館(1957)
初版本の中味(|V. 整列可能定理のところ)

現代の技術書と共に置かれた50年以上前の数学入門書(復刻版)


2020年9月8日火曜日

国立国語研究所「言語資源活用ワークショップ2020」(その2)

この記事は、前回記事の続きです。
国立国語研究所「言語資源活用ワークショップ2020」(その1)

以下は、ここでの小生のポスターWeb発表に対する質疑応答を記録したものです。(ご討論戴いた方のお名前は匿名化させていただきました。)デフォルトでは、SLACKのチャット機能を利用した討論形式です。希望者は、自分でzoomの部屋を立ち上げればリアルタイム映像で討論可能ですが、小生はSLACKだけにしました。ご参加戴いた方々、特にご討論戴いた方々に感謝申し上げます。

■ポスター発表 質疑応答状況(2020-9-8  15:00-15:50)
■本ポスターセッションの発表数 = 10件、セッションログイン数 = 318名
----------------------------------------------------------------
P2-5 植物に関する自由形式説明文からのJSON形式テキストの自動生成
発表者:山本 富士男(神奈川工科大)
----------------------------------------------------------------

■Fujio Yamamoto  2:31 PM
こんにちは、みなさま
ご質問ご意見等ございましたら、よろしくお願い致します。

■AAA氏  3:03 PM
京大のAAAと申します.興味深く拝見しました.こちらの JSON のタグとして type, what, how を設定されていますが,この value に入るものが重複しているのが気になりました.このサンプルではナツメの leaf の how は “楕円形で” となっておりますが,fruit の what にも “楕円形の” と類似した表現が生起していますが,これは設計通りのものなのでしょうか?

■Fujio Yamamoto  3:08 PM
気にしていた点をご質問いただき、ありがとうございます。確かに、現在のバージョンでは、例えば、花の色に関しては、「白い花」ならば、白はwhatに入りますが、「白く咲く」だとhowに入ってしまいます。そうすると、「白い花」の検索を、howとwhatの両方見る必要があり、不便です。改善を考えています。 

■BBB氏  3:24 PM
国語研のBBBです。今回、対象を植物とされたのは、どのような理由によるのでしょうか。例えば植物は動物にくらべると処理しやすいというようなことがあるのでしょうか。

■Fujio Yamamoto  3:29 PM
ご指摘ありがとうございます。今回、動物ではなく植物にしたという特別な理由はありません。きっかけは、予稿集の参考文献に挙げてあります、「デジタル植物写真集」の自由形式記述から、植物の特性を指定した柔軟な検索を行いたい、ということから始まりました。一定の検討は必要と思いますが、動物や観光地などの検索にも適用できるかも知れません。 

■BBB氏   3:31 PM
ありがとうございました。高い精度で自動抽出が可能になれば、大変有益だろうと思いました。

■Fujio Yamamoto 3:34 PM
重ねてありがとうございます。
今回は、type、what、howという大まかな特性の抽出に留まっています。それはそれで有利な面もありますが、特性の分解能をもう少し高くして、精密化を図れないか検討したいと思います。

==================================
感想:
この分野(コーパス言語学や言語資源研究)では全くの素人である小生ですが、情報系との接点である「自然言語処理」の応用という観点から参加させていただきました。初めてのWEB開催ということで、主催者側の準備も大変だったと思いますが、良い雰囲気で参加者と発表者の交流ができたと思います。来年は、恐らく世の中も落ち着いて、国語研究所現地での開催となることを期待し、小生もそれまでに少しでも新たな進展を達成して、また発表に望みたいと考えます。

クロージングでの、主催者側のまとめによりますと、下図のとおり、37件の発表の多くは言語学・日本語学に属するものでした。小生の発表は6件ある自然言語処理のひとつになっているはずです。恐らく、今後、自然言語処理も増加する方向ではないかと思います。

2020年9月7日月曜日

誰もが実感できる自然言語処理の発展

 趣味で、Googleアシスタント(OK Google!)を利用しています。自然言語処理の応用は、自動翻訳だけではないようです。今回は、植物の特性や台風情報等を音声で与えて、所望の情報が得られるかどうか確認してみます。

【音声による検索】
     
漏斗状の赤紫の花を咲かせる植物
     葉脈が明瞭な植物
     虎柄の長い葉を持つ植物
     葉は掌状で果実は楕円形
     去年の台風で920hPa以下に発達したものはありますか
     それでは3.14かける8の答えは

 結論から言いますと、上記の最初の4例(植物)に対する結果は、いずれも、かなり優秀だと思います。Googleのやり方は、よく分かりませんが、最近雑誌などでも解説が増えているBERTという仕組みのもとで、実用的な自然言語処理がなされているのだと思います。



 利用した感触としては、出力結果はあくまで「候補」、ということのようです。ですから、例えば、「赤い4枚の花弁を持つ植物」と与えても、4枚に限らず、5枚や3枚の花弁のものも候補に挙がる場合があります。恐らく、この場合は、花弁の枚数よりも「赤い」が優先されるのだと思います。それはそれで、我々の感性に合致しているように思います。

 また、残りの2つの音声検索からも分かるように、人間がしゃべったことを正確に理解しているのではなく、いわば「拾い読み(赤字の部分のみを)」して、候補らしい回答を出力しているようです。的確な拾い読みができるとすれば、それは素晴らしい能力です。最終的には人間が判断するのですが、そのための有力な情報を与えるということでよろしいとおもいます。


2020年9月3日木曜日

Supporting social dilemma experiments with App Inventor

Abstract
    In the study of the problem called "social dilemma", various experiments targeting human behavior have been conducted. I created the following app to efficiently implement one of those kinds of experiments. The feature of this app is that it can automatically reflect in real-time the effects of individual actions on others.

Simple examples of social dilemmas and experiments
    According to Toshio Yamagishi (Professor Emeritus, Hokkaido University, Japan) [1], the social dilemma means that everyone can benefit if they cooperate with each other, but everyone suffers if they act only in their own interests. Research (consideration and experiment) about this has been done for a long time. Here we try to reproduce the famous experiment in this book. However, the following is an explanation based on my own understanding.

A) A group consists of four students who are strangers to each other.

B) Do not touch each other during the experiment.

C) Participants fully understand the mechanics of this experiment.

D) 100 yen will be given to each student in each round.

E) Participants can donate d yen arbitrarily.

F) In that case, the donor's money will be (100 - d) yen.

G) Based on the donated d yen, (2d / 3) yen will be given to each of the 3 people other than the donor.

    The experiment was repeated 12 times with the above items (D) to (G) as one set. The part-time job for this experiment was about 1 hour. In fact, the participants took it seriously because they could get that amount of money. In a round, if only one student donates 100 yen and no other students donate, the donating student gets 0 yen and the other student gets 167 yen. That is, only the donated student will lose. If no one donates at all 12 times, each person will get 1,200 yen. On the other hand, if everyone cooperates and donates 100 yen in all rounds, each person can finally get a total of 2,400 yen (this is the maximum amount). This is a very expensive hourly wage!

    It turned out that each person's donation behavior depends on the "interpersonal trustworthiness" that a person has. That is, it was confirmed that one's donation behavior is determined by "whether or not other people can be expected to contribute." Participants in this experiment include people with high confidence and those with low confidence. (This reliability depends on the response scores of the five questionnaires conducted separately.)

    According to the experimental results by Professor Yamagishi, for the 100 yen given in each round, those with high interpersonal reliability donated 55 yen on average, and those with low interpersonal trust donated 33 yen on average. This result seems convincing. In many cases, it seems that there is an awareness that "I don't know how much other people will donate, so I want to keep my donation at this level".

Smartphone app for a social dilemma experiment
    The calculation of the amount of money in the above social dilemma problem is easy, but it is convenient to have an app to proceed with the experiment smoothly. Reference [1] states that a PC was used, but the details are unknown. Here, we have created an app to perform this experiment using smartphones. Finally, I made a smartphone app with a design like Fig.1. This will be installed on the participant's smartphone. Data exchange between users is fully automated as described below. We thought that it would be desirable for each person to use a smartphone in order to proceed with the experiment without touching each other.

 

Fig.1 A support tool for social dilemma experiments

    An example of running this app with 4 students (4 smartphones) is shown below. Fig.2 shows the beginning of the first round, and each student decides how much to donate. Fig.3 is the execution result of the first round, reflecting those donations. 

Fig.2 Beginning of the first round (determining the donation amount)

Fig.3 Results of the first round (reflecting the distribution of donations)

Use of CloudDB (real-time database)
    The feature of this smartphone app is that each person's donation can be immediately reflected in other people's income without explicit communication or administrator intervention, as shown in Fig.3. That was easily accomplished by using CloudDB (real-time DB) built into MIT App Inventor. The main part is only the following figures. Fig.4 stores the donation amount in CloudDB together with the donor ID. When the donation is stored, the block of Fig.5 of the application of each smartphone is automatically called in real-time. Then, the distribution amount is calculated from the donation amount and added. In this way, the program has become very simple thanks to the real-time database.

 

Fig4. Blocks for registering donations to CloudDB

Fig.5 Blocks automatically called when registering donation to CloudDB

Notice
    By default, anyone can use CloudDB immediately with a common id and token. However, you cannot guarantee how long your data will live. Therefore, you can apply for your own id and token. Although the capacity of the free tier is small, it is stable and useful if you use it.

References
[1] Toshio Yamagishi : Social Dilemma ,PHP Laboratory, July 2000. (in Japanese)


2020年9月2日水曜日

国立国語研究所「言語資源活用ワークショップ2020」(その1)

 【要旨】国立国語研究所 コーパス開発センター主催の「言語資源活用ワークショップ2020」が、9月8日と9日に開催されます。ただし、新型コロナウィルス感染予防の観点からWeb開催です。情報系の研究者や技術者にとっては、少し分野が違いますが、ご参考までに(小生の理解の範囲で)概要を書きます。→続編はこちらにあります。

ワークショップの趣旨
 本研究所は、日本語の全貌を把握するために様々な観点から研究開発を行っています。多様で大規模な言語コーパスの開発もその一貫です。今回は、そのようなコーパス言語学および言語資源研究の開かれた研究交流の場を提供するとのことで、一般からも関連の研究成果を募集しました。
https://pj.ninjal.ac.jp/corpus_center/lrw2020.html

ワークショップの概要
 2日間で、シングルセッション(4セッション)で合計37件のポスター発表だけというゆったりしたスケジュールです。第1セッション(6件)は学生発表、残りは一般研究者です。もちろん「自然言語処理」に特化した研究ばかりではありませんが、この分野でも機械学習は重要な手段になりつつあるようです。実際、いくつかの発表タイトルには、このことを示唆する以下のようなキーワードが含まれています。

    単語N-gramを用いた分析
    JSON形式テキストの自動生成
    実践医療用語を構成する語の意味分布
    BERTによる単語埋め込み表現の分散値
    教師データを必要としない感情分析
    BERT の Masked Language Model
    語義曖昧性解消
    日本語学術文技術文長単位解析
    『分類語彙表』の質的拡張

ワークショップの運営
    当初は、OSFのMeetings機能を使う予定でしたが、何らかの都合で、SLACKの掲示版(チャット形式)でポスター発表することになりました。ただし、発表者は、自分で開設したZOOMの部屋を用意すればそこでリアルタイムビデオ会話もできます。SLACKには要旨とポスター配置し、参加者とディスカッションします。質問したい人は、SLACKへログインする必要があります。(以下に小生のポスター例を示します。)


    しかしながら、いきなりポスターを見ただけでは質問もしづらいので、すでに予稿集(10ページ程度のフルペーパー)が公開されていますので、それを読んでから質問することになるでしょう。以下にプログラムと予稿があります。
(小生も12ページの予稿を書きました。セッション2のP2-5です。)

予稿原稿の情報系一般との違い
    予稿原稿の形式ですが、情報系の一般的な論文形式と異なる点がありましたので、それを簡単に示します。
  • 情報系では、一般にダブルカラムだが、ここではシングルカラム
  • 参考文献に文献番号を記さない(これにはちょっと戸惑いました!)
  • 予稿原稿の枚数は、4枚以上で制限なし(多くの人は、10枚前後のようです)