Watson Conversation APIでBotを作るための記事

Node.jsベースのBotkitでBotを開発、IBM Cloudで運用しているのだが、Nodeのブロックング/ノンブロッキングとBotkitの非同期処理の扱いが良くわからず、細かい所の制御が出来ずにいる。bot.replyとか非同期で動くのだが、強制的に順序を合わせることが出来ずにいたり… 自分の理解不足を感じる。

ただ、簡単なことをやるには簡単だし、見た目(返信の順序とか)を気にしなければ良いと言えば良いので、自分や小さいコミュニティ向けのBot開発には悪くない選択ではないか。HubotやRubotyも昔使ってみたことがあるが、CoffeeScriptRubyじゃなく、JavaScriptでやりたいという強い意志がある場合には特に良い。

これに味をしめて、もう少しちゃんとした会話が出来るBotを作ってみようと考えているが、同じIBM Cloudということで、Watson Conversation APIが気になっている。

www.ibm.com

これは

  • Intents: 会話の中身
  • Entities: 会話構成要素となる単語など
  • Dialog: 会話のフロー

を定義することで、ノンプログラミングでチャットのコア部分が出来るという優れもの。しかも、Watsonなので、Entitiesなどは勝手に学習して賢くなっていってくれる。GoogleのDialogflow(旧api.ai)もそうだが、こんな簡単にChat Botが出来るなんて、なんて良い世の中になったもんだ。

ということで、次はWatson Conversation APIを使ってみようと考えているのだが、そんな時に秀逸な紹介記事が出ていることに気づいた。

ThinkWatsonというIBMのオウンドメディアでの記事だが、次の4記事が公開されている。

www.ibm.com

www.ibm.com

www.ibm.com

www.ibm.com

この4記事で、Conversation APIを用いたチャットの設計・開発、Node-REDを使って、これまたノンプログラミングでSlackと連携、API化してWordPressに組み込むことまで出来る。素晴らしい。

5年くらい前に、もう無くなってしまったYahoo! PipesTwitterBotを作ったことがあったが、その時はなんだかんだで結構たいへんだった。良い世の中になったもんだ。

Botにリマインドしてもらう

takoratta.hatenablog.com

昨日書いたBotkitを使ったBotIBM Cloudライトアカウントを使って動かしているが、このIBM Cloudライトアカウントは

  • 10日間 開発なしでアプリを自動停止
  • 30日間 活動なしでサービスの自動削除

という制限がある。Botなので、ずっと動かし続けているから、後者は良いとして前者については、開発をし続けるしかない

忘れないようにリマインダーとして、Slackにメッセージを送って貰うようにした。Botkitとnode-cronを用いた。

const = require('cron'); して、startRTM()のところを次のように変えた。

controller.spawn({
    token: process.env.token
}).startRTM((err, bot, payload) => {
    if (err) {
        throw new Error(err);
    }
    new cron.CronJob({
        cronTime: '0 0 9 17 0 *', // 1/17の9時に起動
        onTick: () => {
            bot.say({
                channel: 'takoratta_test', // チャンネル名
                text: 'IBM Cloudライトアカウントを使っているので開発し続けないとサービスが停止します'
            });
        },
        start: true,
        timeZone: 'Asia/Tokyo'
    });
});

cronTimeのところはサービスが停止する数日前にしておけば良い。本当は更新期限をIBM Cloud側から取得したかったが、どうすれば良いかわからないので、ハードコードとしてある。ソースコードを変更後に、cf pushするときに、ここも更新しておけば良い。ここだけ更新するだけで開発したことになるだろうとも思うし、こんなリマインダー送るようなことしなくても、cf pushをローカルマシンでCronしておけば良いではないかというチートも考えつくがやっちゃいけない。

ところで、Cronの時間設定のフォーマットはいつも間違える。今回も月が0から始まることを忘れていた。ここは、cronTime: 'sec min hour day month(0~11) week'となっている。

推薦図書(メディアや書籍で紹介したもの一覧)

お勧め図書は?という質問を受けることがある。

ビジネス書で良い本もあるし、文学書で好きなものもあるが、ここではIT系のメディアで今まで聞かれた際に答えたものを整理しておこう。

まえがきとして書いておくと、正直、推薦図書と言われても回答するのは結構難しい。推薦図書とは、1) 自分が影響を受けた本なのか、2) 今の人に参考にして欲しい本なのかで、まず悩むし、1) の自分が影響を受けた本だとしても、どの時期に影響を受けたのか、さらには 2) のその本を今の人に参考にして欲しいのかでも悩む。参考にして欲しいとしても、そのターゲットは誰かでも薦める本は異なる。

というような悩みを抱えつつ、今までパブリックなメディアや書籍などでお勧めした書籍は以下のものだ。

まず、日経BP ITPro Watcherブログ - Avoid Note*1から

itpro.nikkeibp.co.jp

 

itpro.nikkeibp.co.jp

itpro.nikkeibp.co.jp

 

少し脱線するが、このAvoid Noteというブログは結構工夫をして書いていたものだった。個別の記事は検索すればひっかかるのだが、一覧から辿れなくなってしまっているのはちょっと悲しい。 今に記事本体も消されてしまいそうな予感がするので、後でアーカイブしておこう。

 

2012年にデブサミの記念書籍にも寄稿して書籍を推薦した。

www.amazon.co.jp

その原稿がこれだ。

takoratta.hatenablog.com

 

そして、今年にまた書籍を紹介して欲しいと言われて寄稿したのが以下の記事だ。自分では違う書籍を紹介しようと思っていたのだったが、日経BP ITPro Watcherで推薦したものを忘れてしまい、こちらでもヘネパタ本を紹介してしまっていた。

employment.en-japan.com

 

今のヘネパタ本はこれ。内容が結構更新されているみたいなので、久しぶりに読んでみようかと思う。 

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

 

これ以外にも影響を受けた本はあるので、おいおい紹介していくかもしれない。

以上、Facebookにふんわりと書いておいたのだが、Facebookだと流れていってしまうので、自分の記録ようにこちらに書き直した。

Facebookの投稿はこれ → 及川 卓也 - 私も推薦図書を挙げさせて頂いています。一人だけ、やたら長文になってしまっていて、これだから年寄りは昔話... | Facebook

*1:2008年ごろに連載を持っていた

加齢による記憶力低下に対する考え方

今年もCROSS先達に聞くこれからのエンジニア像というセッションに参加した。例年にも増して、言いたい放題の本当に勝手放題してしまったが、今年は放言に加えて、年金だとか終活だとか、参加者を無視した内容になってしまったことは反省している*1

セッションの中で出た30年前に戻ったら何をしたいかという質問に、私以外の登壇者2名*2は数学とお答えになられていて、「今勉強しても、昔と違って記憶力が悪くなっている。(だから昔にもっと勉強しておけば良かった)」と発言されていた。

セッション内でも言ったのだが、おそらくこれは正しくない。

今も昔も覚えるのは大変なのだ。年を取ったことで記憶できなくなったのではなく、昔も覚えるのには苦労したのだ。

私がそのように指摘したら、「昔から能力が低かったってことですね」と笑われていたが、それはちょっと卑屈すぎる冗談として、昔が良かったと考えることでいろんなことを言い訳にしてしまいがちになる。

今が大変なのは、本当に大変なのであって、昔が良かったからではない。そう考えるだけで、物事への捉え方は変わる。

新しい技術を覚えるのが大変だと感じても、それはその技術の習得が本当に難しいからだ。そう考えたい。

数学の話に戻ろう。

数学の場合は、新しい事柄を学ぶのとは異なる。一度覚えた(はず)のことを再学習するということだ。そのため、本当は、昔覚えていたときの体験と、今の再学習での体験を比較することが可能だ。その上で、「昔のほうが記憶力は良かった」かどうかを判断することができる。

だが、それはおそらく無駄だ。なぜなら、「昔、記憶*3していたかどうか」や「どれだけスムーズに記憶していたか」をあなたはもう覚えていないはずだから ;)

*1:本当はそんなにしていない

*2:伊勢さんと吉岡さん

*3:ずっと「記憶」と書いているが、正しくは「習得」かもしれない

すべての人が寄り添いあえる社会

「5.1chって言ってね、6個のスピーカーを配置することで、サラウンドが実現できるんだよ」

「サラウンドって?」

意外に物を知らない彼女にホームシアターを説明しているときだった。

「普通のステレオじゃなくて、前後などからも音が」とここまで話しかけて、彼は口をつぐんだ。

そうだ、彼女はモノラルの世界に生きているんだった。

 

1年ほど前に彼女は突発性難聴*1を発症し、右耳の聴力を失っていた。

正確には完全に聞こえないわけではない。ただ、一般人の声の周波数帯域と言われている500Hz以上の周波数の音声はかなりの音量でないと聴くことが出来ない。そのため、右から声をかけられても気づかない。

彼女が片耳の聴力を失ってから、彼は彼女との位置を気にするようになった。できるだけ彼女の左側にいるようになった。

彼女抜きで、友人と酒を飲んでいるときなどでも、彼は気になってしまうときがある。ビアホールや若者が多い居酒屋などで飲んでいるときだ。これだけ騒がしいと、たとえ左からであっても、彼女は会話が聞き取れないだろう。そう思い始めると、酒も進まなくなる。 

技術ができること

彼女のような人に技術は何ができるだろう。

普通の補聴器はたいがいの場合、無力だ。聴力を失った耳に役立つ補聴器は無い。

聴こえなくなった耳側に届いた音を、正常な聴力を持つもう片方の耳に飛ばすクロス補聴器というものがある。これなどは突発性難聴で聴力を失った人に使われているようだが、先ほどの例のような、うるさい場所での会話などではあまり使えないため、これも万能ではない。

未踏プロジェクトでOntenna(オンテナ)が紹介されたときは、これだ!と思った。ヘアピンのように髪に着けることで、髪で音を感じるというデバイスだ。今は富士通で開発が進められているようだ*2が、是非とも早期の製品化を期待したい。

ontenna.jp

クロス補聴器のような聴力補助器もOntennaのような音を感じるデバイスも、障がいを持った側が努力をするものだ。このようなアプローチが王道だとは思うが、他に方法は無いだろうか。

歩み寄る技術

ユニバーサル・サウンドデザインという会社がある。ここから出されているcomuoon(コミューン)は聴力の障がいを持つ人に声を届けるためのコミュニケーションデバイスだ。いわゆるマイクとスピーカーなのだが、聴力に障がいを持つ人に話しかける側が聴こえの改善に歩み寄るためのデバイスだ。 

u-s-d.co.jp

人はそれぞれいろいろな特徴を持つ。この特徴は、性格であったり、癖であったりするのだが、身体の特徴としての「でこぼこ」の「ぼこ」になったところが障がいとして社会生活を不自由にさせるものとなる。多くの障がいは特徴などと言うほど甘いものではないのは事実だ。だが、障がいというのは、一部の人だけが抱える特別な事情ではないということだ。年齢とともに誰もがなんらかの障がいを持つようになるが、それだけではない。

彼女だってそうだ。

朝起きたら、なんか右耳が聴こえにくかっただけだった。水でも詰まったかと思い、スマホで「耳 水抜き」とかで検索していただけだったのだが、めまいがひどくなり、病院へ。その日から生活が一変した。誰にいつ起きることかわからない。突発性難聴にかかったら、3分の1の可能性で聴力は快復しない。

すべての人がすべての人に歩み寄れる、寄り添えるような社会こそが必要とされているのではないだろうか。

&HANDとスマート・マタニティマーク

先日、優勝賞金が1,000万円ということでも話題になったLINE BOT AWARDSの審査員を務めた。すべての作品は素晴らしく、どのチームがグランプリに相応しいか悩むほどだった。24組もあったので、正直最後のほうはかなり疲れてしまっていた。しかし、最後の24組目となる&HANDのプレゼンを見たときに、疲れは吹っ飛び、このチームにグランプリをあげたいと、審査員としての自分の意思は固まった。

&HANDは、手助けを必要とする人が持ち歩くLINEビーコンを発するデバイスとLINEボットから構成される。手助けを必要とする人が、支援が必要となったときに、そのデバイスをオンにすると、ビーコンが届く範囲にいるサポーターのLINEにボット経由で通知が届き、サポーターからの支援を受けることができる。

プレゼンテーションで例として話されていたのが、聴覚障がい者が電車の遅延に遭遇したときの例だ。車内のアナウンスが聞き取れなかったときなど、デバイスをオンにすることで、周りのサポーターにアナウンス内容を確認することなどができる。

私がグランプリに相応しいと思ったのは、一般的には特定の場所に固定設置されることが多いビーコンを移動体である人に持たせるという発想がユニークであったことと、なによりも私が考える障がい者に人が寄り添うという考えと同じだったことに感動したからだった。

internet.watch.impress.co.jp

geechs-magazine.com

後日知ったのだが、このチームはAndroid Experiments OBJECTでグランプリを取ったスマート・マタニティマークを開発したのと同じチームだ。

www.android.com

こちらは障がい者ではなく、妊婦向け。アイデアは同じだ。妊婦がデバイスを持ち歩くことで、近くにいる人は支援を必要とするかもしれない妊婦が近くにいることを知ることができる。LINEビーコンを使うかどうかの違いはあるが、こちらも寄り添う気持ちを大事にしたものだ。

まさに、すべての人にはいろいろな「でこぼこ」という特徴があり、たまたま「ぼこ」になった人が周りに寄り添ってもらうことができればという考えだ。

つい先日も同じような体験をした。私は吊革に捕まっていたのだが、前に座っていた女性がすぐ近くに席を探している高齢者がいることに気づかなかったのだ。少し遠いところから、席を譲った人がいて、初めて彼女は近くに支援を求める人がいることに気づいたのだ。

日本では、車内で座っている人の大半は寝ているか、スマホを覗き込んでいる。どちらも、周りは見えていない。悪意無く、支援を必要とする人を無視してしまうことになる。

&HANDやスマート・マタニティマークは、悪意無い人を善意の人に変える、そんなきっかけを作るものだ。

すべての人が、「でこぼこ」の「ぼこ」を支え合え、寄り添い合うようになれば、社会はより優しく、そして強くなる。

技術で何ができるか考えていたが、1つの答えがここにあるように思う。

今後、実際に使われるようになるまで、まだまだ課題は多いと思うが、応援していきたい。

*1:突発性難聴の原因は不明であり、治療しても完治するのは約3分の1程度と言われる。残りの3分の1は後遺症が残り、さらにその他の3分の1はまったく快復しない。発症後48時間(遅くても1週間)以内にステロイド投与を行うことが唯一の確立された治療法で、それで効果がなかった場合には高酸素療法などの治療を試すことになる。

*2:「ろう者に音を届けたい」(前編) 髪の毛で音を感じる全く新しいデバイス「Ontenna」 : FUJITSU JOURNAL(富士通ジャーナル)