创建自定义提示
“示范调音”功能是测试版功能,仅支持美式英语定制车型和语音。
请按照以下步骤创建自定义提示,以便在 IBM Watson® Text to Speech 语音合成服务中使用:
- 创建自定义模型。 您可以为您的提示创建一个新的自定义模型,也可以将您的提示添加到现有的自定义模型中。
- 创建音箱模型。 扬声器模型可让服务根据用户说出提示的声音进行自我训练。 扬声器型号可选,但强烈推荐使用。
- 添加自定义提示。 您可以在自定义模型中添加自定义提示。 自定义模型可以包含多个提示。
- 评估自定义提示。 在自定义模型中添加自定义提示后,请务必在综合请求中使用该提示,以验证其质量。 有关使用语音合成请求的提示的信息,请参阅 使用自定义提示进行语音合成。
您可以根据需要添加自定义模型、自定义提示和扬声器模型。 您最多可以为单个自定义模型添加1000个自定义提示。
创建自定义模型
您可以在自定义模型中添加自定义提示。 您可以为提示创建新的自定义模型,也可以将提示添加到现有的自定义模型中。 同一自定义模型可以包含多个提示,模型的提示可以与多个说话人模型相关联。 同一自定义模型也可以包含自定义单词。 要创建新的自定义模型,请使用 POST /v1/customizations
方法。 有关更多信息,请参阅创建定制模型。
以下示例创建了一个名为 Prompt test
的新定制模型。 由于自定义提示和扬声器型号仅支持美式英语,因此该型号的 language
为 en-US
。 请求的 Content-Type
标头必须为 application/json
。
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--data "{\"name\":\"Prompt test\", \"language\":\"en-US\", \"description\":\"Custom model to test prompts\"}" \
"{url}/v1/customizations"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--data "{\"name\":\"Prompt test\", \"language\":\"en-US\", \"description\":\"Custom model to test prompts\"}" \
"{url}/v1/customizations"
该方法返回一个全局唯一标识符(GUID),作为新定制车型的定制ID。 您可以在后续的服务请求中使用此GUID来识别定制车型。
{
"customization_id": "82f4809a-bf63-89a6-52ca-22731fe467ba"
}
创建音箱模型
要为提示音创建一个扬声器模型,请使用 POST /v1/speakers
方法。 您可以通过 speaker_name
查询参数和注册音频作为请求正文,为发言者输入一个独特的名字。 音频文件必须为WAV格式,采样率不得低于16 kHz。 有关发言者姓名和音频的规则和指南,请参阅 创建发言者模型的规则。
注册音频与任何提示音不同。 通过语音录入,该服务可以提取说话者的声音信息。 然后,它将知识应用于与该发言者相关的提示。 创建扬声器模型是可选的。 您可以创建与发言者无关的提示。 然而,语音模型可以显著提升提示音的质量,因此强烈建议对所有提示音使用语音模型。
以下示例创建了一个名为 speaker_one
的扬声器模型。 请求在请求正文中传递一个16位 kHz WAV文件作为注册音频。 请求的 Content-Type
标头必须为 audio/wav
。
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary "@speaker-one-audio.wav" \
"{url}/v1/speakers?speaker_name=speaker_one"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary "@speaker-one-audio.wav" \
"{url}/v1/speakers?speaker_name=speaker_one"
该方法返回一个GUID作为新扬声器型号的扬声器ID。 您可以在后续的服务请求中使用此 GUID 来识别扬声器型号。
{
"speaker_id": "56367f89-546d-4b37-891e-4eb0c13cc833"
}
发言报名是同步操作。 虽然它比自定义提示接受更多的音频数据,但添加扬声器模型的过程非常快。 该服务只需从音频中提取说话者的声音信息即可。 与提示不同,语音识别模型既不需要也不接受音频转录,因此该服务无需对齐文本和音频。 当呼叫返回201响应代码表示成功时,音频已完全处理,扬声器注册完成。
添加自定义提示
若要为自定义模型添加提示,请使用 POST /v1/customizations/{customization_id}/prompts/{prompt_id}
方法。 您将一个唯一的标识符作为路径参数传递给提示。 然后,您可以使用该ID指定语音合成中的提示以及向服务提出的其他请求。
您可以通过名为 metadata
的多部分表单参数,将提示文本和可选的发言者ID作为JSON对象,通过 prompt_text
和 speaker_id
字段传递。 您将提示音的音频与名为 file
的多部分表单参数一起传递。 音频文件必须为WAV格式,采样率不得低于16 kHz。 有关即时ID、文本和音频的规则和指南的更多信息,请参阅 创建自定义提示的规则。
提示的文字和音频必须完全一致,这一点非常重要。 差异会降低合成提示的质量,甚至导致请求失败。
以下示例创建了一个名为 goodbye
的自定义提示,其中包含一条简单的告别信息。 请求中指定了名为 speaker_one
的发言者的发言者ID,以及第一步中创建的自定义模型的自定义ID。 请求的 Content-Type
标头必须为 multipart/form-data
。
IBM Cloud
curl -X POST -u apikey:{apikey} \
--header "Content-Type:multipart/form-data" \
--form metadata="{\"prompt_text\": \"Thank you and good-bye!\", \
\"speaker_id\": \"56367f89-546d-4b37-891e-4eb0c13cc833\"}" \
--form file=@goodbye-prompt.wav \
"{url}/v1/customizations/82f4809a-bf63-89a6-52ca-22731fe467ba/prompts/goodbye"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type:multipart/form-data" \
--form metadata="{\"prompt_text\": \"Thank you and good-bye!\", \
\"speaker_id\": \"56367f89-546d-4b37-891e-4eb0c13cc833\"}" \
--form file=@goodbye-prompt.wav \
"{url}/v1/customizations/82f4809a-bf63-89a6-52ca-22731fe467ba/prompts/goodbye"
该服务返回以下响应,其中包含有关提示的信息,包括其初始状态:
{
"prompt": "Thank you and good-bye!",
"prompt_id": "goodbye",
"status": "processing",
"speaker_id": "823068b2-ed4e-11ea-b6e0-7b6456aa95cc"
}
添加提示是一个异步操作。 有关检查新提示状态的更多信息,请参阅 监控添加提示请求。
监控添加提示请求
如果添加提示的请求成功启动,服务将返回201响应代码。 虽然添加提示时接受的音频比注册发言者时少,但该服务必须将音频与提供的文本进行匹配。 处理提示所需的时间取决于提示音的长度。 处理时间通常与音频的长度一致(例如,处理一个20秒的提示音需要20秒)。
对于较短的提示,您可以等待一段时间,然后使用 GET /v1/customizations/{customization_id}/prompts/{prompt_id}
方法检查提示的状态。 对于较长的提示,可以考虑每隔几秒使用该方法轮询服务,以确定提示何时准备好。 以下示例检查 goodbye
提示符的状态:
IBM Cloud
curl -X GET -u "apikey:{apikey}" \
"{url}/v1/customizations/82f4809a-bf63-89a6-52ca-22731fe467ba/prompts/goodbye"
IBM Cloud Pak for Data IBM Software Hub
curl -X GET \
--header "Authorization: Bearer {token}" \
"{url}/v1/customizations/82f4809a-bf63-89a6-52ca-22731fe467ba/prompts/goodbye"
当服务正在评估该提示时,状态为 processing
。 当状态变为 available
时(如下面的响应所示),提示符即可用于合成请求。 如果状态为 failed
,则说明创建提示时出现问题;服务中包含一条错误消息,描述了失败的原因。
{
"prompt": "Thank you and good-bye!",
"prompt_id": "goodbye",
"status": "available",
"speaker_id": "823068b2-ed4e-11ea-b6e0-7b6456aa95cc"
}
只有处于 available
状态的提示可用于语音合成。 如果提示符处于 processing
或 failed
状态,则不能用于语音合成。 有关检查提示状态的更多信息,请参阅“自定义提示列表”。
评估自定义提示
当您创建提示时,提示文本必须与语音内容合理匹配。 该服务会尽力使指定的文本与音频保持一致,并经常弥补两者之间的不匹配。 如果文本和音频之间的差异过于明显,则该服务无法创建提示。 提示信息越长,文本和音频之间出现偏差的可能性就越大。 因此,多个较短的提示比一个较长的提示更可取。
服务有时可能无法检测到不匹配的情况,或者无法生成完全满足您需求的提示。 因此,在生产中使用之前,您必须先听取并评估所有提示。 通过评估提示,您还可以发现服务可能发音不正确的异常单词。 而且,它能够确保服务人员的语音与您所期望的完全一致。
在生产中使用之前,一定要仔细聆听并评估提示,以确定其质量。 要评估提示,只需在语音合成请求中包含单个提示,并使用以下SSML扩展,在本例中,提示ID为 goodbye
:
<ibm:prompt id="goodbye"/>
您使用相同的方法来评估自定义提示并在应用程序中使用它。 例如,以下请求使用 POST /v1/synthesize
方法来合成提示:
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"<ibm:prompt id='goodbye'/>\"}" \
"{url}/v1/synthesize?customization_id=82f4809a-bf63-89a6-52ca-22731fe467ba&voice=en-US_AllisonV3Voice"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"<ibm:prompt id='goodbye'/>\"}" \
"{url}/v1/synthesize?customization_id=82f4809a-bf63-89a6-52ca-22731fe467ba&voice=en-US_AllisonV3Voice"
有关语音合成提示的更多信息,请参阅 使用自定义提示进行语音合成。
解决自定义提示的评估问题
自定义提示可能会因不同原因而出现不同类型的问题。 在某些情况下,您可能需要多次重新录制和提交提示,以解决以下可能的问题:
- 该服务可能无法检测到提示文本和音频之间的不匹配。 提示信息越长,出现此问题的可能性越大。 多个较短的提示比一个较长的提示更可取。
- 提示文本中可能包含服务无法识别的单词。 在这种情况下,您可以向提示的自定义模型添加自定义单词/翻译对,以告知服务如何发音。 有关更多信息,请参阅向定制模型添加单个词。
- 输入音频的质量可能不足,或者服务对音频的处理可能无法检测或反映预期的韵律。 为提示音提交新的音频可以解决这些问题。
如果创建的提示没有发言者ID,则无法充分反映预期的韵律,因此,为该提示注册发言者并提供发言者ID是提高提示质量的一种推荐方法。 这对于“再见”或“谢谢”等较短的提示尤其重要,因为语音数据越少,服务就越难匹配说话者的语调。