Showcase Gig Blog

Watson Retrieve And Rank について(設定編)

こんにちは。ディレクターの永田です。
前回に引き続き、Watsonの Retrieve & Rank(通称:R&R) 発表いたします。
皆様の参考となれば幸いです。

R&Rの設定方法

1.Bluemix上でR&Rのサービスを作ります。

randr_5

2.下記の画面が表示されます。アプリはアンバインドのままでも、サーバーを作ってバインドしてもどちらでも大丈夫です。今回はバインドせずに進めます。

randr_6

3.R&Rサービスができました。

randr_7

4.R&Rの管理情報をメモっておきます。

randr_8

5.Solrの設定ファイルを作ります。

日本語向けのSolr設定をしないといけないようですが、それは前回にも言及したIBMさんが作ってくれた(そのまま)ファイルを利用します。
Solrの設定はあまり調べてないのですが、schema.xmlの↓のあたりを弄れば良さげです。

randr_10

6.R&Rのデータの回答のデータを作ります。

形式は下記のようか形になります。
idとbodyは必須で要るようで、titleなど他の項目はSolrのコンフィグレーションファイルの内容次第だそうです。

{  
    "add":{"doc":{"id": 1,"title": "{何か適当なタイトル}","body": "{回答の文言}"}},  
    "add":{"doc":{"id": 2,"title": "{何か適当なタイトル}","body": "{回答の文言}"}},  
        :  
    "commit":{}  
}  

randr_9

7.R&Rのデータの質問のデータ(訓練用)を作ります。

↓のような形式で、CSVファイルで質問のデータを作ります。

randr_11

このデータは49レコードは作らないといけないということなので、回答のデータと質問のデータそれぞれそれなりの分量を作る必要があり、結構面倒です。

8.Solrクラスタを作ります。

下記コマンドを実行します。

curl -H "Content-Type: application/json" -X POST -u "{username}":"{password}" -d "{\"cluster_size\":\"{クラスタのサイズ。1で良さそう。}\",\"cluster_name\":\"{クラスタの名前}\"}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters"

randr_12

solr_cluster_idをメモっておきましょう。

solr_cluster_statusがREADYになるまで待ちます。5分くらいかかりますが、下記コマンドでclusterのステータスを確認できます。

curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/{solr_cluster_id}

randr_13

9.Solrのコンフィグレーションを設定する。

下記コマンドを実行します。

curl -X POST -H "Content-Type: application/zip" -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/{solr_cluster_id}/config/{適当なコンフィグレーション名前}" --data-binary @Solr設定ファイル名.zip

randr_14

10.コレクションを作成する。

下記コマンドを実行します。

curl -X POST -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/{solr_cluster_id}/solr/admin/collections" -d "action=CREATE&name={適当なコレクション名}&collection.configName={適当なコンフィグレーション名前}"

randr_15

11.回答データを設定する。

下記コマンドを実行します。

curl -X POST -H "Content-Type: application/json" -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/{solr_cluster_id}/solr/{コレクション名}/update" --data-binary @質問データのファイル名.json

randr_16

12.質問データを設定する。

IBMさんのサイトからpythonファイル(train.py)をDLします。
このtrain.pyはpython 2.7推奨のようです。

下記のような形で実行します。

python ./train.py -u {username}:{password} -i 質問データのファイル名.csv -c {solr_cluster_id} -x {コレクション名} -n "{ranker名}"

randr_17_1

最終的に下記のような表示となればOKのようです。statusがTrainingとなってますが、学習が終わったらAvailableとなります。だいたい5分くらいかかるようです。

randr_17_2

ステータスの確認は下記コマンドで確認できます。

curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers/{ranker_id}"

randr_18

準備としてはこれで終了です。

13.質問してみる。

下記コマンドを実行します。
qが検索クエリ、wtがレスポンス形式、flが取得するフィールドであるようです。

curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/{solr_cluster_id}/solr/{コレクション名}/fcselect?ranker_id={ranker_id}&q={エンコード済みの質問テキスト}&wt=json&fl=id,title,body"

randr_19

精度の高い回答を得る方法

精度の高い回答を得るには良い質問データが必要なようです。

良い質問のデータを作る指針については、 IBMさんのドキュメントに書いてます。

読んでみたのですが私の理解は下記です。(間違ってたら教えてください)

  • ファイルには、少なくとも49のユニークな質問が含まれている必要がある。
  • レコードの数は、あなたのSolr構成で識別されたフィールド(schema.xmlのfieldと思われる)の少なくとも50倍の数値でなければならない。5つのフィールドを定義している場合は、質問データに少なくとも250のレコードを持っている必要がある。
  • 2つ以上の質問に対して、同じ回答IDが設定されていないといけない。同じ回答でもスコアはそれぞれでOK。
  • スコアが0のデータは作ってはいけない。

R&Rの料金

NLCの時と同じですが、R&RのSolrクラスタやRankモデルは料金がかかります。
多くのユーザーが使うサービスでR&Rを使う場合には、アクセス数の予想からの予算検討をしておく必要があります。

●Retrieve:

  • 1 か月に 1 つの共有 Solr クラスター (最大 50 MB) が無料
  • ¥32.00 JPY/インスタンス時間ごとの専用の高可用性 Retrieve Solr クラスター

●Rank:

  • 1 か月に 1 つの Rank モデルが無料
  • 1 か月に 1000 回の API 呼び出しが無料
  • 1 か月に 4 つのトレーニング・イベントが無料
  • ¥1,050.00 JPY/1 か月ごとの Instance Rank 機械学習モデル
  • ¥0.0935 JPY/Rank API 呼び出し
  • ¥210.00 JPY/Rank トレーニング・イベント

参考

コメントは受け付けていません。