IBM Cloud Docs
创建定制声学模型

创建定制声学模型

声学模型定制仅可用于先前生成的模型。 它不可用于下一代和大型语音模型。

执行以下步骤为 IBM Watson® Speech to Text 服务创建定制声学模型:

  1. 创建定制声学模型。 可以针对相同或不同的域或环境创建多个定制模型。 对于创建的任何模型,此过程都是相同的。 声学模型定制可用于先前生成模型支持的所有语言。 有关一般可用的语言和 Beta 的更多信息,请参阅 用于定制的语言支持

  2. 向定制声学模型添加音频。 服务针对声学建模所接受的音频文件格式与针对语音识别所接受的格式相同。 此外,服务还接受包含多个音频文件的归档文件。 归档文件是添加音频资源的首选方法。 可以重复此方法向定制模型添加更多音频或归档文件。

  3. 训练定制声学模型。 将音频资源添加到定制模型后,必须对该模型进行训练。 通过训练,可准备定制声学模型以用于语音识别。 训练时间取决于模型包含的累计音频数据量。

    您可以在训练定制声学模型期间指定用于帮助的定制语言模型。 包含音频文件转录或音频文件域中 OOV 词的定制语言模型可以提高定制声学模型的质量。 有关更多信息,请参阅使用定制语言模型训练定制声学模型

  4. 训练定制模型后,可以将其用于识别请求。 如果传递要转录的音频的声学质量与定制模型的音频类似,那么结果会反映为服务的理解能力增强。 在语音识别请求中一次只能使用一个定制声学模型。 有关更多信息,请参阅 使用定制声学模型进行语音识别

    可以在同一识别请求中同时传递定制声学模型和定制语言模型,以进一步提高识别准确性。 更多信息,请参阅 使用自定义语言和自定义声学模型进行语音识别

创建定制声学模型的步骤是迭代的。 您可以根据需要,随时添加或删除音频并重新训练模型。 如果对模型的音频进行了任何更改,那么必须重新训练该模型才能使更改生效。

创建定制声学模型

使用 POST /v1/acoustic_customizations 方法来创建新的定制声学模型。 此方法接受用于定义新定制模型属性的 JSON 对象作为请求主体。 拥有新定制模型的服务实例是其凭证用于创建该模型的实例。 有关更多信息,请参阅定制模型的所有权

对于每个拥有凭证,最多可以创建 1024 个定制声学模型。 有关更多信息,请参阅最大定制模型数

新的定制声学模型具有以下属性:

name (必需 字符串)
新定制声学模型的用户定义名称。 使用与定制模型的语言匹配的本地化名称,并反映模型的声学环境,例如 Mobile custom modelNoisy car custom model
  • 名称最多包含256个字符。
  • Do not use backslashes, slashes, colons, equal signs, ampersands, or question marks in the name.
  • 使用的名称应在您拥有的所有定制声学模型中唯一。
base_model_name (必需 字符串)
新车型定制的基准车型名称。 必须使用由 GET /v1/models 方法返回的模型的名称。 新的定制模型只能用于它所定制的基本模型。
description (可选 字符串)
推荐的新定制车型描述。
  • 请使用与定制模型的语言相匹配的本地化描述。
  • 描述中最多包含128个字符。

以下示例创建名为 Example acoustic model 的新定制声学模型。 此模型创建用于基本模型 en-US_BroadbandModel,并且描述为 Example custom acoustic modelContent-Type 头指定要将 JSON 数据传递到此方法。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--data "{\"name\": \"Example acoustic model\", \
  \"base_model_name\": \"en-US_BroadbandModel\", \
  \"description\": \"Example custom acoustic model\"}" \
"{url}/v1/acoustic_customizations"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--data "{\"name\": \"Example acoustic model\", \
  \"base_model_name\": \"en-US_BroadbandModel\", \
  \"description\": \"Example custom acoustic model\"}" \
"{url}/v1/acoustic_customizations"

该示例将返回新模型的定制标识。 每个定制模型都通过唯一的定制标识进行标识,这是全局唯一标识 (GUID)。 使用与模型关联的调用的 customization_id 参数可指定定制模型的 GUID。

{
  "customization_id": "74f4807e-b5ff-4866-824e-6bba1a84fe96"
}

向定制声学模型添加音频

创建定制声学模型后,下一步是向其添加音频资源。 使用 POST /v1/acoustic_customizations/{customization_id}/audio/{audio_name} 方法来向定制模型添加音频资源。 可以添加

  • 语音识别支持的任何格式的单个音频文件。 有关更多信息,请参阅 支持的音频格式
  • 包含多个音频文件的档案文件( .zip.tar.gz 文件)。 将多个音频文件收集到单个归档文件中并装入该单个文件要比逐个添加音频文件高效得多。

可将音频资源作为请求主体传递,并为资源分配 audio_name。 有关更多信息,请参阅使用音频资源

以下示例说明了音频类型和归档类型资源的添加操作:

  • 此示例向具有指定 customization_id 的定制声学模型添加音频类型资源。 Content-Type 头将音频类型标识为 audio/wav。 音频文件 audio1.wav 作为请求正文传递,资源名称为 audio1

    IBM Cloud

    curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: audio/wav" \
    --data-binary @audio1.wav \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio1"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X POST \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: audio/wav" \
    --data-binary @audio1.wav \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio1"
    
  • 此示例向指定的定制声学模型添加归档类型资源。 Content-Type 头将归档类型标识为 application/zipContained-Contented-Type 头指示归档中包含的所有文件的格式均为 audio/l16,采样率为 16 千赫兹。 存档文件 audio2.zip 作为请求正文传递,资源名称为 audio2

    IBM Cloud

    curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: application/zip" \
    --header "Contained-Content-Type: audio/l16;rate=16000" \
    --data-binary @audio2.zip \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio2"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X POST \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/zip" \
    --header "Contained-Content-Type: audio/l16;rate=16000" \
    --data-binary @audio2.zip \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio2"
    

此方法还接受可选的 allow_overwrite 查询参数,用于覆盖定制模型的现有音频资源。 如果在将音频资源添加到模型后需要更新该资源,请使用该参数。

这是异步方法。 根据音频的持续时间,可能需要几秒钟或几分钟才能完成。 对于归档文件,操作的长度取决于归档中包含的所有音频文件的持续时间。 操作的持续时间还取决于服务上的当前负载。 有关检查用于添加音频资源的请求的状态的更多信息,请参阅监视添加音频请求

通过对每个音频或归档文件调用此方法一次,可以将任意数量的音频资源添加到定制模型。 您可以发出多个请求,以同时添加不同的音频资源。

在训练自定义声学模型之前,您必须至少添加10分钟包含语音(而非静音)的音频。 任何音频类型或归档类型资源的大小都不能超过 100 MB。

监视添加音频请求

如果音频有效,服务会返回 201 响应代码。 然后,服务会对音频文件的内容进行异步分析,并自动抽取有关音频的信息,例如长度、采样率和编码。 在完成当前请求的所有音频资源的服务分析之前,无法训练定制模型。

要确定请求的状态,请使用 GET /v1/acoustic_customizations/{customization_id}/audio/{audio_name} 方法来轮询音频的状态。 此方法接受定制模型的定制标识和音频资源的名称。 其响应包含资源的状态,即 status 字段,它具有下列其中一个值:

  • ok 指示音频可接受且分析完成。
  • being_processed 指示服务仍在分析音频。
  • invalid 指示音频文件是不可接受的,无法进行处理。 此文件可能格式错误、采样率错误或者不是音频文件。 对于归档文件,如果其中包含的任何音频文件无效,那么整个归档无效。

响应的内容和 status 字段的位置取决于资源类型:音频或归档。

  • 对于音频类型资源status 字段位于顶级 (AudioListing) 对象中。

    IBM Cloud

    curl -X GET -u "apikey:{apikey}" \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio1"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X GET \
    --header "Authorization: Bearer {token}" \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio1"
    

    音频类型资源的状态为 ok:

    {
      "duration": 131,
      "name": "audio1",
      "details": {
        "codec": "pcm_s16le",
        "type": "audio",
        "frequency": 22050
      }
      "status": "ok"
    }
    
  • 对于归档类型资源status 字段位于嵌套在 AudioResource 字段中的二级 (container) 对象中。

    IBM Cloud

    curl -X GET -u "apikey:{apikey}" \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio2"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X GET \
    --header "Authorization: Bearer {token}" \
    "{url}/v1/acoustic_customizations/{customization_id}/audio/audio2"
    

    归档类型资源的状态为 ok:

    {
      "container": {
        "duration": 556,
        "name": "audio2",
        "details": {
          "type": "archive",
          "compression": "zip"
        },
        "status": "ok"
      },
      . . .
    }
    

使用循环每几秒检查一次音频资源的状态,直到它变为 ok。 有关此方法返回的其他字段的更多信息,请参阅列出定制声学模型的音频资源

训练定制声学模型

使用音频资源填充定制声学模型后,必须基于新数据来训练模型。 通过训练,可准备定制模型以用于语音识别。 在基于新数据训练模型之前,无法将该模型用于识别请求。 此外,以新增或更改音频资源的形式对定制模型的更新,要在您使用这些更改对该模型进行训练之后,才会由该模型反映出。

使用 POST /v1/acoustic_customizations/{customization_id}/train 方法来训练定制模型。 您将向此方法传递要训练的模型的定制标识,如以下示例中所示。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
"{url}/v1/acoustic_customizations/{customization_id}/train"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
"{url}/v1/acoustic_customizations/{customization_id}/train"

这是异步方法。 训练时间取决于定制声学模型包含的累计音频数据量以及服务上的当前负载。 训练或重新训练模型时,服务会在训练中使用模型的所有音频数据(不仅仅是新数据)。 因此,训练时间与模型包含的音频总量相当。

一般准则是,训练定制声学模型需要的时间大约等于其累计音频数据长度。 例如,训练包含总长 2 小时音频的模型需要大约 2 小时。 有关检查训练操作的状态的更多信息,请参阅监视训练模型请求

此方法包含以下可选的查询参数:

  • custom_language_model_id 参数指定要在训练期间使用的单独创建的定制语言模型。 可以使用定制语言模型进行训练,该模型包含音频文件的转录,或者包含与音频文件内容相关的语料库或 OOV 词。 要成功训练,定制语言模型必须经过完全训练且可用,并且定制声学模型和定制语言模型必须基于同一基本模型的相同版本。 有关更多信息,请参阅使用定制语言模型训练定制声学模型
  • strict 参数指示在定制模型包含有效和无效音频资源的组合时,训练是否继续进行。 缺省情况下,如果模型包含一个或多个无效资源,训练会失败。 将此参数设置为 false,以允许只要模型包含至少一个有效资源,就继续进行训练。 服务会从训练中排除无效的资源。 有关更多信息,请参阅定制声学模型训练失败

监视训练模型请求

如果训练过程成功启动,服务会返回 200 响应代码。 在现有训练请求完成之前,服务无法接受后续训练请求,也无法接受添加更多音频资源的请求。

要确定训练请求的状态,请使用 GET /v1/acoustic_customizations/{customization_id} 方法来轮询模型的状态。 该方法接受声学模型的自定义ID,如下例所示:

IBM Cloud

curl -X GET -u "apikey:{apikey}" \
"{url}/v1/acoustic_customizations/{customization_id}"

IBM Cloud Pak for Data IBM Software Hub

curl -X GET \
--header "Authorization: Bearer {token}" \
"{url}/v1/acoustic_customizations/{customization_id}"

响应包含模型的状态,即 training:

{
  "customization_id": "74f4807e-b5ff-4866-824e-6bba1a84fe96",
  "created": "2016-06-01T18:42:25.324Z",
  "updated": "2016-06-01T22:11:13.298Z",
  "language": "en-US",
  "owner": "297cfd08-330a-22ba-93ce-1a73f454dd98",
  "name": "Example model",
  "description": "Example custom acoustic model",
  "base_model_name": "en-US_BroadbandModel",
  "status": "training",
  "progress": 0
}

响应包含报告模型当前状态的 statusprogress 字段。 progress 字段的含义取决于模型的状态。 status 字段可以具有下列其中一个值:

  • pending 指示模型已创建,但正在等待添加有效训练数据或等待服务完成对已添加的数据的分析。 progress 字段为 0

  • ready 指示模型包含有效数据,已准备好进行训练。 progress 字段为 0

    如果模型包含有效和无效音频资源的组合,那么除非您将 strict 查询参数设置为 false,否则模型训练会失败。 有关更多信息,请参阅定制声学模型训练失败

  • training 指示正在训练模型。 完成训练后,progress 字段将从 0 更改为 100

  • available 指示模型已训练并已准备好供使用。 progress 字段为 100

  • upgrading 指示正在升级模型。 progress 字段为 0

  • failed 指示模型训练失败。 progress 字段为 0。 有关更多信息,请参阅定制声学模型训练失败

使用循环每分钟检查一次训练的状态,直到模型变为 available。 有关此方法返回的其他字段的更多信息,请参阅列出定制声学模型

定制声学模型训练失败

如果服务正在处理定制声学模型的其他请求,那么训练无法启动。 冲突请求可能是其他训练请求,也可能是向模型添加音频资源的请求。 服务会返回状态码 409。

训练还会由于以下原因而无法启动:

  • 定制模型包含的音频数据不到 10 分钟。
  • 定制模型包含的音频数据超过 200 小时。
  • 定制模型的一个或多个音频资源无效。
  • 通过 custom_language_model_id 查询参数传递了不处于 available 状态的定制语言模型。 定制语言模型必须经过完全训练,并且可用于训练定制声学模型。
  • 通过 custom_language_model_id 查询参数传递了不兼容的定制语言模型。 这两种定制模型都必须基于同一基本模型的相同版本。

服务返回状态码 400,并将定制模型的状态设置为 failed。 请执行下列其中一项操作:

  • 使用 GET /v1/acoustic_customizations/{customization_id}/audioGET /v1/acoustic_customizations/{customization_id}/audio/{audio_name} 方法来检查模型的音频资源。 有关更多信息,请参阅列出定制声学模型的音频资源

    对于每个无效音频资源,请执行下列其中一项操作:

    • 更正音频资源,然后使用 allow_overwrite 方法的 POST /v1/acoustic_customizations/{customization_id}/audio/{audio_name} 参数将更正后的音频添加到模型。 有关更多信息,请参阅向定制声学模型添加音频
    • 使用 DELETE /v1/acoustic_customizations/{customization_id}/audio/{audio_name} 方法从模型中删除音频资源。 有关更多信息,请参阅从定制声学模型中删除音频资源
  • strict 方法的 POST /v1/acoustic_customizations/{customization_id}/train 参数设置为 false,以从训练中排除无效的音频资源。 模型必须包含至少一个有效音频资源,才能成功进行训练。 strict 参数对于训练包含有效和无效音频资源组合的定制模型非常有用。