AI 人工知能で文章の意味を判別する(A3RT)
問題
人工知能の使いどころってどこでしょうね?
日本語の文章の意味を判別させるなどできますか?
答え
基本的によくある機械学習では、学習させて → 使う、の流れです。
今回は A3RT の Text Classification API でモデルを自作して使うのをやってみます。
API KEY 取得
外部サービスですから。API KEY 取得です。
https://a3rt.recruit-tech.co.jp/product/textClassificationAPI/
「API KEY 発行」から、メールアドレスを登録、メールでAPIキーを取得です。
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
学習データをアップロードする
学習データはCSVで作れます。
今回は日本語の文章の意味を分類させたいということなので、形式と内容は以下のような雰囲気です。
ネットショップのお客さんからの注文備考を判別させるイメージです。これを大量に作ります。
label | text |
---|---|
喜び | とても良い商品でした! |
喜び | 想像していたより素敵な商品でした。 |
怒り | スタッフの対応に不満です |
怒り | 配送希望日と違う日に届きました。いったいどうなっているのですか。 |
悲しみ | 角が少しへこんだ状態で届きました。残念でした。 |
悲しみ | 売り切れとのこと、残念ですがキャンセルでお願いします。 |
急ぎ | 11月11日までに間に合わせてほしいです |
急ぎ | 明日届けてほしいです。 |
確認 | いつ届きますか? |
確認 | 材質は何ですか? |
……
……
データ行数: 最低100行、最大10000行
文字コード: UTF-8
各レコードのテキスト文字数: 1000文字以内かつ500単語以内
学習の精度を上げるには、できるだけたくさんのtextを集めて、できるだけ適切にlabelをつけていきます。
文字コードがShift_JISだと、後でモデルを作ってもらうときに「1400 400 bad train data file 学習データファイルの中身が形式が不正」のエラーが出ます。UTF-8で保存しましょう。
dataset_URLで、学習データのアップロード先などを取得する
ここで取得したアップロード先には有効期限があるようなので、学習データのCSVを作るのが先です。
リクエスト
curl -X POST https://api.a3rt.recruit-tech.co.jp/text_classification/v1/dataset -d apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
レスポンス
{ "status": 0, "message": "ok", "dataset_id": "xxxxxxxxxxx", "dataset_url": "https://・・・" }
学習データをアップロードする
リクエスト
curl -D - -X PUT --upload-file /home/hoge/Book1.csv "https://・・・"
HTTP/1.1 200 OK が返ってきたら大丈夫でしょう。
API KEY は引数にいらないですね。
create_model でモデルを作ってもらう
ここで dataset_id を使います。
アップロードした学習データをもとに学習を開始させます。
レスポンスの model_id は後で必要なので控えておきます。
リクエスト
curl -X POST https://api.a3rt.recruit-tech.co.jp/text_classification/v1/model -d apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -d dataset_id=xxxxxxxxxxx
レスポンス
{ "status": 0, "message": ok, “model_id”: “xxxxxxxxxx” }
学習の進捗確認
数分など、若干時間がかかります。待ちましょう。
さっそくAPIを利用しようとしても、まだ学習中だとエラーになります。 {“status”: 1400, “message”: “bad request”}
進捗は check_status で確認できます
curl -X GET 'https://api.a3rt.recruit-tech.co.jp/text_classification/v1/check_status?apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&model_id=xxxxxxxxxx'
学習中だと以下のようになります。
{"status": 0, "message": "ok", "model_status": "running"}
学習が終わると以下のようになります。これで使えます。
{"status": 0, "message": "ok", "model_status": "finish"}
自作したモデルを使ってみる
これで自作したmodel_idで Text Classification API が使えます。
「誕生日プレゼントに間に合わせたいので112月12日までに届けてほしいです。」という文章がどういうカテゴリの文章か判別させます。
curl -X POST https://api.a3rt.recruit-tech.co.jp/text_classification/v1/classify -d apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -d model_id=default --data-urlencode text='誕生日プレゼントに間に合わせたいので112月12日までに届けてほしいです。'
結果。「急ぎ」の可能性が高いですね という感じです。
{ "status":0, "message":"ok", "classes":[ {"probability":0.989974,"label":"急ぎ"}, {"probability":0.0053176,"label":"怒り"}, {"probability":0.00325439,"label":"悲しみ"}, {"probability":0.00143723,"label":"喜び"}, {"probability":0.0000163314,"label":"確認"} ] }
コメント