使用 ML.TRANSCRIBE 函数转写音频文件

本文档介绍如何使用 ML.TRANSCRIBE 函数以及远程模型转写对象表中的音频文件。

支持的位置

您必须在以下某个位置创建此过程中使用的远程模型:

  • asia-northeast1
  • asia-south1
  • asia-southeast1
  • australia-southeast1
  • eu
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • northamerica-northeast1
  • us
  • us-central1
  • us-east1
  • us-east4
  • us-west1

您必须在远程模型所在的区域中运行 ML.TRANSCRIBE 函数。

所需权限

  • 如需使用 Speech-to-Text 识别器,您需要以下角色:

    • speech.recognizers.create
    • speech.recognizers.get
    • speech.recognizers.recognize
    • speech.recognizers.update
  • 如需创建连接,您需要拥有以下角色的成员资格:

    • roles/bigquery.connectionAdmin
  • 如需使用 BigQuery ML 创建模型,您需要以下权限:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • 如需运行推理,您需要以下权限:

    • 对象表的 bigquery.tables.getData 权限
    • 模型的 bigquery.models.getData 权限
    • bigquery.jobs.create

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, and Speech-to-Text APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, and Speech-to-Text APIs.

    Enable the APIs

创建识别器

Speech-to-Text 支持称为识别器的资源。识别器代表存储的和可重复使用的识别配置。您可以创建识别器,以便对应用的转写或流量进行逻辑分组。

创建语音识别器是可选操作。如果您选择创建语音识别器,请记下识别器的项目 ID、位置和识别器 ID,以便在 CREATE MODEL 语句中使用,如 SPEECH_RECOGNIZER 中所述。如果您选择不创建语音识别器,则必须为 ML.TRANSCRIBE 函数的 recognition_config 参数指定值。

创建连接

创建 Cloud 资源连接并获取连接的服务账号。

从下列选项中选择一项:

控制台

  1. 转到 BigQuery 页面。

    转到 BigQuery

  2. 如需创建连接,请点击 添加,然后点击与外部数据源的连接

  3. 连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)

  4. 连接 ID 字段中,输入连接的名称。

  5. 点击创建连接

  6. 点击转到连接

  7. 连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。

bq

  1. 在命令行环境中,创建连接:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    --project_id 参数会替换默认项目。

    替换以下内容:

    • REGION:您的连接区域
    • PROJECT_ID:您的 Google Cloud 项目 ID
    • CONNECTION_ID:您的连接的 ID

    当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。

    问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 检索并复制服务账号 ID 以在后续步骤中使用:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    输出类似于以下内容:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

将以下部分附加到 main.tf 文件中。

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
替换以下内容:

  • CONNECTION_ID:您的连接的 ID
  • PROJECT_ID:您的 Google Cloud 项目 ID
  • REGION:您的连接区域

向服务账号授予访问权限

从下列选项中选择一项:

控制台

  1. 前往 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击 授予访问权限

    系统随即会打开添加主账号对话框。

  3. 新的主账号字段中,输入您之前复制的服务账号 ID。

  4. 点击选择角色字段,然后在过滤条件中输入 Cloud Speech Client

  5. 点击添加其他角色

  6. 选择角色字段中,选择 Cloud Storage,然后选择 Storage Object Viewer

  7. 点击保存

gcloud

使用 gcloud projects add-iam-policy-binding 命令

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/speech.client' --condition=None
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None

替换以下内容:

  • PROJECT_NUMBER:您的项目编号。
  • MEMBER:您之前复制的服务账号 ID。

未能授予权限会导致 Permission denied 错误。

创建数据集

创建数据集以包含模型和对象表。

创建对象表

针对 Cloud Storage 中的一组音频文件创建对象表。对象表中的音频文件必须是受支持的类型

对象表使用的 Cloud Storage 存储桶应位于您计划创建模型并调用 ML.TRANSCRIBE 函数所在的项目中。如果您要在不同于对象表使用的 Cloud Storage 存储桶所在的项目中调用 ML.TRANSCRIBE 函数,您必须在存储桶级层将 Storage Admin 角色授予 service-A@gcp-sa-aiplatform.iam.gserviceaccount.com 服务账号。

创建模型

使用 CLOUD_AI_SPEECH_TO_TEXT_V2 这一 REMOTE_SERVICE_TYPE 创建远程模型:

CREATE OR REPLACE MODEL
`PROJECT_ID.DATASET_ID.MODEL_NAME`
REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  REMOTE_SERVICE_TYPE = 'CLOUD_AI_SPEECH_TO_TEXT_V2',
  SPEECH_RECOGNIZER = 'projects/PROJECT_NUMBER/locations/LOCATION/recognizers/RECOGNIZER_ID'
);

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • REGION:连接使用的区域。
  • CONNECTION_ID:连接 ID,例如 myconnection

    当您在 Google Cloud 控制台中查看连接详情时,连接 ID 是连接 ID 中显示的完全限定连接 ID 的最后一部分中的值,例如 projects/myproject/locations/connection_location/connections/myconnection

  • PROJECT_NUMBER:包含语音识别器的项目的编号。您可以在 Google Cloud 控制台信息中心页面上的项目信息卡片上找到此值。
  • LOCATION:语音识别器使用的位置。您可以在 Google Cloud 控制台列表识别器页面上的位置字段中找到此值。
  • RECOGNIZER_ID:语音识别器 ID。您可以在 Google Cloud 控制台列表识别器页面上的 ID 字段中找到此值。

转写音频文件

使用 ML.TRANSCRIBE 函数转写音频文件:

SELECT *
FROM ML.TRANSCRIBE(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE `PROJECT_ID.DATASET_ID.OBJECT_TABLE_NAME`,
  RECOGNITION_CONFIG => ( JSON 'recognition_config')
);

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • OBJECT_TABLE_NAME:包含待处理音频文件 URI 的对象表的名称。
  • recognition_config:JSON 格式的 RecognitionConfig 资源

    如果您为远程模型 SPEECH_RECOGNIZER 选项指定了识别器,则可以视情况指定 recognition_config 值以替换指定识别器的默认配置。

    如果您没有为远程模型指定识别器,则必须指定此参数。

示例

示例 1

以下示例转写 audio 表表示的音频文件,而不替换识别器的默认配置:

SELECT *
FROM ML.TRANSCRIBE(
  MODEL `myproject.mydataset.transcribe_model`,
  TABLE `myproject.mydataset.audio`
);

以下示例转写 audio 表表示的音频文件,并替换识别器的默认配置:

SELECT *
FROM ML.TRANSCRIBE(
  MODEL `myproject.mydataset.transcribe_model`,
  TABLE `myproject.mydataset.audio`,
  recognition_config => ( JSON '{"language_codes": ["en-US" ],"model": "telephony","auto_decoding_config": {}}')
);

后续步骤