LoginSignup
0
0

More than 1 year has passed since last update.

Watson NLU で 機械学習ベースの分類器を作成・利用してみる (Java)

Last updated at Posted at 2022-07-02

セットアップ

Watson API 呼び出し用に用意されているライブラリを利用します。

pom.xml
<!-- https://mvnrepository.com/artifact/com.ibm.watson/natural-language-understanding -->
<dependency>
	<groupId>com.ibm.watson</groupId>
	<artifactId>natural-language-understanding</artifactId>
	<version>10.0.0</version>
</dependency>

モデル作成用CSVファイルを用意する

以下のようなCSVファイルを用意します。UTF-8で作成します。BOM付でも問題無いようです。
1列目が例文で2列目が分類したいカテゴリです。例文は適宜用意してください。

テキスト1-1,CATEGORY1
テキスト1-2,CATEGORY1
テキスト1-3,CATEGORY1
テキスト1-4,CATEGORY1
テキスト1-5,CATEGORY1
テキスト1-6,CATEGORY1
テキスト1-7,CATEGORY1
テキスト1-8,CATEGORY1
テキスト1-9,CATEGORY1
テキスト2-1,CATEGORY2
テキスト2-2,CATEGORY2
テキスト2-3,CATEGORY2
テキスト2-4,CATEGORY2
テキスト2-5,CATEGORY2
テキスト2-6,CATEGORY2
テキスト2-7,CATEGORY2
テキスト2-8,CATEGORY2
テキスト2-9,CATEGORY2
テキスト2-10,CATEGORY2

モデルの作成

Watson NLU の管理コンソールからAPI KEYを取得しておきます。
以下サンプルでは Config.API_KEY1 にセットしてあります。
また、APIをコールするエンドポイントのURLも管理コンソールで取得しておきます。
以下サンプルでは Config.URL_NLU1 にセットしてあります。

package nlu;
import java.io.File;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsModel;
import com.ibm.watson.natural_language_understanding.v1.model.CreateClassificationsModelOptions;
/**
 * https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#createclassificationsmodel
 */
public class P001CreateModel {
	public static void main(String[] args) throws Exception {
		@SuppressWarnings("deprecation")
		IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
		NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
				"2022-04-07", authenticator);
		naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
		File trainingData = new File("data/classification/model_q1.csv");
		CreateClassificationsModelOptions op = new CreateClassificationsModelOptions.Builder() //
				.description("This is test") //
				.language("ja") //
				.modelVersion("1.0.1") //
				.name("test name") //
				.trainingData(trainingData) //
				.versionDescription("test versionDescription") //
				.trainingDataContentType("text/csv") //
				.build();
		ClassificationsModel res = naturalLanguageUnderstanding
				.createClassificationsModel(op).execute().getResult();
		System.err.println(res);
	}
}

モデルの一覧を取得する

作成した分類モデルの一覧や、ステータスを確認できます。
「モデルID」を取得することができるので控えておきます。

package nlu;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsModelList;
/**
 * https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#listclassificationsmodels
 */
public class P002ListModels {
	public static void main(String[] args) throws Exception {
		@SuppressWarnings("deprecation")
		IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
		NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
				"2022-04-07", authenticator);
		naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
		ClassificationsModelList res = naturalLanguageUnderstanding
				.listClassificationsModels().execute().getResult();
		System.err.println(res);
	}
}

モデルを利用してテキストの分類を行う

package nlu;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.AnalysisResults;
import com.ibm.watson.natural_language_understanding.v1.model.AnalyzeOptions;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsOptions;
import com.ibm.watson.natural_language_understanding.v1.model.Features;
/**
 * https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#analyze
 */
public class P004Classification {
	public static void main(String[] args) throws Exception {
		@SuppressWarnings("deprecation")
		IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
		NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
				"2022-04-07", authenticator);
		naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
		String model = "XXX";
		String text = "{分類したいテキスト}";
		ClassificationsOptions op = new ClassificationsOptions.Builder() //
				.model(model) //
				.build();
		Features features = new Features.Builder() //
				.classifications(op) //
				.build();
		AnalyzeOptions parameters = new AnalyzeOptions.Builder().text(text)
				.features(features).build();
		AnalysisResults response = naturalLanguageUnderstanding
				.analyze(parameters).execute().getResult();
		System.out.println("Input : " + text);
		System.out.println("Output: ");
		System.out.println(response);
	}
}

以上。

(APIレスポンスの例は後日追加予定です。。)

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0