語(yǔ)音技術(shù)新突破:Ming-UniAudio 一模多能,理解生成編輯全搞定!
在人工智能領(lǐng)域,語(yǔ)音處理技術(shù)一直是研究的熱點(diǎn)之一。隨著大語(yǔ)言模型(LLM)的快速發(fā)展,語(yǔ)音語(yǔ)言模型在語(yǔ)音理解、生成和編輯等方面取得了顯著進(jìn)展。然而,現(xiàn)有的大多數(shù)語(yǔ)音模型要么將理解與生成任務(wù)的表示分離,要么采用離散化表示,導(dǎo)致語(yǔ)音細(xì)節(jié)損失。為了解決這些問(wèn)題,螞蟻集團(tuán)推出了Ming-UniAudio,這是一個(gè)基于統(tǒng)一連續(xù)分詞器的語(yǔ)音大模型,能夠同時(shí)處理語(yǔ)音理解、生成和編輯任務(wù)。
一、項(xiàng)目概述
Ming-UniAudio 是螞蟻集團(tuán)開(kāi)源的一個(gè)創(chuàng)新語(yǔ)音處理項(xiàng)目,旨在通過(guò)統(tǒng)一的連續(xù)語(yǔ)音分詞器 MingTok-Audio 和端到端的語(yǔ)音語(yǔ)言模型,實(shí)現(xiàn)語(yǔ)音理解、生成和編輯任務(wù)的高效融合。MingTok-Audio 基于 VAE 框架和因果 Transformer 架構(gòu),能夠有效整合語(yǔ)義和聲學(xué)特征,為語(yǔ)音理解和生成任務(wù)提供統(tǒng)一的表示。在此基礎(chǔ)上,Ming-UniAudio 開(kāi)發(fā)了一個(gè)端到端的語(yǔ)音語(yǔ)言模型,支持語(yǔ)音理解和生成任務(wù),并通過(guò)擴(kuò)散頭技術(shù)確保高質(zhì)量的語(yǔ)音合成。
二、核心功能
(一)語(yǔ)音理解
能夠準(zhǔn)確識(shí)別多種語(yǔ)言和方言的語(yǔ)音內(nèi)容,并將其轉(zhuǎn)錄為文本。這使得它在語(yǔ)音助手、會(huì)議記錄等場(chǎng)景中表現(xiàn)出色,能夠?qū)崟r(shí)提供準(zhǔn)確的語(yǔ)音識(shí)別結(jié)果。同時(shí)支持多種語(yǔ)言和方言,包括但不限于普通話、英語(yǔ)、湖南話、閩南話等,極大地?cái)U(kuò)展了其應(yīng)用場(chǎng)景。
(二)語(yǔ)音生成
根據(jù)文本生成自然流暢的語(yǔ)音,適用于有聲讀物、語(yǔ)音播報(bào)等應(yīng)用。生成的語(yǔ)音不僅自然,而且具有高相似度,接近真人發(fā)音。通過(guò)擴(kuò)散頭技術(shù),確保生成語(yǔ)音的高質(zhì)量和自然度,提供優(yōu)質(zhì)的聽(tīng)覺(jué)體驗(yàn)。
(三)語(yǔ)音編輯
支持自由形式的語(yǔ)音編輯,如插入、刪除、替換等操作,無(wú)需手動(dòng)指定編輯區(qū)域。這使得音頻后期制作和語(yǔ)音內(nèi)容創(chuàng)作更加高效。通過(guò)自然語(yǔ)言指令引導(dǎo)的語(yǔ)音編輯,簡(jiǎn)化了編輯流程,提高了用戶(hù)體驗(yàn)。例如,用戶(hù)可以通過(guò)簡(jiǎn)單的指令完成復(fù)雜的語(yǔ)音編輯任務(wù)。
(四)多模態(tài)融合
支持文本和音頻等多種模態(tài)輸入,能夠?qū)崿F(xiàn)復(fù)雜的多模態(tài)交互任務(wù)。這使得模型在處理復(fù)雜的交互場(chǎng)景時(shí)更加靈活和強(qiáng)大。支持多種模態(tài)的輸入和輸出,提升了模型的通用性和適應(yīng)性,適用于多種應(yīng)用場(chǎng)景。
(五)高效分詞
采用統(tǒng)一的連續(xù)語(yǔ)音分詞器MingTok-Audio,有效整合語(yǔ)義和聲學(xué)特征,提升模型性能。這使得模型在處理語(yǔ)音任務(wù)時(shí)更加高效和準(zhǔn)確。通過(guò)層次化的特征表示,MingTok-Audio 能夠更好地捕捉語(yǔ)音的細(xì)節(jié)和語(yǔ)義信息。
(六)高質(zhì)量合成
通過(guò)擴(kuò)散頭技術(shù),確保生成語(yǔ)音的高質(zhì)量和自然度。這使得生成的語(yǔ)音不僅自然,而且具有高相似度,接近真人發(fā)音。另外通過(guò)多任務(wù)學(xué)習(xí),平衡了語(yǔ)音生成和理解的能力,提升了在不同任務(wù)上的性能表現(xiàn)。
(七)開(kāi)源易用
提供開(kāi)源代碼和預(yù)訓(xùn)練模型,方便開(kāi)發(fā)者快速部署和二次開(kāi)發(fā)。這使得開(kāi)發(fā)者可以輕松地在現(xiàn)有模型基礎(chǔ)上進(jìn)行定制和擴(kuò)展。并提供詳細(xì)的使用指南和示例,幫助開(kāi)發(fā)者快速上手和應(yīng)用。
三、技術(shù)揭秘
(一)統(tǒng)一連續(xù)語(yǔ)音分詞器
Ming-UniAudio 的核心是 MingTok-Audio,一個(gè)基于 VAE(變分自編碼器)框架和因果 Transformer 架構(gòu)的連續(xù)語(yǔ)音分詞器。它能夠有效整合語(yǔ)義和聲學(xué)特征,為語(yǔ)音理解和生成任務(wù)提供統(tǒng)一的表示。這種分詞器不僅支持層次化的特征表示,還能通過(guò)連續(xù)的特征空間捕捉語(yǔ)音的細(xì)節(jié)和語(yǔ)義信息,從而實(shí)現(xiàn)高質(zhì)量的語(yǔ)音處理。
(二)端到端語(yǔ)音語(yǔ)言模型
Ming-UniAudio 預(yù)訓(xùn)練了一個(gè)端到端的語(yǔ)音語(yǔ)言模型,支持語(yǔ)音理解和生成任務(wù)。該模型通過(guò)單個(gè)語(yǔ)言模型(LLM)主干網(wǎng)絡(luò)進(jìn)行預(yù)訓(xùn)練,結(jié)合擴(kuò)散頭技術(shù)確保高質(zhì)量的語(yǔ)音合成。這種設(shè)計(jì)不僅提高了模型在語(yǔ)音任務(wù)上的性能,還通過(guò)多任務(wù)學(xué)習(xí)平衡了生成和理解的能力,使其在多種任務(wù)中表現(xiàn)出色。
(三)指令引導(dǎo)的自由形式語(yǔ)音編輯
Ming-UniAudio 引入了首個(gè)指令引導(dǎo)的自由形式語(yǔ)音編輯框架,支持復(fù)雜的語(yǔ)義和聲學(xué)修改。用戶(hù)可以通過(guò)自然語(yǔ)言指令完成插入、刪除、替換等編輯操作,無(wú)需手動(dòng)指定編輯區(qū)域。這種設(shè)計(jì)極大地簡(jiǎn)化了語(yǔ)音編輯流程,提高了用戶(hù)體驗(yàn),適用于音頻后期制作和語(yǔ)音內(nèi)容創(chuàng)作。
(四)多模態(tài)融合
Ming-UniAudio 支持文本和音頻等多種模態(tài)輸入,能夠?qū)崿F(xiàn)復(fù)雜的多模態(tài)交互任務(wù)。這種多模態(tài)融合不僅提升了模型的通用性和靈活性,還使其在處理復(fù)雜的交互場(chǎng)景時(shí)更加高效。例如,在語(yǔ)音助手和智能對(duì)話系統(tǒng)中,模型可以同時(shí)處理語(yǔ)音和文本輸入,提供更加自然和流暢的交互體驗(yàn)。
(五)高質(zhì)量語(yǔ)音合成
Ming-UniAudio 通過(guò)擴(kuò)散模型技術(shù)生成高質(zhì)量、自然流暢的語(yǔ)音。這種技術(shù)確保了生成語(yǔ)音的高質(zhì)量和自然度,使其接近真人發(fā)音。無(wú)論是在有聲讀物、語(yǔ)音播報(bào)還是其他語(yǔ)音生成場(chǎng)景中,Ming-UniAudio 都能提供優(yōu)質(zhì)的聽(tīng)覺(jué)體驗(yàn),滿(mǎn)足用戶(hù)對(duì)語(yǔ)音質(zhì)量的高要求。
(六)多任務(wù)學(xué)習(xí)
Ming-UniAudio 通過(guò)多任務(wù)學(xué)習(xí)平衡了語(yǔ)音生成和理解的能力。這種學(xué)習(xí)方式不僅提高了模型在不同任務(wù)上的性能,還增強(qiáng)了其在復(fù)雜場(chǎng)景中的適應(yīng)性。通過(guò)大規(guī)模音頻和文本數(shù)據(jù)的預(yù)訓(xùn)練,Ming-UniAudio 能夠更好地理解和生成語(yǔ)音內(nèi)容,從而在多種語(yǔ)音處理任務(wù)中表現(xiàn)出色。
(七)大規(guī)模預(yù)訓(xùn)練
Ming-UniAudio 基于大規(guī)模音頻和文本數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練,極大地增強(qiáng)了模型的語(yǔ)言理解和生成能力。這種大規(guī)模預(yù)訓(xùn)練不僅提高了模型的性能,還使其能夠處理復(fù)雜的語(yǔ)音任務(wù)。通過(guò)豐富的數(shù)據(jù)和先進(jìn)的訓(xùn)練方法,Ming-UniAudio 在語(yǔ)音理解、生成和編輯任務(wù)中都取得了顯著的成果,為語(yǔ)音處理領(lǐng)域的發(fā)展提供了新的思路和方法。
四、基準(zhǔn)評(píng)測(cè)
(一)語(yǔ)音分詞
在Seed-zh 和 Seed-en 數(shù)據(jù)集上,MingTok-Audio 的 PESQ、SIM 和 STOI 指標(biāo)均優(yōu)于其他模型。
(二)語(yǔ)音理解
在多種方言的語(yǔ)音識(shí)別任務(wù)中,Ming-UniAudio 的錯(cuò)誤率(WER)顯著低于其他模型,例如湖南方言的 WER 僅為 9.80%,閩南語(yǔ)的 WER 為 16.50%。
(三)語(yǔ)音生成
在Seed-zh 中文數(shù)據(jù)集上,Ming-UniAudio 的 WER 僅為 0.95%,合成語(yǔ)音的相似度(SIM)達(dá)到 0.70,接近真人發(fā)音。
五、應(yīng)用場(chǎng)景
(一)語(yǔ)音助手
Ming-UniAudio 的語(yǔ)音理解和生成能力使其成為語(yǔ)音助手的理想選擇。它能夠準(zhǔn)確識(shí)別用戶(hù)的語(yǔ)音指令并生成自然流暢的語(yǔ)音回應(yīng),支持多種語(yǔ)言和方言,極大地提升了用戶(hù)體驗(yàn)。無(wú)論是智能家居設(shè)備、智能手機(jī)還是車(chē)載系統(tǒng),Ming-UniAudio 都能提供高效、準(zhǔn)確的語(yǔ)音交互功能。
(二)有聲讀物
Ming-UniAudio 的語(yǔ)音生成功能可以將文本內(nèi)容轉(zhuǎn)換為自然流暢的語(yǔ)音,適用于有聲讀物的制作。它支持多種語(yǔ)言和方言,生成的語(yǔ)音質(zhì)量高,接近真人發(fā)音,能夠?yàn)橛脩?hù)提供優(yōu)質(zhì)的聽(tīng)覺(jué)體驗(yàn)。這不僅提高了有聲讀物的制作效率,還降低了成本。
(三)音頻后期制作
Ming-UniAudio 的自由形式語(yǔ)音編輯功能為音頻后期制作提供了強(qiáng)大的工具。用戶(hù)可以通過(guò)自然語(yǔ)言指令完成復(fù)雜的語(yǔ)音編輯任務(wù),如插入、刪除、替換等操作,無(wú)需手動(dòng)指定編輯區(qū)域。這不僅簡(jiǎn)化了編輯流程,還提高了制作效率,適用于電影、廣告、播客等多種音頻內(nèi)容的后期制作。
(四)多模態(tài)交互
Ming-UniAudio 支持文本和音頻等多種模態(tài)輸入,能夠?qū)崿F(xiàn)復(fù)雜的多模態(tài)交互任務(wù)。在智能對(duì)話系統(tǒng)和虛擬助手等應(yīng)用中,模型可以同時(shí)處理語(yǔ)音和文本輸入,提供更加自然和流暢的交互體驗(yàn)。這種多模態(tài)融合能力使其在多種復(fù)雜交互場(chǎng)景中表現(xiàn)出色。
(五)語(yǔ)音內(nèi)容創(chuàng)作
Ming-UniAudio 的指令引導(dǎo)的語(yǔ)音編輯功能為語(yǔ)音內(nèi)容創(chuàng)作提供了極大的便利。創(chuàng)作者可以通過(guò)簡(jiǎn)單的自然語(yǔ)言指令完成復(fù)雜的語(yǔ)音編輯任務(wù),無(wú)需專(zhuān)業(yè)的音頻編輯技能。這不僅提高了創(chuàng)作效率,還激發(fā)了更多創(chuàng)意,適用于播客、有聲故事、語(yǔ)音廣告等多種語(yǔ)音內(nèi)容的創(chuàng)作。
六、快速使用
(一)環(huán)境準(zhǔn)備
1、使用 pip 安裝依賴(lài):
https://github.com/inclusionAI/Ming-UniAudio.git
cd Ming-UniAudio
pip install -r requirements.txt2、使用 Docker 構(gòu)建環(huán)境:
git clone --depth 1 https://github.com/inclusionAI/Ming-UniAudio
cd Ming-UniAudio
docker build -t ming:py310-cu121 docker/docker-py310-cu121
docker run -it --gpus all -v "$(pwd)":/workspace/Ming-UniAudio ming:py310-cu121 ming:py310-cu121 /bin/bash(二)下載源代碼
git clone
https://github.com/inclusionAI/Ming-UniAudio
cd Ming-UniAudio(三)下載模型
下載 Ming-UniAudio 模型權(quán)重并在源代碼目錄中創(chuàng)建軟鏈接
pip install modelscope
modelscope download --model inclusionAI/Ming-UniAudio-16B-A3B --local_dir inclusionAI/Ming-UniAudio-16B-A3B --revision master
mkdir inclusionAI ln -s /path/to/inclusionAI/Ming-UniAudio-16B-A3B inclusionAI/Ming-UniAudio-16B-A3B(四)使用示例
官方提供了一個(gè)關(guān)于此倉(cāng)庫(kù)使用的簡(jiǎn)單示例,有關(guān)詳細(xì)用法,可參閱demobook.ipynb。
import warnings
import torch
from modelscope import AutoProcessor
from modeling_bailingmm import BailingMMNativeForConditionalGeneration
import random
import numpy as np
from loguru import logger
def seed_everything(seed=1895):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
seed_everything()
warnings.filterwarnings("ignore")
class MingAudio:
def __init__(self, model_path, device="cuda:0"):
self.device = device
self.model = BailingMMNativeForConditionalGeneration.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
).eval().to(torch.bfloat16).to(self.device)
self.processor = AutoProcessorinclusionAI/Ming-UniAudio-16B-A3Bfrom_pretrained(".", trust_remote_code=True)
self.tokenizer = self.processor.tokenizer
self.sample_rate = self.processor.audio_processor.sample_rate
self.patch_size = self.processor.audio_processor.patch_size
def speech_understanding(self, messages):
text = self.processor.apply_chat_template(messages, add_generation_prompt=True)
image_inputs, video_inputs, audio_inputs = self.processor.process_vision_info(messages)
inputs = self.processor(
text=[text],
images=image_inputs,
videos=video_inputs,
audios=audio_inputs,
return_tensors="pt",
).to(self.device)
for k in inputs.keys():
if k == "pixel_values" or k == "pixel_values_videos" or k == "audio_feats":
inputs[k] = inputs[k].to(dtype=torch.bfloat16)
logger.info(f"input: {self.tokenizer.decode(inputs['input_ids'].cpu().numpy().tolist()[0])}")
generated_ids = self.model.generate(
**inputs,
max_new_tokens=512,
eos_token_id=self.processor.gen_terminator,
)
generated_ids_trimmed = [
out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = self.processor.batch_decode(
generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
return output_text
def speech_generation(
self,
text,
prompt_wav_path,
prompt_text,
lang='zh',
output_wav_path='out.wav'
):
waveform = self.model.generate_tts(
text=text,
prompt_wav_path=prompt_wav_path,
prompt_text=prompt_text,
patch_size=self.patch_size,
tokenizer=self.tokenizer,
lang=lang,
output_wav_path=output_wav_path,
sample_rate=self.sample_rate,
device=self.device
)
return waveform
def speech_edit(
self,
messages,
output_wav_path='out.wav'
):
text = self.processor.apply_chat_template(messages, add_generation_prompt=True)
image_inputs, video_inputs, audio_inputs = self.processor.process_vision_info(messages)
inputs = self.processor(
text=[text],
images=image_inputs,
videos=video_inputs,
audios=audio_inputs,
return_tensors="pt",
).to(self.device)
ans = torch.tensor([self.tokenizer.encode('<answer>')]).to(inputs['input_ids'].device)
inputs['input_ids'] = torch.cat([inputs['input_ids'], ans], dim=1)
attention_mask = inputs['attention_mask']
inputs['attention_mask'] = torch.cat((attention_mask, attention_mask[:, :1]), dim=-1)
for k in inputs.keys():
if k == "pixel_values" or k == "pixel_values_videos" or k == "audio_feats":
inputs[k] = inputs[k].to(dtype=torch.bfloat16)
logger.info(f"input: {self.tokenizer.decode(inputs['input_ids'].cpu().numpy().tolist()[0])}")
edited_speech, edited_text = self.model.generate_edit(
**inputs,
tokenizer=self.tokenizer,
output_wav_path=output_wav_path
)
return edited_speech, edited_text
if __name__ == "__main__":
model = MingAudio("inclusionAI/Ming-UniAudio-16B-A3B")
# ASR
messages = [
{
"role": "HUMAN",
"content": [
{
"type": "text",
"text": "Please recognize the language of this speech and transcribe it. Format: oral.",
},
{"type": "audio", "audio": "data/wavs/BAC009S0915W0292.wav"},
],
},
]
response = model.speech_understanding(messages=messages)
logger.info(f"Generated Response: {response}")
# TTS
model.speech_generation(
text='我們的愿景是構(gòu)建未來(lái)服務(wù)業(yè)的數(shù)字化基礎(chǔ)設(shè)施,為世界帶來(lái)更多微小而美好的改變。',
prompt_wav_path='data/wavs/10002287-00000094.wav',
prompt_text='在此奉勸大家別亂打美白針。',
)結(jié)語(yǔ)
Ming-UniAudio 作為螞蟻集團(tuán)開(kāi)源的多功能統(tǒng)一語(yǔ)音大模型,通過(guò)創(chuàng)新的連續(xù)語(yǔ)音分詞器MingTok-Audio和端到端的語(yǔ)音語(yǔ)言模型,實(shí)現(xiàn)了語(yǔ)音理解、生成和編輯任務(wù)的統(tǒng)一表示。其強(qiáng)大的性能和多功能性使其在多種應(yīng)用場(chǎng)景中具有廣泛的應(yīng)用前景。開(kāi)發(fā)者可以通過(guò)開(kāi)源代碼和預(yù)訓(xùn)練模型快速部署和二次開(kāi)發(fā),推動(dòng)語(yǔ)音處理技術(shù)的發(fā)展。
項(xiàng)目地址
項(xiàng)目官網(wǎng):??https://xqacmer.github.io/Ming-Unitok-Audio.github.io/??
Github倉(cāng)庫(kù):??https://github.com/inclusionAI/Ming-UniAudio??
Hugging Face 模型庫(kù):???https://huggingface.co/inclusionAI/Ming-UniAudio-16B-A3B??
本文轉(zhuǎn)載自??小兵的AI視界??,作者:AGI小兵

















