LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

teratailの可哀想な質問にBluemixで想定回答してみる試み1

この記事はteratail:miyamiyaの IBM Blumix Adventカレンダーの17日目の記事です。

bluemixを使って、teratailの質問に最適な回答が提案できるかやってみたいと思います。
サーバとか用意してられないし、ローカル環境も用意してられないので、
全部 bluemix だけでやってみたいと思います。

作りながらnode-redでサービスをプチプチ繋ぎながら書いているので、
作りたいものがブレブレですが、参考程度にどうぞ。

(本当は)想定は以下です。

  1. 答えられるか判断する(クラス分類系API)
  2. 質問を理解する(Research)
  3. 情報の検索(Retrive)
  4. 最適な質問を回答する(Ranker)

が、試み1回目は、bluemixで何ができるかなので、かなーり湾曲省略して、以下で試したいと思います。
(watsonの本領が発揮できてないが気にしない)

  1. teratailAPIから質問を取ってくる
  2. 英語に変換
  3. stackOverflowにAPIで質問をぶん投げる
  4. それっぽい結果を日本語に翻訳
  5. 結果を表示する。

構成

  • node-red
    • 環境構築がいらないすごいやつ。
    • YahooPipesに似ているけど、それ以上のサービス連携を持っている。
  • bluemixの各サービス
    • Watsonが強力

基本的な使い方を知る

  1. bluemixのアカウントを作る。
  2. ボイラーテンプレートからred-nodeを押す
  3. カタログから面白そうなサービスを探してくる
  4. 作成を押した後に、接続でred-nodeを選択すると、node-redで使えるようになってる
  5. node-redでノードをポチポチ繋げていく
  6. 右上のデプロイを押すと更新される
  7. ノードの一番左端を押すと実行される。(これに気づくのに時間がかかった)

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

ここまで出来た結果をみてみる。

スクリーンショット 2016-12-21 2.48.37.png
スクリーンショット 2016-12-21 2.48.49.png

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に繋いでみます。

スクリーンショット 2016-12-21 3.24.14.png
スクリーンショット 2016-12-21 3.25.22.png

返ってきた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

・コンフィグ サンプル
http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/resources/cranfield_solr_config.zip

参考

タグの質問を取得する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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5