LoginSignup
0
0
音声認識APIを使ってみよう!

[Google Cloud Speech-to-Text API(V2)] Javaで認識精度を向上させるフレーズセットを作成・更新・削除する

Last updated at Posted at 2024-05-14

Cloud Speech-to-Text API V2(Java)を使用して、
認識精度を向上させるフレーズセットを作成・更新・削除する方法についてご紹介します。

フレーズセット(PhraseSet)とは
フレーズセット(PhraseSet)はモデル適応機能を実現させるためのリソースの1つです。

モデル適応機能を使用すると提案される可能性がある他の候補よりも、
Speech-to-Textが特定の単語やフレーズをより高い頻度で認識するように設定できます。

フレーズセット(PhraseSet)リソースでは下記が設定できます。

できること 概要
単語とフレーズの認識精度を向上させる フレーズを指定することで、Speech-to-Text がその単語の並びを認識しやすくなります。
フレーズを提供することで、個々の単語を含むフレーズの一部を認識する確率も高まります。
クラストークンを使用して認識精度を向上させる 通貨単位やカレンダー日付など、自然言語で発生する一般的なコンセプトを表します。
クラスにより、共通のコンセプトに対応する大規模な単語グループの音声文字変換の精度を向上できます。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる
を参照ください。

No 目次
1 フレーズセットを作成
1 スコープ
2 実行
3 レスポンスの内容
2 フレーズセットを更新
1 スコープ
2 実行
3 レスポンスの内容
3 フレーズセットを削除
1 スコープ
2 実行
3 レスポンスの内容

1. フレーズセットを作成

フレーズセットを作成します。

1.1. スコープ

OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。

https://www.googleapis.com/auth/cloud-platform

1.2. 実行

フレーズセットIDには、これから作成するフレーズセットのIDを設定します。
既に存在するIDを指定した場合はエラーになります。

public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        Phrase.Builder phrase = Phrase.newBuilder();
        phrase.setValue("テスト");
        phrase.setBoost(20);
        
        PhraseSet.Builder phraseSet = PhraseSet.newBuilder();
        phraseSet.addPhrases(phrase.build());
        
        CreatePhraseSetRequest.Builder builder = CreatePhraseSetRequest.newBuilder();
        builder.setParent(String.format(
                "projects/%s/locations/%s", 
                "プロジェクトID","ロケーションID"));
        builder.setPhraseSetId("フレーズセットID");
        builder.setPhraseSet(phraseSet.build());
        builder.setValidateOnly(true);
        
        OperationFuture<PhraseSet,OperationMetadata> response = client.createPhraseSetAsync(builder.build());
        System.out.println(response.getName());

        PhraseSet set = response.get();
        System.out.println(set);
    }
}

1.2.1. HTTPリクエスト

POST: https://speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/customClasses
が実行されます。

1.2.2. クエリパラメータ

CreatePhraseSetRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでCreatePhraseSetRequestインスタンスを取得し、
createPhraseSetAsync()に渡します。

メソッド 引数 説明
setParent String 【必須】リソース名
形式:"projects/{プロジェクトID}/locations/{ロケーションID}"
setPhraseSetId String 【必須】フレーズセットID
setPhraseSet PhraseSet 【必須】フレーズセット
setValidateOnly boolean リクエストを検証してフレーズセットをプレビューするが実際には作成しないか

1.2.3. リクエストボディ

PhraseSet(Set)

メソッド 引数 説明
addPhrasesList Phrase 【必須】単語(フレーズ)またはクラストークンのリスト
setName String 【更新時のみ必須】更新するフレーズセット名
形式:"projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットID}"
setBoost float ヒントブースト(0〜20)
値が高いほど認識される確率が高くなる
setDisplayName String フレーズセットの名前(63文字まで)

Phrase(Set)

メソッド 引数 説明
setValue String 【必須】単語(フレーズ)、クラストークン
setBoost float 【必須】ヒントブースト(0〜20)
値が高いほど認識される確率が高くなる

State

定義値 内容
STATE_UNSPECIFIED 未指定
ACTIVE 通常のアクティブな状態
DELETED フレーズセットは削除された

クラストークン

Speech-to-Text がサポートしているクラストークンです。
ここでは日本語のみ(ja-JP)の一覧を表示しています。

他の言語は⧉サポートされるクラストークン(公式)を参照ください。

クラストークン 説明 音声のテキスト変換の例
$OOV_CLASS_AM_RADIO_FREQUENCY AMラジオの周波数 「せんにひゃくにじゅー」 = 1220
「いちにーにーぜろ」 = 1220
「いちにーにーれー」 = 1220
$OOV_CLASS_DIGIT_SEQUENCE 数字の列(任意の長さ) 「に」 = 2
「いちにさん」 = 123
「にににににに」 = 222222
$OOV_CLASS_FM_RADIO_FREQUENCY FMラジオの周波数 「きゅーじゅーてんご」 = 90.5
「ななじゅーななてんいち」 = 77.1
「ななじゅーしちてんいち」 = 77.1
$OOV_CLASS_TEMPERATURE 温度(度) 「いち」 = 1
「まいなすいち」 = -1
「ひくいち」 = -1
$ADDRESSNUM 住所の番地(対象の言語/地域で使用されるもの) 「いちのじゅーいちのにじゅーきゅー」 = 1-11-29
「にのじゅーごのにじゅーご」 = 2-15-25
「せんにひゃくはちじゅーごのさん」 = 1285-3
$FULLPHONENUM 電話番号(対象の言語/地域で使用されるもの) 「ぜろきゅーぜろいちにーさんよんごーろくななはち」 = 090-1234-5678
「ぜろいちにーさんいちにーさんよんごーろく」 = 0123-12-3456
「ぜろさんいちにーさんよんごーろくななはち」 = 03-1234-5678
$MONEY 金額(通貨単位名付き) 「きゅーせんえん」 = 9000円
「さんじゅーななどる」 = 37ドル
「いちまんはっせんはっぴゃくえん」 = 18800円
$OPERAND 数値(整数、分数、小数) 「れーてんいち」 = 0.1
「せんさんじゅーよんてんごーろくなな」 = 1034.567
「いちまん」= 1万
$PERCENT パーセント値(パーセント記号付き) 「れーてんぜろぱーせんと」 = 0.0%
「れーてんれーぱーせんと」 = 0.0%
「さんじゅーよんてんごーろくぱーせんと」 = 34.56%
$POSTALCODE 郵便番号(対象の言語/地域で使用されるもの) 「にーさんぜろにーさんぜろぜろ」 = 230-2300
「きゅーぜろぜろのきゅーぜろぜろぜろ」 = 900-9000
「さんぜろぜろななぜろにーぜろ」 = 300-7020
$TIME 時刻または時間 「にじゅーじさんじっぷん」 = 20時30分
「ごじ」 = 5時
「さんじゅーにふんご」 = 32分後

1.3. レスポンスの内容

OperationFuture<PhraseSet,OperationMetadata>

メソッド 戻り値 説明
getName String サーバーによって割り当てられた名前
形式:"projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットID}"
isDone boolean 操作がまだ進行中であるか
getPollingFuture RetryingFuture<OperationSnapshot> 失敗またはキャンセルされた場合の操作のエラー結果
get PhraseSet フレーズセットデータ
getMetadata ApiFuture<OperationMetadata> API実行のメタデータ

PhraseSet

メソッド 戻り値 説明
getName String フレーズセットのリソース名
形式:"projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットID}"
getUid String システムによって割り当てられたフレーズセットID
getPhrasesList List<Phrase> 単語とフレーズのリスト
getBoost float ヒントブースト(0〜20)
getDisplayName String フレーズセットの名前(63文字まで)
getState State(enum) フレーズセットのライフサイクル状態
getCreateTime Timestamp 作成時間
getUpdateTime Timestamp このリソースが最後に変更された時刻
getDeleteTime Timestamp このリソースの削除が要求された時刻
getExpireTime Timestamp このリソースがパージされる時刻
getEtag String チェックサム値
getReconciling boolean フレーズセットが更新中か
getKmsKeyName String フレーズセットの暗号化に使用されるKMSキーの名前
形式:"projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"
getKmsKeyVersionName String フレーズセットの暗号化に使用されるKMSキーのバージョン名
形式:"projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}/cryptoKeyVersions/{crypto_key_version}"

Phrase

メソッド 戻り値 説明
getValue String 単語(フレーズ)、クラストークン
getBoost float ヒントブースト(0〜20)
値が高いほど認識される確率が高くなる

OperationMetadata

メソッド 戻り値 説明
getCreateTime Timestamp オペレーションが作成された時刻
getUpdateTime Timestamp 操作が最後に更新された時刻
getResource String 操作のターゲットのリソースパス
getMethod String 操作をトリガーしたメソッド
getCreatePhraseSetRequest CreatePhraseSetRequest 【生成の場合】オペレーションで生成したフレーズセット
updatePhraseSetRequest UpdatePhraseSetRequest 【更新の場合】オペレーションで更新したフレーズセット
getDeletePhraseSetRequest DeletePhraseSetRequest 【削除の場合】オペレーションで削除したフレーズセット
getProgressPercent int オペレーションの進捗率(0〜100)

CreatePhraseSetRequest

メソッド 戻り値 説明
getPhraseSet PhraseSet 作成したフレーズセット
getValidateOnly boolean リクエストを検証してフレーズセットをプレビューするが実際には作成しないか
getPhraseSetId String フレーズセットID
getParent String フレーズセットが作成されるプロジェクトと場所
形式:"projects/{プロジェクトID}/locations/{ロケーションID}"

OperationSnapshot

メソッド 戻り値 説明
getErrorCode StatusCode エラーコード
getErrorMessage String 開発者向けのエラーメッセージ

2. フレーズセットを更新

指定したフレーズセットを更新します。

2.1. スコープ

OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。

https://www.googleapis.com/auth/cloud-platform

2.2. 実行

public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        Phrase.Builder phrase = Phrase.newBuilder();
        phrase.setValue("テスト");
        phrase.setBoost(20);
        
        PhraseSet.Builder phraseSet = PhraseSet.newBuilder();
        phraseSet.setName(String.format(
                "projects/%s/locations/%s/phraseSets/%s", 
                "プロジェクトID","ロケーションID","フレーズセットID"));
        phraseSet.addPhrases(phrase.build());

        UpdatePhraseSetRequest.Builder builder = UpdatePhraseSetRequest.newBuilder();
        builder.setPhraseSet(phraseSet.build());
        
        OperationFuture<PhraseSet,OperationMetadata> response = client.updatePhraseSetAsync(builder.build());
        System.out.println(response.getName());
        
        PhraseSet set = response.get();
        System.out.println(set);
    }
}

2.2.1. HTTPリクエスト

PATCH: https://speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットID}
が実行されます。

2.2.2. クエリパラメータ

クエリパラメータはありません。

2.2.3. リクエストボディ

UpdatePhraseSetRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでUpdatePhraseSetRequestインスタンスを取得し、
updatePhraseSetAsync()に渡します。

メソッド 引数 説明
setPhraseSet PhraseSet 【必須】フレーズセット
setUpdateMask FieldMask 更新するフィールド
未設定の場合は全てのフィールドが更新対象
setValidateOnly boolean リクエストを検証し、更新されたフレーズセットをプレビューするが実際には更新しないか

2.3. レスポンスの内容

OperationFuture<PhraseSet,OperationMetadata>

1.3. レスポンスの内容と同じです。

UpdatePhraseSetRequest

メソッド 戻り値 説明
getPhraseSet PhraseSet 更新するフレーズセット
getUpdateMask FieldMask 更新するフィールドのリスト
getValidateOnly boolean リクエストを検証し、更新されたPhraseSetをプレビューするが実際には更新しないか

3. フレーズセットを削除

指定したフレーズセットを削除します。

3.1. スコープ

OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。

https://www.googleapis.com/auth/cloud-platform

3.2. 実行

public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        DeletePhraseSetRequest.Builder builder = DeletePhraseSetRequest.newBuilder();
        builder.setName(String.format(
                "projects/%s/locations/%s/phraseSets/%s", 
                "プロジェクトID","ロケーションID","フレーズセットID"));
        
        OperationFuture<PhraseSet,OperationMetadata> response = client.deletePhraseSetAsync(builder.build());
        System.out.println(response.getName());

        PhraseSet set = response.get();
        System.out.println(set);
    }
}

3.2.1. HTTPリクエスト

DELETE: https://speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットD}
が実行されます。

3.2.2. クエリパラメータ

DeletePhraseSetRequest.Builderのsetメソッドにより、クエリパラメータを追加できます。
build()メソッドでDeletePhraseSetRequestインスタンスを取得し、
deletePhraseSetAsync()に渡します。

メソッド 引数 説明
setValidateOnly boolean リクエストを検証し、削除されたフレーズセットをプレビューするが実際には削除しないか
setAllowMissing boolean フレーズセットが見つからない場合、リクエストは成功し操作は行わないか
setEtag String チェックサム値

3.2.3. リクエストボディ

リクエストボディはありません。

3.3. レスポンスの内容

OperationFuture<PhraseSet,OperationMetadata>

1.3. レスポンスの内容と同じです。

DeletePhraseSetRequest

メソッド 戻り値 説明
getName String 削除するフレーズセットの名前
形式:"projects/{プロジェクトID}/locations/{ロケーションID}/phraseSets/{フレーズセットID}"
getValidateOnly boolean リクエストを検証して削除されたフレーズセットをプレビューするが実際には削除しないか
getAllowMissing boolean フレーズセットが見つからない場合、リクエストは成功しても操作は行わないか
getEtag String チェックサム値


おしまい。。
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