プログラマーですが何か?まだプログラマーですが何か?プログラマーネタとアスリートネタ中心。ワトソンなどの各種コグニティブエンジンを使う際に、重要なのは学習データだと思っています。要はコグニティブエンジンを使って問い合わせを行うわけですが、その問い合わせする前に何らかの学習をする必要があり、そこで何をどれだけ学習させたかによって問い合わせの精度が変わってくるからです。先日こんなツイートをしました:https://twitter.com/dotnsf/status/834959690803007488↑は、その学習データを何らかの方法で集める際に、(非同期処理で集めるのではなく)マルチスレッド処理がいいのではないか、と思ってつぶやいたのでした。このことをもう少し詳しく紹介しようと思います。特定条件下での個人見解なので他の人の意見も聞いてみたいと思ってます。設定ミスなど何らかの原因でアクセスする際に非常に長い時間がかかる(長い時間がかかった結果、タイムアウトになったり成功したりする)場合もある1と2はごく普通の条件ですよね。リストは配列変数で用意されているものとしましょう。取得する、という処理を施すことになります。問題は3と4の条件です(でも現実的に想定すべき条件だと思ってます)。エラーが返ってくることを想定しないといけない、ということです。4は更にややこしい条件です。アクセスに非常に時間がかかってしまうケースです。取得できればいいのですが、最終的にタイムアウトエラーが発生することもあり得る、というケースを想定する必要があります。取り出す、という処理をするものとします。この関数の中で3や4を原因とするエラーや時間がかかるといった現象が発生することを想定してみます。取り出す処理に時間がかかってしまうような事態が発生すると、リストの途中で処理が先に進まなくなってしまう、ということになります。このようなケースを想定した上で効率よく処理を実行するにはどう改良すべきでしょうか?1つの方法として考えたのが非同期処理です。アクセスを非同期に行う、という方法です。取得する」という命令を全て先に実行しておき、(成功にせよエラーにせよ)取得の処理が終わったらそれぞれの続きを行う、というロジックです。対する処理は邪魔されることなく先に終了し、時間のかかる処理だけが後から実行される、という一見きれいな形になります。この方法にも問題点がありました。リストが膨大だった場合です。取得のリクエストが発行されます。ソケット数上限を超えて実行されてしまう可能性があります。この部分はコーディングというよりもシステムのメモリ管理やソケット数管理などの厄介そうな処理を行う必要がでてきてしまいます。冒頭のマルチスレッドです。取得する処理を行うことができるようになります。対する処理がその遅延に巻き込まれることはありません。この例では1秒(1000ミリ秒)おきにスレッドを生成するようにしています。1スレッドの処理が2秒程度かかるようなケースであっても、3つ目のスレッドが生成されたタイミングで最初のスレッドの処理は終了している可能性が高くなり、同時に実行されるスレッドの数がさほどは増えないようなアルゴリズムになっています。ようなケースが発生したとしても、そのスレッドだけはしばらくの間生き続けることになりますが、他のスレッドは生成しては処理されて消えてゆくという流れになるので、やはりシステムの限界を意識するような処理にはなりにくいアルゴリズムになっているのでした。いう所まで作っての「マルチスレッド処理が効率よい」という冒頭の結論に至ったわけでした。要するにこれなら深く考えずに作って動かしてもややこしい対応が必要になる心配が少ないかな、と。得意とする処理ロジックであり、オッサン脳の出番が増えるかもしれないなあ、と感じたのでした。dotnsfゆるキャラを画像で検索するサービスを作って公開してみました:http://yuru.mybluemix.net/まず最初に、自分はある程度ゆるキャラに詳しいと思っています。積極的な興味というよりは、マンホールに詳しくなっていると、最近はそのマンホールのデザインにゆるキャラが使われることが珍しくなくなってきたので、自然と(?)ゆるキャラにも詳しくなってしまうのでした。ゆるキャラに限らないのですが、イマドキ何かを調べようとした時にはまず『ググる』のが定番です。それは調べるためのキーワードが分かっている場合です。東京都」などで検索すればいくつか候補が見つかるのでそこから調べる方法もあります。問題は名前も出身地も分からず、検索するためのキーワードがない場合です。目の前に着ぐるみそのゆるキャラ本体がいて、写真は撮れるんだけど、そのゆるキャラがなんという名前で、どこのゆるキャラで、どんな特徴を持っているのか、、、といった情報を調べる具体的な方法がなかったように感じていました。いった背景もあり、「画像からゆるキャラを調べる」ことができるようなウェブサービスを作ってみた、という経緯です。場合に限り、目的の画像ファイルを画面上部のこの辺りにドラッグ&ドロップしても構いません:例えばこの画像のゆるキャラを調べてみることにしました。有名なヒトなので答はわかっているのですが、ちょっとトリッキーなアイテムも写っていて普段と違う画像になっているので、いいサンプルかな、と:この画像を選択するか、画面内にドラッグ&ドロップすると画面が暗転して検索が始まります:暗転から戻ると、検索結果として候補キャラが画面下部に表示されているはずです。最大で100件表示されます:今回の画像の場合、下の方にそれっぽいのが見つかりました:該当する結果の画像をクリックすると、そのゆるキャラの情報がポップアップします。ご存知「くまモン」でした。あればマウスオーバーでも表示されます:まだまだ学習量が充分ではなく、第一候補となることはまだ珍しいとか、(着ぐるみの写真ではなく)絵の場合には精度が落ちるとか、横から写した画像に弱いとか、背景画像に左右されることが多いとか、まだまだ問題はありますが、一応動くものが作れたと思ってます。実際の用途としてはある程度いけるかな、と思ってます。精度高く検索できることが理想ですが、上記で書いたように「名前が分かれば色々調べる方法はあるんだけど、肝心の名前が出てこない」のを解決するツールとして考えると、検索結果の候補の中に含まれていれば、それはそれでオッケーかな、と。使って開発しています。今後の仕様変更などがあった場合にサービスがどうなるか何とも言えませんが、なるべく対応させていく予定です。合わせてもう少し学習データの量を増やして検索精度を上げられないか、がんばってみます。)をインプットとして与えると、その内容のテキストと、その変換の確度をテキストでアウトプットしてくれる、というサービスです。学習にご協力いただけるかどうかを設定します。その下で今回の作業で使う音声の言語情報を設定します。スピーカーを有効にしておきます。これだけで事前準備は完了です:では実際にサンプル音声データを使って認識させてみます。ボタンをクリックします:サンプルの日本語音声が流れ始めます。同時にその音声の認識結果が表示されはじめます。最後まで再生が終わると、最終認識結果が表示されます。は正しい結果に認識できていることがわかります。漢字になっていますね。使ったアプリの例です。自分のアプリケーションの中で利用することができる、というものです。アプリケーションに組み込んで使ってみる、という具体例を紹介します。ログインし、実際のアプリケーションサーバーとなるランタイムを作成します。追加」をクリックします:サービスの一覧が表示されます。サービスの説明が表示されます。日本語に対応していることが確認できます。この画面で「作成」ボタンを押して、このサービスが先程作成したランタイムに紐付けた形で利用できるようにします:ちなみに、この画面の下部にはサービスの価格に関する情報も表示されているので念のため確認ください。音声データの長さで課金されます。サービスが紐付けられると、ランタイムの環境変数からこのサービスを利用するための情報を参照できるようになります:この環境情報はこのような内容になっているはずです。利用する際に必要になる認証情報が記載されています。ポストする日本語音声ファイルを用意します。ファイル(aiueo1.wav)をダウンロードして使わせていただくことにします。他の音声ファイルでも構いません。:日本語音声サンプルで、こんな感じのアプリケーションを作ってみました。ページのファイルです。実行して、その結果を返すサーブレット(./speech2text)を以下の内容で作成します。}}肝になっているのは赤字で記載した部分です。使った例を紹介しています。パラメータで言語情報を指定します。決め打ちで指定しています。これ以外にも認識の途中経過を結果テキストに含めるような指定をすることもできますが、今回は認識した最終結果だけをその確度と一緒に返す仕様(デフォルト)で実行しています。ヘッダに追加し、音声ファイルのバイナリを本体としてする、という内容になっています。その内容を実装していますが、同様の処理を記述すれば他の言語でも同じ処理を実行できるはずです。よう」と聞こえちゃったんですね。値をタブ("\t")でつないで返す、という内容のサーブレットにしました。特徴の1つとして、「一般的な会話がなされている前提で、会話として確率の高そうな結果が優先される」ように感じています。上記例だと、一般的な会話の中には「あいうえお」という発音だけがなされる可能性は低いのも事実だと思っています。一方で「ああ、言うよ~」はより会話っぽいので、こういう結果の方がどちらかというと(会話として)可能性が高い、と判断するようです。良くも悪くも会話優先で変換してくれるような印象を持っています。パラメータで挙動をある程度コントロールすることもできますし、結果により詳しい情報を含めることもできます。思うので、様々なアプリアイデアの中で使ってみてください。How-Old.net。精度に???な所はあるけど面白い、とネットでも結構話題になった印象です。持っていかれてしまいました。マーケティングのうまさと画像認識機能への本気度を感じました。相当する機能を自分で作るにはどうしたらいいか、という話をしようと思います。この画像認識/顔認識の機能は比較的最近になってホットになりつつある技術分野です。最近になってなぜ?かというと、この所ニューラルネットやディープラーニング技術による人工知能分野が活気づいてきており、特にこの「画像認識」や「パターン認識」の分野に関してはディープラーニングによってある程度の成果を上げることができつつあることが挙げられます。画像認識コンテストではディープラーニング技術を使ったエンジンが軒並み上位の結果を残している、という事実もあります。画像認識はここ数年で研究レベルから実用レベルになりつつあると言えます。人工知能研究には長い歴史があります。いうブランドの下で色々な人工知能エンジンの実用化に向けた取り組みを行っていました。しても提供されるようになりました。ディープラーニング技術をメインにしているわけではありません。公開されていますが、現時点で人気のディープラーニングをベースとしたものではありませんでした。いう、2つの柱ができました。強みといえるかもしれません。通じて、ある程度の無料利用枠を設けて提供されています。ようなサービスを作ることができる、ということになります。この「誰かが作ったものを使う」だけではなく「自分で作ることもできるような機能も提供されている」のが特徴です。して提供されています。特徴として、認識結果の自信度合いも結果に含まれる、という点が挙げられます。「この顔は男性だと思うけど、その確率は99%」とか「この人の年齢は30歳前後だと思うけど、その確率は60%」といった具合です。提供されている点が特徴です。実行した結果の自信が60%以下だった場合は使わない、といった判断をプログラミング内で行うことで精度の高い結果だけをサービスとして採用する、という条件分岐を含めることもできます。顔認識機能に関しては有名人の顔に限りますが面白い特徴があり、性別や年齢だけでなく「○○さんの顔」として識別できるという特徴があります。アメリカでも有名な渡辺謙さんの画像を問い合わせてみるとこんな結果になります。認識されているのがわかるでしょうか?:まだ試作段階なので今後変更の予定もありますが、一応上記の確認ができるようなサービスを作ってこちらで公開してみました。興味ある方は使ってみてください:http://dotnsf-watson.mybluemix.net/同じ顔認識機能でも、こういった特徴というか特色が各社ごとにあるのも面白いですよね。このような「有名人であればピンポイントで識別する」機能が提供されている点が面白いです。受け取って表示する、というアプリを作ってみることに挑戦してみてください。近い将来にこのブログでもその内容を紹介するつもりです。dotnsfこのエントリの続きです。サービスから使うことができます。ログインして、なんらかのランタイムにバインドする形で同サービスを追加する必要があります。メソッドを実行します。パラメータに流行性を調べたい単語を指定します。パラメータは流行性を調べる対象業界で、1はクラウド、2はビッグデータです。以外への応用もさほど難しくないと思っています。文字列になります:{"dataset":1,"word":"Bluemix","overall":19,"prevalence":10,"volume":4,"duration":5}この中身を少し解説します。結果にも含まれて返ってきているだけです。実際の実行結果といえるのはこの続き部分になります。流行度合いの総合的な結果であり、以下の3つの結果の合計値になっています。その単語の今現在の流行度合いを示しています。その単語がこれまでにどの程度の量/回数で使われているか、という指標です。多く使われていれば今流行している、といえるわけではありませんが、過去も含めてどれだけ多く使われていたか、という指標になる数字です。どの程度の期間使われているか、という指標になります。長い期間使われ続けている単語であればずっと流行しているともいえますが、短い期間で爆発的に流行したものかどうかを調べることもできます。総合結果は19という結果になった、という意味です。実行すればよいことになります。年4月19日現在ではまだ英語の単語に対してのみ利用可能です。ブログ検索」ブログパーツは、サービスを終了しました。