1.引言

在AI领域,文本转语音和语音转文本技术已经取得了显著的进展。这些技术在许多领域都有广泛的应用,如语音助手、实时弹幕、通话检测等。本文我们使用阿里的语音合成和语音识别技术,实现文本转语音和语音转文本的完整流程,并讲述如何针对自己的业务构建专属转文本模型。

2.实例

现实中会有很多场景需要我们去分析语音,类似在我们实际业务中,通过用户的沟通记录去识别用户的意图,例如:用户对产品的体验、或者用户对我们产品的购买意愿等等,而这时候很多场景需要我们去完成语音转文本,再通过文本去识别用户意图,所以我们需要去尝试将语音转文本。但是这其中会存在一个问题,就是模型怎么知道你的专属名词,比如我创建了一个新APP叫咸货,但是模型是不认识这个品牌的,所以转出来的效果很难让文字百分百精准对上我们的品牌,这块是我们需要去解决的一个问题。但首先我们需要一个语音,去完成我们的实例展示。
在这里插入图片描述

2.1文本转语音

我们用阿里的CosyVoice合成对应语音,再模拟真实业务场景解决语音转文字中的实际问题。我们将这段文字转为语音: 老板,最近我们上线了一个新应用,叫咸货,您可以在上面发布您的闲置物品,也可以购买别人发布的闲置物品,非常方便。,我们特地把名称取得不寻常不叫闲货,而是叫咸货,这样模型就不知道这个品牌,所以转出来的效果很难让文字百分百精准对上我们的品牌,这块是我们需要去解决的一个问题。

2.2文字合成语音


import dashscope
from dashscope.audio.tts_v2 import *

# 设置阿里百炼API密钥
dashscope.api_key = 'sk-xxx'

model = "cosyvoice-v1"
voice = "loongbella"

synthesizer = SpeechSynthesizer(model=model, voice=voice)

audio = synthesizer.call("老板,最近我们上线了一个新应用,叫咸货,您可以在上面发布您的闲置物品,也可以购买别人发布的闲置物品,非常方便。")
print('requestId: ', synthesizer.get_last_request_id())
with open('output.mp3', 'wb') as f:
    f.write(audio)

按照官方示例代码转出了8秒的语音,然后我们接下来将这个录音上传到阿里云(或者别的平台,只要能让模型访问到这个录音就可以),我们就把这个语音当作真实业务场景,去完成分析。
在这里插入图片描述

2.3语音转文字

用阿里的paraformer模型去完成。

from http import HTTPStatus
import json
import dashscope
from dashscope.audio.asr import *

# 设置阿里百炼API密钥
dashscope.api_key = 'sk-xxx'

target_model = "paraformer-8k-v2"

# 调用异步语音转文字服务
task_response = dashscope.audio.asr.Transcription.async_call(
    model=target_model,
    file_urls=['xxx.mp3'],# 这里刚才上传的录音的地址
)


if task_response.status_code != HTTPStatus.OK:
    print(f"Error: {task_response.status_code} - {task_response.output}")
    exit(1)

transcribe_response = dashscope.audio.asr.Transcription.wait(task=task_response.output.task_id)

if transcribe_response.status_code == HTTPStatus.OK:
    print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
    print('transcription done!')
else:
    print(f"Error: {transcribe_response.status_code} - {transcribe_response.output}")

看看结果:

{"channel_id":0,"content_duration_in_milliseconds":52,"text":"老板最近我们上线了一个新应用叫闲货。您可以在上面发布您的闲置物品也可以购买别人发布的闲置物品非常方便。"}

在这里插入图片描述
ok,不出意料模型由于不知道我们的信息转为了闲货,但这不是我们想要的所以我们接下来去解决这件事。查看官网之后,发现我们可以用热词去解决这个问题。

热词(Hot Words)是语音识别技术中的一个概念,它指的是在语音识别过程中,用户希望系统能够特别关注并准确识别的词汇或短语。通过定义热词,可以提高特定词汇的识别准确率,这对于某些特定场景下的语音识别应用尤为重要。

2.4使用热词库

构建很简单:

my_vocabulary = [
    {"text": "咸货", "weight": 3, "lang": 'zh'},
]

# create a vocabulary
service = VocabularyService()

vocabulary_id = service.create_vocabulary(
    prefix=prefix,
    target_model=target_model,
    vocabulary=my_vocabulary)

然后在模型中加上我们上面拿到的vocabulary_id,这样就可以精准识别了

2.5完整代码

from http import HTTPStatus
import json
import dashscope
from dashscope.audio.asr import *

# 设置API密钥
dashscope.api_key = 'sk-xxx'

target_model = "paraformer-8k-v2"

prefix = 'prefix'

my_vocabulary = [
    {"text": "咸货", "weight": 3, "lang": 'zh'},
]

# create a vocabulary
service = VocabularyService()

vocabulary_id = service.create_vocabulary(
    prefix=prefix,
    target_model=target_model,
    vocabulary=my_vocabulary)

print(f"vocabulary_id: {vocabulary_id}")

# 调用异步语音转文字服务
task_response = dashscope.audio.asr.Transcription.async_call(
    model=target_model,
    file_urls=['xxx.mp3'],
    vocabulary_id=vocabulary_id
)


if task_response.status_code != HTTPStatus.OK:
    print(f"Error: {task_response.status_code} - {task_response.output}")
    exit(1)

transcribe_response = dashscope.audio.asr.Transcription.wait(task=task_response.output.task_id)

if transcribe_response.status_code == HTTPStatus.OK:
    print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
    print('transcription done!')
else:
    print(f"Error: {transcribe_response.status_code} - {transcribe_response.output}")

结果:

{"channel_id":0,"content_duration_in_milliseconds":52,"text":"老板最近我们上线了一个新应用叫咸货。您可以在上面发布您的闲置物品也可以购买别人发布的闲置物品非常方便。"}

在这里插入图片描述
符合我们预期,模型可以正确识别我们私域内的精确的词语了。

3.总结

通过这个实例,我们展示了如何使用阿里百炼的语音合成和语音识别技术,实现文本转语音和语音转文本的完整流程,并讲述如何针对自己的业务构建专属转文本模型。我们获取到比较精确的转出的文字再去做别的处理,可以极大帮助我们的实际业务。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐