当前位置: 首页 > article >正文

【AIGC】AI文本转语音+语音转文本,构建专属领域转文本模型

引言

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

实例

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

文本转语音

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

文字合成语音


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秒的语音,然后我们接下来将这个录音上传到阿里云(或者别的平台,只要能让模型访问到这个录音就可以),我们就把这个语音当作真实业务场景,去完成分析。
在这里插入图片描述

语音转文字

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

使用热词库

构建很简单:

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,这样就可以精准识别了

完整代码

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":"老板最近我们上线了一个新应用叫咸货。您可以在上面发布您的闲置物品也可以购买别人发布的闲置物品非常方便。"}

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

总结

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


http://www.kler.cn/news/367287.html

相关文章:

  • LeetCode9:回文数
  • fetch: 取消请求、读取流、获取下载进度...
  • Java后端面试题:Java基础篇
  • linux中的PATH环境变量
  • SQL SERVER 2005/2008/2012/2016/2020 数据库状态为“可疑”的解决方法(亲测可用)
  • 校园表白墙源码修复版
  • Go语言基础教程:可变参数函数
  • 鸿蒙-任务栏右击退出 或 UIAbility窗口关闭,怎么弹框拦截
  • 优质短视频素材平台推荐
  • Python unstructured库详解:partition_pdf函数完整参数深度解析
  • 4.1.3 网站通信技术
  • NoSQL 数据库 Redis
  • 如何初始化一个线上的GitHub仓库,在本地已有的仓库中上传到线上
  • 论文阅读笔记 attentation机制
  • 三,Linux基础环境搭建(CentOS7)- 安装Hadoop
  • Intelij IDEA通过Maven部署一个Tomcat的JavaWeb项目
  • Vue3用户关注与粉丝列表展示
  • 前端页面手机端触摸屏操作
  • 【C/C++ explicit关键字】为什么有了explicit关键字的构造函数 就不能再有 其无参构造函数
  • 神经架构搜索:自动化设计神经网络的方法
  • Mysql5.7变为GreatSQL 8.0.32-25过程中,SQL语句报错及解决方案
  • 原生页面引入Webpack打包JS
  • uniApp 加载google地图 并规划路线
  • 仕考网:25年初级会计师备考建议
  • 十分钟了解Android Handler、Looper、Message
  • Java虚拟机:JVM介绍