Chirp 2:提高了多语言准确性

Chirp 2 是 Google 最新一代专用于多语言 ASR 的模型,旨在根据反馈和经验来满足用户需求。它在准确性和速度方面优于原始 Chirp 模型,并扩展了字词级时间戳、模型自适应和语音翻译等关键新功能。

试用 Colab 笔记本 在 GitHub 上查看笔记本

模型详情

Chirp 2 仅在 Speech-to-Text API V2 中提供。

模型标识符

您可以像使用任何其他模型一样使用 Chirp 2,只需在使用 API 时在识别请求中指定适当的模型标识符,或在 Google Cloud 控制台中指定模型名称即可。

模型 型号标识符
Chirp 2 chirp_2

API 方法

由于 Chirp 2 仅在 Speech-to-Text API V2 中提供,因此它支持以下识别方法:

模型 型号标识符 语言支持
V2 Speech.StreamingRecognize(非常适合在线播放和实时音频) 受限*
V2 Speech.Recognize(非常适合短于 1 分钟的短音频) 与 Chirp 相当
V2 Speech.BatchRecognize(适合 1 分钟到 8 小时的长音频) 与 Chirp 相当

*您可以随时使用 Locations API 查找每个转写模型支持的最新语言和功能列表。

区域可用性

Chirp 2 在以下区域受支持:

Google Cloud 可用区 发布就绪情况
us-central1 GA
europe-west4 GA
asia-southeast1 非公开预览版

您可以随时使用 Locations API(如本文所述)查找每个转写模型的最新支持的 Google Cloud 区域、语言和功能列表

转写功能支持的语言

Chirp 2 支持使用 StreamingRecognizeRecognizeBatchRecognize 识别方法进行转写。不过,语言支持因所用方法而异。具体而言,BatchRecognize 提供最广泛的语言支持StreamingRecognize 支持以下语言:

语言 BCP-47 代码
简体中文(中国) cmn-Hans-CN
中文(台湾繁体) cmn-hant-tw
中文粤语(香港繁体) yue-Hant-HK
英语(澳大利亚) en-AU
英语(印度) en-IN
英语(英国) en-GB
英语(美国) en-US
法语(加拿大) fr-CA
法语(法国) fr-FR
德语(德国) de-DE
意大利语(意大利) it-IT
日语(日本) ja-JP
葡萄牙语(巴西) pt-BR
西班牙语(西班牙) es-ES
西班牙语(美国) es-US

支持翻译的语言

以下是语音翻译支持的语言。请注意,Chirp 2 对翻译的语言支持不对称。这意味着,虽然我们或许可以从语言 A 翻译成语言 B,但可能无法从语言 B 翻译成语言 A。语音翻译支持以下语言对。

如需翻译成英语,请执行以下操作:

源语言 -> 目标语言 来源 -> 目标语言代码
阿拉伯语(埃及)-> 英语 ar-EG -> en-US
阿拉伯语(海湾)-> 英语 ar-x-gulf -> en-US
阿拉伯语(黎凡特)-> 英语 ar-x-levant -> en-US
阿拉伯语(马格里布)-> 英语 ar-x-maghrebi -> en-US
加泰罗尼亚语(西班牙)-> 英语 ca-ES -> en-US
威尔士语(英国)-> 英语 cy-GB -> en-US
德语(德国)-> 英语 de-DE -> en-US
西班牙语(拉丁美洲)-> 英语 es-419 -> en-US
西班牙语(西班牙)-> 英语 es-ES -> en-US
西班牙语(美国)-> 英语 es-US -> en-US
爱沙尼亚语(爱沙尼亚)-> 英语 et-EE -> en-US
法语(加拿大)-> 英语 fr-CA -> en-US
法语(法国)-> 英语 fr-FR -> en-US
波斯语(伊朗)-> 英语 fa-IR -> en-US
印度尼西亚语(印度尼西亚)-> 英语 id-ID -> en-US
意大利语(意大利)-> 英语 it-IT -> en-US
日语(日本)-> 英语 ja-JP -> en-US
拉脱维亚语(拉脱维亚)-> 英语 lv-LV -> en-US
蒙古语(蒙古)-> 英语 mn-MN -> en-US
荷兰语(荷兰)-> 英语 nl-NL -> en-US
葡萄牙语(巴西)-> 英语 pt-BR -> en-US
俄语(俄罗斯)-> 英语 ru-RU -> en-US
斯洛文尼亚语(斯洛文尼亚)-> 英语 sl-SI -> en-US
瑞典语(瑞典)-> 英语 sv-SE -> en-US
泰米尔语(印度)-> 英语 ta-IN -> en-US
土耳其语(土耳其)-> 英语 tr-TR -> en-US
简体中文(中国)-> 英语 zh-Hans-CN -> en-US

如需从英语翻译,请执行以下操作:

源语言 -> 目标语言 来源 -> 目标语言代码
英语 -> 阿拉伯语(埃及) en-US -> ar-EG
英语 -> 阿拉伯语(海湾) en-US -> ar-x-gulf
英语 -> 阿拉伯语(黎凡特) en-US -> ar-x-levant
英语 -> 阿拉伯语(马格里布) en-US -> ar-x-maghrebi
英语 -> 加泰罗尼亚语(西班牙) en-US -> ca-ES
英语 -> 威尔士语(英国) en-US -> cy-GB
英语 -> 德语(德国) en-US -> de-DE
英语 -> 爱沙尼亚语(爱沙尼亚) en-US -> et-EE
英语 -> 波斯语(伊朗) en-US -> fa-IR
英语 -> 印度尼西亚语(印度尼西亚) en-US -> id-ID
英语 -> 日语(日本) en-US -> ja-JP
英语 -> 拉脱维亚语(拉脱维亚) en-US -> lv-LV
英语 -> 蒙古语(蒙古) en-US -> mn-MN
英语 -> 斯洛文尼亚语(斯洛文尼亚) en-US -> sl-SI
英语 -> 瑞典语(瑞典) en-US -> sv-SE
英语 -> 泰米尔语(印度) en-US -> ta-IN
英语 -> 土耳其语(土耳其) en-US -> tr-TR
英语 -> 简体中文(中国) en-US -> zh-Hans-CN

功能支持和限制

Chirp 2 支持以下功能:

功能 说明
自动加注标点符号 由模型自动生成,可选择停用。
自动大写 由模型自动生成,可选择停用。
语音自适应(偏向) 以简单的字词或短语的形式向模型提供提示,以提高对特定术语或专有名词的识别准确性。不支持类令牌或自定义类。
字词时间戳 由模型自动生成,可选择启用。转写质量和速度可能会略有下降。
与语言无关的音频转写 模型会自动推断出音频文件中的口语,并以最常用的语言进行转写。
特定语言的翻译 该模型会自动从所说语言翻译成目标语言。
强制标准化 如果在请求正文中定义了替换项,该 API 将对特定字词或短语执行字符串替换,以确保转写内容的一致性。
字词级置信度分数 API 会返回一个值,但这不是真正的置信度分数。如果要训练翻译模型,则不会返回置信度得分。

Chirp 2 不支持以下功能:

功能 说明
对话框 不支持
语言检测 不支持
脏话过滤器 不支持

使用 Chirp 2 转写

了解如何使用 Chirp 2 满足您的转写和翻译需求。

执行流式语音识别

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_streaming_chirp2(
    audio_file: str
) -> cloud_speech.StreamingRecognizeResponse:
    """Transcribes audio from audio file stream using the Chirp 2 model of Google Cloud Speech-to-Text V2 API.

    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"

    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API V2 containing
        the transcription results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        content = f.read()

    # In practice, stream should be a generator yielding chunks of audio data
    chunk_length = len(content) // 5
    stream = [
        content[start : start + chunk_length]
        for start in range(0, len(content), chunk_length)
    ]
    audio_requests = (
        cloud_speech.StreamingRecognizeRequest(audio=audio) for audio in stream
    )

    recognition_config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["en-US"],
        model="chirp_2",
    )
    streaming_config = cloud_speech.StreamingRecognitionConfig(
        config=recognition_config
    )
    config_request = cloud_speech.StreamingRecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        streaming_config=streaming_config,
    )

    def requests(config: cloud_speech.RecognitionConfig, audio: list) -> list:
        yield config
        yield from audio

    # Transcribes the audio into text
    responses_iterator = client.streaming_recognize(
        requests=requests(config_request, audio_requests)
    )
    responses = []
    for response in responses_iterator:
        responses.append(response)
        for result in response.results:
            print(f"Transcript: {result.alternatives[0].transcript}")

    return responses

执行同步语音识别

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_sync_chirp2(
    audio_file: str
) -> cloud_speech.RecognizeResponse:
    """Transcribes an audio file using the Chirp 2 model of Google Cloud Speech-to-Text V2 API.
    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the transcription results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        audio_content = f.read()

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["en-US"],
        model="chirp_2",
    )

    request = cloud_speech.RecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        content=audio_content,
    )

    # Transcribes the audio into text
    response = client.recognize(request=request)

    for result in response.results:
        print(f"Transcript: {result.alternatives[0].transcript}")

    return response

执行批量语音识别

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_batch_chirp2(
    audio_uri: str,
) -> cloud_speech.BatchRecognizeResults:
    """Transcribes an audio file from a Google Cloud Storage URI using the Chirp 2 model of Google Cloud Speech-to-Text V2 API.
    Args:
        audio_uri (str): The Google Cloud Storage URI of the input audio file.
            E.g., gs://[BUCKET]/[FILE]
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the transcription results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["en-US"],
        model="chirp_2",
    )

    file_metadata = cloud_speech.BatchRecognizeFileMetadata(uri=audio_uri)

    request = cloud_speech.BatchRecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        files=[file_metadata],
        recognition_output_config=cloud_speech.RecognitionOutputConfig(
            inline_response_config=cloud_speech.InlineOutputConfig(),
        ),
    )

    # Transcribes the audio into text
    operation = client.batch_recognize(request=request)

    print("Waiting for operation to complete...")
    response = operation.result(timeout=120)

    for result in response.results[audio_uri].transcript.results:
        print(f"Transcript: {result.alternatives[0].transcript}")

    return response.results[audio_uri].transcript

使用 Chirp 2 功能

通过代码示例探索如何使用最新功能:

执行与语言无关的转写

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_sync_chirp2_auto_detect_language(
    audio_file: str
) -> cloud_speech.RecognizeResponse:
    """Transcribes an audio file and auto-detect spoken language using Chirp 2.
    Please see https://cloud.google.com/speech-to-text/v2/docs/encoding for more
    information on which audio encodings are supported.
    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the transcription results.
    """
    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        audio_content = f.read()

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["auto"],  # Set language code to auto to detect language.
        model="chirp_2",
    )

    request = cloud_speech.RecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        content=audio_content,
    )

    # Transcribes the audio into text
    response = client.recognize(request=request)

    for result in response.results:
        print(f"Transcript: {result.alternatives[0].transcript}")
        print(f"Detected Language: {result.language_code}")

    return response

执行语音翻译

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def translate_sync_chirp2(
    audio_file: str
) -> cloud_speech.RecognizeResponse:
    """Translates an audio file using Chirp 2.
    Args:
        audio_file (str): Path to the local audio file to be translated.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the translated results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        audio_content = f.read()

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["fr-FR"],  # Set language code to targeted to detect language.
        translation_config=cloud_speech.TranslationConfig(target_language="fr-FR"), # Set target language code.
        model="chirp_2",
    )

    request = cloud_speech.RecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        content=audio_content,
    )

    # Transcribes the audio into text
    response = client.recognize(request=request)

    for result in response.results:
        print(f"Translated transcript: {result.alternatives[0].transcript}")

    return response

启用字词级时间戳

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_sync_chirp2_with_timestamps(
    audio_file: str
) -> cloud_speech.RecognizeResponse:
    """Transcribes an audio file using the Chirp 2 model of Google Cloud Speech-to-Text V2 API, providing word-level timestamps for each transcribed word. 
    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the transcription results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        audio_content = f.read()

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["en-US"],
        model="chirp_2",
        features=cloud_speech.RecognitionFeatures(
            enable_word_time_offsets=True, # Enabling word-level timestamps
        )
    )

    request = cloud_speech.RecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        content=audio_content,
    )

    # Transcribes the audio into text
    response = client.recognize(request=request)

    for result in response.results:
        print(f"Transcript: {result.alternatives[0].transcript}")

    return response

使用模型自适应功能提高准确性

import os

from google.cloud.speech_v2 import SpeechClient
from google.cloud.speech_v2.types import cloud_speech
from google.api_core.client_options import ClientOptions

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")

def transcribe_sync_chirp2_model_adaptation(
    audio_file: str
) -> cloud_speech.RecognizeResponse:
    """Transcribes an audio file using the Chirp 2 model with adaptation, improving accuracy for specific audio characteristics or vocabulary.
    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response from the Speech-to-Text API containing
        the transcription results.
    """

    # Instantiates a client
    client = SpeechClient(
        client_options=ClientOptions(
            api_endpoint="us-central1-speech.googleapis.com",
        )
    )

    # Reads a file as bytes
    with open(audio_file, "rb") as f:
        audio_content = f.read()

    config = cloud_speech.RecognitionConfig(
        auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
        language_codes=["en-US"],
        model="chirp_2",
        # Use model adaptation
        adaptation=cloud_speech.SpeechAdaptation(
          phrase_sets=[
              cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                  inline_phrase_set=cloud_speech.PhraseSet(phrases=[
                    {
                        "value": "alphabet",
                    },
                    {
                          "value": "cell phone service",
                    }
                  ])
              )
          ]
        )
    )

    request = cloud_speech.RecognizeRequest(
        recognizer=f"projects/{PROJECT_ID}/locations/us-central1/recognizers/_",
        config=config,
        content=audio_content,
    )

    # Transcribes the audio into text
    response = client.recognize(request=request)

    for result in response.results:
        print(f"Transcript: {result.alternatives[0].transcript}")

    return response

在 Google Cloud 控制台中使用 Chirp 2

  1. 确保您已注册 Google Cloud 账号并创建项目。
  2. 前往 Google Cloud 控制台中的语音
  3. 启用 API(如果尚未启用)。
  4. 确保您拥有 STT 控制台工作区。如果您还没有工作区,则需要创建一个工作区。

    1. 访问“转写”页面,然后点击新建转写

    2. 打开工作区下拉菜单,然后点击新建工作区以创建用于转写的工作区。

    3. 创建新工作区导航边栏中,点击浏览

    4. 点击以创建新的存储桶。

    5. 输入存储桶的名称,然后点击继续

    6. 点击创建以创建您的 Cloud Storage 存储桶。

    7. 创建存储桶后,点击选择以选择要使用的存储桶。

    8. 点击创建以完成为 Speech-to-Text API V2 控制台创建工作区的过程。

  5. 对实际音频执行转写。

    Speech-to-text 转写创建页面屏幕截图,其中显示了文件选择或上传。

    新建转写页面中,通过上传(本地上传)或指定现有的 Cloud Storage 文件(云端存储空间)来选择音频文件。

  6. 点击继续以转到“转写”选项

    Speech-to-Text 转写创建页面的屏幕截图,其中显示选择 Chirp 模型并提交转写作业。
    1. 从您之前创建的识别器中选择您计划用于使用 Chirp 进行识别的口语

    2. 在模型下拉列表中,选择 Chirp - 通用语音模型

    3. 识别器下拉列表中,选择新创建的识别器。

    4. 点击提交,使用 Chirp 运行您的第一个识别请求。

  7. 查看您的 Chirp 2 转写结果。

    1. 转写页面中,点击转写名称以查看其结果。

    2. 转写详情页面中,查看转写结果,并酌情在浏览器中播放音频。

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

    gcloud auth application-default revoke
  2. Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

控制台

  • In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  • In the project list, select the project that you want to delete, and then click Delete.
  • In the dialog, type the project ID, and then click Shut down to delete the project.
  • gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    后续步骤