スティックコンピュータにミニディスプレイをつけた

ミニディスプレイをつけた。解像度は、高くても対応できるのだけれど字が小さくて見えなくなるので、800X600にしている。キーボードとマウスは、その両者ついているbluetoothのミニパッドがつながる。

あとは、sshを有効にして、パソコンからコントールできる。

Intelのスティックコンピュータを購入した: BOXSTCK1A8LFC

ネタの会場に、ロボット二台と、パソコンも運ぶというのがとても面倒だ。サリーとハルのときは、ハルにネタデータの作成機能が入っていたので、ロボット二台のことだけを考えればよかったが、サリーとマリーになってから、ネタ作りコンピュータを会場まで持ち込まなくてはならなくなった。とても面倒。

そこで、もっとシンプルなコンピュータはないかと探すと、スティック型コンピュータというのが安く手に入る。次のような代物を購入した。


インテルの「Intel Compute Stick スティック型コンピューター LinuxUBUNTU搭載モデル BOXSTCK1A8LFC」という名前で、アマゾンで売っているもので、7000円弱の値段だった。まあ、試してみようという意味もある。

もう少し値段が高くて性能のいいスティックコンピュータもあるが、ウィンドウズが入っているので、linuxに入れ替えなければならなくなる。購入したものは、ubuntu-14.04だいぶ古いが、linuxなので、入れ替えが不可欠というわけではないので、これにした。(というか、ネットワークに繋ぐと、400数十メガバイトのアップデートがあるというメッセージが出てくるが、何気にやってみたら、途中でフリーズして、工場出荷時に戻さなくてはならなくなった、笑)

なお、工場出荷時に戻すためには、説明文にもなかったが、電源切った状態で、電源ボタンを押したままで電源コンセントをつないで通電する。しばらくでubuntuの初期化用のページが表示される。

ちょっと動かしてみると、CPUはそれほど悪くはない。印象としては、raspberrypi よりも少しいい感じがする。微妙だが。ただ、ストレージが、ubuntuの工場出荷時のものをストレージの一部に保存していて、いつでも戻せるようになっているぶん、実際のシステムとして使えるのは、10Gもないような感じで、そのままでは使い物にならない。

メインメモリも1Gでは弱い。

マイクロSDカードがさせるので、それを使うことにした。64ギガのものを用意した。昔の癖みたいなもので、fdiskでパーティションを設定して、と思っていたら、partedを使えと言われてしまった。使ったことがないが、使うと、結構便利だった。まあ、それで、全体を一つのパーティションにした。

ここを /altでマウントしてとか思っていたのだが、何しろ、システムの余裕が殊の外なく。ちょっとしたアプリを入れても、容量がなくなり、システムダウンになってしまう。そのほかも含めて、トライアルエラーで、5,6回は、工場出荷時に戻した。その度に1時間以上時間をロスしている。

そこで、こんなことは今までやったことはないのだが、一番システム的に容量を取っている /usrをmicroSDに載せるしかないと思った。/usrを64Gにおけば、まあ、だいぶ余裕が出てくる。ただ、手続きが面倒だ。

まず、/usrにあるものを全部、 cp -rpfa /usr/* /alt でsdに移した。これで、完コピになっているかといえば、多分なっていないんじゃないかと思うが、まあ、他にやり方がわからないのでそうした。

さらにマウントテーブル /etc/fstab に partedで作成したパーティションを/usrにマウントする手続きを記載しなければならない。以下の通りだ。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#              
# / was on /dev/mmcblk0p3 during installation
UUID=a5973b07-3927-4d2c-8e88-da8c9f63f97d /               ext4    errors=remount-ro 0       0
# /boot/efi was on /dev/mmcblk0p1 during installation
UUID=59AE-C1C8  /boot/efi       vfat    defaults        0       1
# swap was on /dev/mmcblk0p4 during installation
UUID=b6e64128-dd57-461e-9904-43ac60967745 none            swap    sw              0       0
UUID=fb8aede3-36bd-4659-abb7-b7f8f03c7148 /usr ext4 defaults 0 0

最後の行が、付け加えたものだ。UUIDは、パーディションの固有IDだが、取得は次のようにする。/dev/mmcblk1p1と記載されているものは、今回作成したパーディションである。デバイスmmcblk1の第一パーティションの意味。

$ sudo blkid /dev/mmcblk1p1
/dev/mmcblk1p1: UUID="fb8aede3-36bd-4659-abb7-b7f8f03c7148" TYPE="ext4"

あっさり、現在の /usrは削除した。どうせ、何度も何度も工場出荷時に戻しているので、うまくいかなければまたそうすればいい。という、いい加減さ。

これで再起動したら、うまいこと/usrは、microSDにマウントされていた。現時点でのファイルシステムの使用状況は次のようになっている。/usrには、emacsやnetbeans、mariadbなど、apt-get install で重たいアプリをインストールしたが全然余裕である。

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/mmcblk0p3   4954848 1992248   2687864  43% /
none                   4       0         4   0% /sys/fs/cgroup
udev              448532       8    448524   1% /dev
tmpfs              92712     732     91980   1% /run
none                5120       0      5120   0% /run/lock
none              463540      76    463464   1% /run/shm
none              102400      32    102368   1% /run/user
/dev/mmcblk0p1     48698    4546     44152  10% /boot/efi
/dev/mmcblk1p1  61256732 4974448  53147564   9% /usr

最後の行に、/usrの 使用状況が記載されている。圧倒的なストレージの余裕感がある。邪道だが /usrの下に、私が所有者になっているフォルダーも用意して、ストレージを使うようなファイルはそこに置いている。

ストレージは以上だが、アプリでも手間取った。何よりも、javaを入れなければならないのだが、まあ、netbeansを入れることによって全てクリアしようとしたが、これがなかなか入らない。まあ、java開発環境が有料化するという大きな変わり目ということもある。いや、関係ないか。古いjdkでもいいのだ。sudo apt-get install netbeansとしてもさっぱりうまくは入らない。(本来は、jdkそのものじゃなくて、実行環境のjreだけでいいのだが、もしものためにnetbeansも入れたという感じ)

jdkとnetbeansをそれぞれのダウンロードサイトから入れようとしたのだが、理由がわからないままにうまくいかない。結局、以下のサイトを参考にして、ほぼうまくいった。
https://websiteforstudents.com/how-to-install-netbeans-on-ubuntu-16-04-17-10-18-04/

ubuntuのバージョンが上記サイトが想定しているものより、一段も二段も古いのだが、ほぼ、そんな感じでインストールできた。

ぞれでも、エラーが発生したのは、netbeansの起動時にjdkのフォルダが見つからないことだった。そこで、

/usr/local/netbeans-8.2/bin/netbeans --jdkhome /usr/lib/jvm/java-8-oracle/

と--jdkhome を指定してやれば、全てうまくいった。これは、環境変数JAVA_HOMEを指定すればいいはずなのだが、なぜかうまくいかないので、これを書いたシェルスクリプトで起動させることにした。素人か!(笑)

あと、mariadbも入れて、ただ、データのフォルダが/var/lib/mysqlになっているので、それを/usr配下に変更する必要があった。これは、/etc/mysql/my.cnfの

datadir        = /var/lib/mysql

を変更し、そこに cp -rfp で元データを丸ごとコピーするだけで済んだ。他のところは、特に容量を取らないのでそのままにした。というよりも、socketの位置などを変えたら、なんだかおかしくなった。私の場合は必要ない。

(追記:実際使ってわかったことで、1ギガとかでっかいデータを入れると、ログもまたとてつもなくでかくなるので、/var/lib/mysql 以下のログフォルダも、新しいmicroSDの場所に移さなくてはならなかった!my.cnfの該当箇所を変更。そうしないとrootパーティションを使い切って動きが取れなくなる)

mariadbのインストールは以下のサイトを参考させてもらった。
https://qiita.com/cherubim1111/items/61cbc72673712431d06e

私のubuntuは14.04で上記のは、18.04で相当違うのだが、ほぼ、その通りにできた。

NAOのUSBをストレージとして使う

NAO2台で、即興漫才はできるようになったが、HALと違って、NAOはCPUもストレージもパワーと容量がない。現在は、ノートパソコン(MAC)を持ち込んで、即興のネタ作りはそれにやらせる形になっているが、ロボットを3台扱うような面倒くささがある。

そこで、CPUパワーはどうしようもないが、NAOのストレージを頭にさせるUSBにできないかと思っている。頭にUSBをさせば醜いが、なるべく短くして、リボンでも飾れば、なんとかなるのではないかと思う。

今、NAOを今日のオーディション用にパッキングしてしまっているので、試せないが、
https://medium.com/@heatherkemp_89938/interfacing-nao-robots-with-the-arduino-in-depth-tutorial-284ecba0b0aa
に手続きが書いてある。全体が面白い記事だが、USBマウントのところだけメモしておく。

(1)NAOにrootユーザーとしてログインしておく。
(2)USBをマウントするフォルダを作っておく(フォルダ名は任意)

# mkdir /mnt/usb

(3)ブロックIDを確認する

# blkid /dev/sdb*
/dev/sdb1: UUID=”04D9–7E06" TYPE=”vfat”

(4)フォルダをマウントする

# mount /dev/sdb1 /mnt/usb

以上である。まだ試していない。

Macのmariadbが動かなくなって

デスクトップMacのmariadbが

Can't read dir of '/usr/local/etc/my.cnf.d'

というエラーを吐いて動かなくなった。確かにそんなフォルダはない。え〜、突然!と思ったが、その前にtelnetをインストールするのにbrewをいじっていた。多分、

$ brew prune

コマンドなんかをやったからのように思うが、よくわからない。結局,

$ brew install mariadb

とやっても、すでに入っていますよと言われ、

$ brew update mariadb

で、バージョンアップしたら、治ってくれた。バージョンが最新だったらどうなったんだろうと思う。

ディープラーニングによる日本語の助詞の選択(2)

先に助詞の使い方を学ばせたAI(ディープラーニングさせたニューラルネットワークというのが長いので、単にこう言うことにする)に与えられたフレーズの中の一つの助詞を選択させた。その一部を下に示している。助詞そのものは、160フレーズくらい取り上げているが、実際には、データの少ない、稀にしか使われない助詞は、AIはほとんど選択しない。

4語のフレーズである。[ ]で表しているのが、実際に使われていた助詞。その次の ( )の中に、AIが推定した助詞と、そのスコアが示している。上位3位までが記載している。結構外しているが、言葉として悪いとまでは言えない。

外国人が日本語を話すとき、違和感のある助詞を使うことが結構あり、それが外国人らしいわけだが、そう言う違和感が少ない方がいい。

まあ、このシステムも使えるのではないかと思っている。100万フレーズで学習させたが、データは、1000万以上あるので、それを使えば、もう少し改善するかもしれないが、何しろ学習時間がかかる。

No.10 ソ連 [ の ] (は:0.3630, が:0.1074, と:0.0657)イスラエル の
No.11 部門 [ は ] (は:0.4477, も:0.0971, が:0.0948)これ に
No.12 伊能 [ の ] (の:0.9223, が:0.0109, と:0.0103)収益 は
No.13 旭天鵬 [ において ] (の:0.5412, が:0.1425, は:0.1016)断髪式 で
No.14 配置 [ は ] (は:0.2043, の:0.1557, が:0.0794)M16 と
No.15 全国野球振興会 [ を ] (を:0.7053, で:0.0437, が:0.0365)務め て
No.16 系統 [ が ] (の:0.5002, は:0.1054, と:0.0645)ナビ の
No.17 上 [ で ] (の:0.2693, で:0.1684, や:0.0647)電波 の
No.18 1954年 [ に ] (に:0.3260, は:0.1242, の:0.0659)パリ国立高等音楽院 に
No.19 右派 [ の ] (の:0.8765, や:0.1142, による:0.0180)政治家 など
No.20 冬期 [ と ] (と:0.4136, は:0.1240, に:0.0923)なる が
No.21 これら [ の ] (の:0.9499, は:0.0109, という:0.0054)培養皮膚 は
No.22 標準 [ の ] (の:0.7044, は:0.0623, で:0.0341)圧縮比 が
No.23 仁王 [ は ] (の:0.2422, は:0.2047, が:0.0913)運慶 の
No.24 愛知県がんセンター [ の ] (の:0.7821, を:0.1101, が:0.0507)研究所 に
No.25 ジェーン [ は ] (の:0.5065, と:0.1337, は:0.1181)アルティメッツ の
No.26 偽名 [ として ] (を:0.8573, で:0.0346, も:0.0249)使っ て
No.27 旅客 [ は ] (の:0.2721, は:0.2641, が:0.0778)大都市近郊区間 を
No.28 幕府 [ は ] (の:0.1775, は:0.1584, が:0.1229)金 の
No.29 恩師 [ の ] (の:0.8917, を:0.0346, が:0.0148)薦め で
No.30 男女共同参画社会基本法 [ の ] (の:0.9504, は:0.0108, による:0.0105)規定 による
データスキップ = 信用格付業者::は::証券取引等監視委員会::が
No.31 139 [ の ] (は:0.3732, の:0.1103, で:0.0970)アメリカ人 の
No.32 段ボール箱 [ の ] (の:0.8884, や:0.0135, を:0.0119)応用 で
No.33 高 [ で ] (の:0.8250, で:0.0346, は:0.0272)火入れ が
No.34 山下敬吾 [ に ] (の:0.5780, と:0.0956, は:0.0678)1敗 の
No.35 大半 [ は ] (の:0.5944, は:0.1356, に:0.0576)ミヤコーバス が
No.36 アリーナ [ は ] (の:0.3456, は:0.1212, と:0.0864)パフォーミング・アーツ・センター が
No.37 料金 [ は ] (は:0.3200, が:0.1131, の:0.1130)30万円 と
No.38 龍造寺隆信 [ の ] (の:0.9836, による:0.0049, も:0.0040)死後 は
No.39 違法 [ の ] (の:0.6740, を:0.0612, が:0.0483)経営 に
No.40 観光道路 [ の ] (の:0.8684, という:0.0395, や:0.0193)性格 も
No.41 ala [ が ] (は:0.2413, の:0.1734, が:0.1581)最大 の
No.42 ストレイト [ を ] (は:0.6187, の:0.0653, を:0.0452)標的艦 と
No.43 夫 [ の ] (は:0.4473, が:0.1373, と:0.0572)ロバート・ロペス と共に
No.44 恩師 [ の ] (の:0.8946, を:0.0244, という:0.0132)薦め も
No.45 反射 [ の ] (の:0.2507, は:0.2121, を:0.1552)前部 に
No.46 肉 [ と ] (が:0.3772, を:0.1449, は:0.1141)驚く ほど
No.47 1985年 [ の ] (に:0.3914, は:0.1182, の:0.0777)ベストセラー と
No.48 持つ [ を ] (を:0.6830, の:0.2856, が:0.0529)筆頭 として

ディープラーニングによる日本語の助詞の選択(1)

ディープラーニングで、名詞と名詞(ないしは動詞)をつなぐ助詞を選択させる試みの中間報告となる。数量的な結果はある程度出たので、メモがわりに書いておこうということである。

すでに示してある、名詞+助詞1+名詞/動詞+助詞2というフレーズのうち、助詞1以外の語から、助詞1を選択するというのが問題である。日本語ウィキペディアから1200万個くらいのこの4語のデータを作ったのだが、このうちの100万語を使って、自己符号器型のディープラーニングニューラルネットを学習させた。

ネットワークのトポロジーは、 563 500 400 300 156 となっている。左から入力ユニット(名詞二つのword2vecベクトル、200x2プラス、選択された助詞2、163個の広い出された助詞のうち、使われたものだけが1になっている。これらが入力データ)で、一番右が出力ユニット数(拾われた助詞1の総数163個のうち、実際に使われていたものだがけが1になっているベクトル)

テストはまだ行っていないのだが、データに対して、どれほどの答えを出しているのかを調べてみた。

結果は、10万個のデータに対して、53.6%の正解を示していた。正解は、選択肢の中で、最大出力が解答と同じである場合である。

じっさい、これには正しい答えというのは、あるようでない。「の」が「は」に変わっても大して意味が変わらないこともあるだろう。他の三つの語が同じでも、助詞はいろいろに変わりうるからだ。

政界のユニットが出力している値のヒストグラムは次の図のようになる。横軸が回答ユニットの出力値の幅で、縦軸がその範囲にある頻度である。

結果をパラパラ見る限り、使えそうな気はしている。教師データを100万個から500万個くらいにあげれば、もっと言いあてるようになると思う。1000万個まで行きたいが、とてつもなく時間がかかってしまう(ただ、この間、ディープラーニングのアルゴリズムやクラス構成、プログラム自体を改良していたのは、教師データを引き上げても、かかる時間以外の、メモリーなどで対応できるようにするためだったのだが)

まあ、まあ、こんなもんだなと言う感じである。実際、どのような文脈で、どのような助詞が選ばれるかについてテストした結果は(まだテストしてないが)、次の記事にする。

ディープラーニングのプログラムを組み直す(2)

相当基本的なところから組み直した。ごちゃごちゃしたプログラムをだいぶ整理した。直しはバグのもとであり、結局、MNISTの手書き文字の認識まで戻ってテストせざるを得なくなった。

ディープラーニングのエンジンである、バックプロパゲーションのところだけは、流石にいじらなかった(笑)ここをいじり始めたら収拾がつかなくなる。

以前は、学習とテストを同じ関数でやっていたが、きちんと切り分けた。CUIからGUIにインターフェイスをレベルアップさせた。

かなり拡張性も出てきたと思う。MNISTの正解率も以前のものと同じものに戻った。オブジェクトというか、クラスをかなり整理したので見やすいプログラムになったと思う。

これで、最適助詞選択プロジェクトに入る。

ディープラーニングのプログラムを組み直す(1)

昨年作ったディープラーニングのデータを組み直している。

もともと、プログラムは複雑である。ネットワークは、レイヤーとニューロンという構造を持っているし、バックプロパゲーションを組み込まないといけないし、さらに、私の場合はオートエンコーダ(自己符号化器)というディープラーニングの手法を組み込んでいる。

前回作ったプログラムは、
https://github.com/toyowa/jautoencoder
においてある。

プログラムの構造が、ネットワークの構造にうまく対応していない。オブジェクト指向が徹底されていないと行ってもいい。

問題はわかっても、直すのは手間がかかる。1年前の自分の頭に戻すのが大変なのだ。

一文章の要約システム(6) : データフォーマットの変更

これまでの話では、「名詞」+「助詞」+「名詞/動詞」の3語のパターンで、深層学習のデータを作ると書いたが、実際できたデータを見ると、前後の語から間の助詞を判断するのは、自分で見ても難しい。そこで、もう一つ助詞をとって、

「名詞」+「助詞」+「名詞/動詞」+「助詞」

のパターンで、はじめの助詞を推定するという構造に変えた。これで日本語wikipediaデータをパースすると、前よりもデータ数は減ったが、それでも、17,588,062対を得ることができた。これで、深層学習のデータを作成しよう。

データ(一部)は次のような感じである。

体:は:羽衣:の
もの:が:付い:て
輸送:において:採算:を
千年:から:エネルギー:を
延長:を:図っ:て
路線:を:中心:に
7日間:しか:目:を
ジラーチ:は:ロシア語:で
ハイダル・アリー:は:戦争:の
その後:も:戦争:は
イギリス:は:マンガロール:に
1784年:に:第二次マイソール戦争:は
マンガロール:で:休戦:と
これ:は:インドの歴史:で
インド:の:民族:にとって
イギリス:に:腰:を
し:て:休戦:を
ウォーレン・ヘースティングス:は:これ:を
国王:と:議会:に
市内:の:殆ど:の
地域:で:最寄駅:まで
線:を:皮切り:に
通常:の:プレイ:で
路線:の:開設:に
210:は:バス路線:の
空白域:を:ピンポイント:で
2004年:から:2008年:にかけて
1780年:は:武装中立同盟:に
ため:に:増発:を
キャンペーン:の:一環:として
ネーデルラント連邦共和国:に対し:先手:を
深夜バス:の:運行:も
武装中立同盟:は:ヨーロッパ:の
6月19日:から:7月17日:まで
間:に:ニンテンドーWi-Fiコネクション:で
結果:は:ヨーロッパ:で
赤字:が:続い:て
7月1日:から:7月31日:まで
イギリス:は:ネーデルラント:が
扇動:と:オランダ政府:の
イギリス:の:攻撃:を
ホウエン地方:の:トクサネシティ:の
フレーズ:を:口:に
これら:の:こと:から
セレビィ:と:ウバメ:の
独立戦争:の:最初:の
これ:を:基:に

大学研究室のロボットサイトを閉じた

大学の研究室サーバー上のロボットサイト「ibot研究会」にあった記事を、全てこのサーバーに移した。そして、大学研究室のサーバーにアクセスするとこちらのURL転送をするように設定した。

このサイトは、私がオーナーである、ibot株式会社の公式サイト ibot.co.jp である。大学のサイトは、2014年から今年はじめまでの、私のロボット研究の経過が詳細に終えるようになっていた。

このサイトは、お名前.comのバーチャルサーバー上に置いてある。月1000円もかからない、超安価なサーバーであるが、まあ、十分使えるし使いやすい。ibot.co.jp以外の、私のwashida.netなどのドメインも、このサーバー上でホスティングしている。osはlinuxである。

ただ、スペックは低い。もし、レスポンスが我慢できなくなるくらい遅くなったら、スペックをあげるつもりでいる。