SOFTELメモ

</> 技術者募集

AI 人工知能で文章の意味を判別する(A3RT)

問題

人工知能の使いどころってどこでしょうね?

日本語の文章の意味を判別させるなどできますか?

答え

基本的によくある機械学習では、学習させて → 使う、の流れです。

今回は A3RT の Text Classification API でモデルを自作して使うのをやってみます。

A3RT

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":"確認"}
	]
}

関連するメモ

コメント