AI涌現(xiàn)人類情感!希臘「樂(lè)之神」Orpheus開(kāi)源,單卡可跑語(yǔ)音流式推理
大語(yǔ)言模型(LLM)還能涌現(xiàn)什么能力?
這次開(kāi)源模型Orpheus,直接讓LLM涌現(xiàn)人類情感!
對(duì)此,Canopy Labs的開(kāi)源開(kāi)發(fā)者Elias表示Orpheus就像人類一樣,已經(jīng)擁有共情能力,能從文本中產(chǎn)生潛在的線索,比如嘆息、歡笑和嗤笑。
作為開(kāi)源的文本轉(zhuǎn)語(yǔ)音(Text to Speech,TTS)模型,Orpheus性能超越了包括ElevenLabs和OpenAI在內(nèi)的所有開(kāi)源/閉源模型!
Orpheus成功證明了LLM在語(yǔ)音合成領(lǐng)域的涌現(xiàn)能力。
Orpheus表現(xiàn)出了共情能力,情智媲美人類,甚至可以從文字本身中生成嘆息、笑聲、輕笑等潛在的音調(diào)。
一直以來(lái),開(kāi)源TTS模型都無(wú)法與閉源模型競(jìng)爭(zhēng),而今天,這一局面開(kāi)始發(fā)生改變,Ophueus顛覆語(yǔ)音界!
新開(kāi)源的Orpheus有4大特點(diǎn):
- 擬人化語(yǔ)音:具備自然的語(yǔ)調(diào)、情感和節(jié)奏,效果優(yōu)于當(dāng)前最先進(jìn)(SOTA)的閉源模型。
- 零樣本語(yǔ)音克?。簾o(wú)需額外微調(diào)即可克隆聲音。
- 可控情感與語(yǔ)調(diào):使用簡(jiǎn)單的標(biāo)簽即可調(diào)整語(yǔ)音的情感和特征。
- 低延遲:流式推理延遲約200ms,結(jié)合輸入流式處理可降低至100ms,適用于實(shí)時(shí)應(yīng)用。
流式推理可在音頻生成過(guò)程中逐步輸出結(jié)果,使延遲極低,適用于實(shí)時(shí)應(yīng)用。
在A100 40GB顯卡上,30億參數(shù)模型的流式推理速度,甚至快于音頻播放速度。
項(xiàng)目地址:https://github.com/canopyai/Orpheus-TTS
模型地址:https://huggingface.co/collections/canopylabs/orpheus-tts-67d9ea3f6c05a941c06ad9d2
4大模型
Orpheus是由多個(gè)預(yù)訓(xùn)練和微調(diào)模型組成的系列,擁有30億參數(shù)。
在未來(lái)幾天內(nèi),開(kāi)發(fā)者將發(fā)布更小規(guī)模的模型,包括10億、5億和1.5億參數(shù)版本。
基于Llama架構(gòu),開(kāi)源開(kāi)發(fā)者還將發(fā)布預(yù)訓(xùn)練和微調(diào)模型,提供四種不同規(guī)模:
Medium – 30 億參數(shù)
Small – 10 億參數(shù)
Tiny – 4 億參數(shù)
Nano – 1.5 億參數(shù)
即使在極小的模型規(guī)模下,依然能實(shí)現(xiàn)極高質(zhì)量、富有美感的語(yǔ)音生成。
微調(diào)模型適用于對(duì)話場(chǎng)景,而預(yù)訓(xùn)練模型可以用于多種下游任務(wù),例如語(yǔ)音克隆或語(yǔ)音分類。
模型架構(gòu)和設(shè)計(jì)
預(yù)訓(xùn)練模型采用Llama-3B作為基礎(chǔ)架構(gòu),并在超過(guò)10萬(wàn)小時(shí)的英語(yǔ)語(yǔ)音數(shù)據(jù)和數(shù)十億個(gè)文本token上進(jìn)行了訓(xùn)練。
通過(guò)訓(xùn)練文本token,顯著提升了模型在TTS任務(wù)上的表現(xiàn),使其具備更強(qiáng)的語(yǔ)言理解能力。
由于采用了LLM架構(gòu),模型具備高精度、強(qiáng)表現(xiàn)力和高度可定制性。
新模型支持實(shí)時(shí)語(yǔ)音輸出流式推理,延遲低至約200毫秒,適用于對(duì)話類應(yīng)用。
如果希望進(jìn)一步降低延遲,可以將文本流式輸入到模型的KV緩存中,從而將延遲降低至約25-50毫秒。
在實(shí)時(shí)語(yǔ)音的設(shè)計(jì)上,采用了兩種突破傳統(tǒng)的方法:基于CNN的tokenizer
使用Snac采樣不同頻率的token,并將其展平
每幀生成7個(gè)token,并作為單個(gè)展平序列解碼,而非使用7個(gè)LM頭進(jìn)行解碼。
這樣,模型需要生成的步數(shù)增加,但在A100或H100 GPU上,使用vLLM實(shí)現(xiàn)后,模型的token生成速度仍然快于實(shí)時(shí)播放,因此即使是較長(zhǎng)的語(yǔ)音序列,也能保持實(shí)時(shí)生成。
Orpheus采用了非流式(基于CNN)的tokenizer。
其他使用SNAC作為解碼器的語(yǔ)音LLM,在去token化時(shí),會(huì)出現(xiàn)幀之間的「彈跳(popping)」現(xiàn)象。
Orpheus通過(guò)滑動(dòng)窗口改進(jìn)了去token化的實(shí)現(xiàn),使其支持流式推理,同時(shí)完全消除popping問(wèn)題。
使用教程
本次發(fā)布包含三款模型。
此外,還提供了數(shù)據(jù)處理腳本和示例數(shù)據(jù)集,方便用戶輕松進(jìn)行自定義微調(diào)。
目前,共有兩款模型:
Finetuned Prod:針對(duì)日常TTS應(yīng)用微調(diào)的高質(zhì)量模型,適用于日常TTS應(yīng)用的微調(diào)模型。
Pretrained:預(yù)訓(xùn)練基礎(chǔ)模型,基于10萬(wàn)+小時(shí)的英語(yǔ)語(yǔ)音數(shù)據(jù)訓(xùn)練而成,預(yù)設(shè)為條件生成模式,可擴(kuò)展至更多任務(wù)。
流式推理
1.克隆倉(cāng)庫(kù)
git clone https://github.com/canopyai/Orpheus-TTS.git
2.安裝依賴
cd Orpheus-TTS && pip install orpheus-speech # uses vllm under the hood for fast inference
pip install vllm==0.7.3
3.運(yùn)行流式推理示例
from orpheus_tts import OrpheusModel
import wave
import time
model = OrpheusModel(model_name ="canopylabs/orpheus-tts-0.1-finetune-prod")
prompt = '''Man, the way social media has, um, completely changed how we interact is just wild, right? Like, we're all connected 24/7 but somehow people feel more alone than ever. And don't even get me started on how it's messing with kids' self-esteem and mental health and whatnot.'''
start_time = time.monotonic()
syn_tokens = model.generate_speech(
prompt=prompt,
voice="tara",
)
with wave.open("output.wav", "wb") as wf:
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
total_frames = 0
chunk_counter = 0
for audio_chunk in syn_tokens: # output streaming
chunk_counter += 1
frame_count = len(audio_chunk) // (wf.getsampwidth() * wf.getnchannels())
total_frames += frame_count
wf.writeframes(audio_chunk)
duration = total_frames / wf.getframerate()
end_time = time.monotonic()
print(f"It took {end_time - start_time} seconds to generate {duration:.2f} seconds of audio")
提示格式
1. 微調(diào)模型
主要的文本提示格式為:
{name}: I went to the ...
可選的姓名(按對(duì)話自然度排序,主觀評(píng)估):「tara」, 「leah」, 「jess」, 「leo」, 「dan」, 「mia」, 「zac」, 「zoe」。
可添加情感標(biāo)簽:
<laugh>, <chuckle>, <sigh>, <cough>, <sniffle>, <groan>, <yawn>, <gasp>
Python包orpheus-speech和Notebook會(huì)自動(dòng)格式化提示,無(wú)需手動(dòng)調(diào)整。
2. 預(yù)訓(xùn)練模型
適用于僅基于文本生成語(yǔ)音,或基于一個(gè)或多個(gè)已有的文本-語(yǔ)音對(duì)生成語(yǔ)音。
零樣本語(yǔ)音克?。捍四P臀唇?jīng)過(guò)專門訓(xùn)練,因此輸入的文本-語(yǔ)音對(duì)越多,生成目標(biāo)聲音的效果越穩(wěn)定。
下列參數(shù)調(diào)整,適用于所有模型:
常規(guī)LLM生成參數(shù):支持temperature、top_p等。
避免重復(fù):repetition_penalty >= 1.1可提高穩(wěn)定性。
語(yǔ)速調(diào)整:提高repetition_penalty和temperature會(huì)讓語(yǔ)速變快。
模型微調(diào)
以下是關(guān)于如何對(duì)任何文本和語(yǔ)音進(jìn)行模型微調(diào)的概述。
這個(gè)過(guò)程非常簡(jiǎn)單,類似于使用Trainer和Transformers來(lái)調(diào)整LLM(大語(yǔ)言模型)。
在大約50個(gè)樣本后,應(yīng)該開(kāi)始看到高質(zhì)量的結(jié)果,但為了達(dá)到最佳效果,建議每人提供300個(gè)樣本。
第一步:數(shù)據(jù)集應(yīng)該是一個(gè)Hugging Face數(shù)據(jù)集,格式如下:
第二步:使用Colab Notebook來(lái)準(zhǔn)備數(shù)據(jù)。
這會(huì)將一個(gè)中間數(shù)據(jù)集推送到Hugging Face,然可以將它輸入到finetune/train.py中的訓(xùn)練腳本中。
預(yù)處理估計(jì)每千行數(shù)據(jù)花費(fèi)不到1分鐘的時(shí)間。
第三步:修改finetune/config.yaml文件,包含新的數(shù)據(jù)集和訓(xùn)練屬性,然后運(yùn)行訓(xùn)練腳本。
還可以運(yùn)行任何與Hugging Face兼容的進(jìn)程,比如Lora,來(lái)進(jìn)一步調(diào)整模型。
pip install transformers datasets wandb trl flash_attn torch
huggingface-cli login <enter your HF token>
wandb login <wandb token>
accelerate launch train.py
這只是Canopy Labs打造的眾多技術(shù)之一。
他們相信未來(lái),每一個(gè)AI應(yīng)用都將化身為可以與人互動(dòng)的「數(shù)字人」。