この記事はteratail:miyamiyaの IBM Blumix Adventカレンダーの17日目の記事です。
bluemixを使って、teratailの質問に最適な回答が提案できるかやってみたいと思います。
サーバとか用意してられないし、ローカル環境も用意してられないので、
全部 bluemix だけでやってみたいと思います。
作りながらnode-redでサービスをプチプチ繋ぎながら書いているので、
作りたいものがブレブレですが、参考程度にどうぞ。
(本当は)想定は以下です。
- 答えられるか判断する(クラス分類系API)
- 質問を理解する(Research)
- 情報の検索(Retrive)
- 最適な質問を回答する(Ranker)
が、試み1回目は、bluemixで何ができるかなので、かなーり湾曲省略して、以下で試したいと思います。
(watsonの本領が発揮できてないが気にしない)
- teratailAPIから質問を取ってくる
- 英語に変換
- stackOverflowにAPIで質問をぶん投げる
- それっぽい結果を日本語に翻訳
- 結果を表示する。
構成
- node-red
- 環境構築がいらないすごいやつ。
- YahooPipesに似ているけど、それ以上のサービス連携を持っている。
- bluemixの各サービス
- Watsonが強力
基本的な使い方を知る
- bluemixのアカウントを作る。
- ボイラーテンプレートからred-nodeを押す
- カタログから面白そうなサービスを探してくる
- 作成を押した後に、接続でred-nodeを選択すると、node-redで使えるようになってる
- node-redでノードをポチポチ繋げていく
- 右上のデプロイを押すと更新される
- ノードの一番左端を押すと実行される。(これに気づくのに時間がかかった)
node-redのfunctionの使い方を知る
基本的にmsg.payloadが入ったmsgで受け取って、returnでmsgを返せばノードがつながりました。
teratailのAPIで質問を取る場合は以下にこうする。
var id = msg.payload.questions[0].id;
msg.url = "https://teratail.com/api/v1/questions/" + id;
return msg;
繋げ方は、teratailの動画が参考になった。
https://www.youtube.com/watch?v=Kwec1HVxqGY
ここまで出来た結果をみてみる。
teratailから取ってきた質問が取得できて、タイトルが英語に翻訳されていますね。
あとは、stackoverflowがAPIを提供しているので投げれば回答が幾つか見つかりそうです。
stackoverflowのAPI
https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&q=convert%20json%20to%20csv&tagged=ruby&site=stackoverflow
ここまで作ったところで、疑問が出てきました。
質問している人はどれくらい困っているんだろうか?
いまにも泣きそうな人がいるのではないか?
回答そっちのけで興味が出てきたので、作戦変更です。
カタログにwatson-tone-analyzer-v3というズバリ感情がわかるAPIが用意されていました。
タイトルだけだと悲しみに暮れているのかわからないので、質問内容をとってきて、感情APIに繋いでみます。
返ってきたmsg.responseの中に、Sadness(悲しみ)とそのscoreが含まれていますね。
この値でソートして、優先的に回答すれば効率良く助けることが出来るはずです。
お粗末さまでした。
これからの参考
R&Rを使う
ノードに対応しているみたいだけれども、初期設定のやり方がわからず調べ中です。
カタログ
https://console.ng.bluemix.net/catalog/services/retrieve-and-rank/?taxonomyNavigation=services
参考RRのチュートリアル
皆ここを参照しているらしい
http://www.ibm.com/watson/developercloud/doc/retrieve-rank/tutorial.shtml
参考
タグの質問を取得するAPI
https://teratail.com/api/v1/tags/ruby/questions
teratailのリミット制限をノードを前に付けて回避する方法
msg.headers = { "Authorization": "Bearer aXXXXXXXXXXXXXXXXXXXXXXXX"};
return msg;
qiitaから引っ張ってくるのも面白そう
http://qiita.com/api/v2/items?page=1&per_page=20&query=ruby+sort