
背景
現(xiàn)實(shí)世界,人跟人的溝通相當(dāng)一部分是語音溝通,比如打電話,聊天中發(fā)送語音消息。
而在程序的世界,大部分以處理字符串為主。
所以,把語音轉(zhuǎn)換成文字就成為了編程世界非常普遍的需求。
Whisper 是由 OpenAI 開發(fā)的一種高效的語音識(shí)別(ASR)技術(shù),旨在將人類的語音轉(zhuǎn)換成文本。
該模型通過大量的語音數(shù)據(jù)訓(xùn)練而成,能夠識(shí)別并轉(zhuǎn)寫多種語言和方言中的語音。
以下是 Whisper 的一些主要使用場景和它能解決的問題:
使用場景
- 自動(dòng)字幕生成:對于視頻內(nèi)容制作者而言,Whisper 可以自動(dòng)生成字幕,加速視頻制作過程,提高內(nèi)容的可訪問性和理解度。
- 會(huì)議記錄:在商務(wù)和學(xué)術(shù)會(huì)議中自動(dòng)記錄和轉(zhuǎn)寫發(fā)言,節(jié)省人工記錄的時(shí)間,確保信息的準(zhǔn)確性和完整性。
- 教育應(yīng)用:教師可以利用 Whisper 來轉(zhuǎn)寫課程內(nèi)容,為學(xué)生提供書面材料,幫助學(xué)習(xí)和復(fù)習(xí)。
- 語音助手和聊天機(jī)器人:提升語音助手的理解能力,使其能更準(zhǔn)確地理解用戶的指令,提供相關(guān)服務(wù)或答案。
- 無障礙技術(shù):幫助聽力受損的人士通過文本實(shí)現(xiàn)對話理解,提高他們的溝通能力和生活質(zhì)量。
- 內(nèi)容分析:自動(dòng)轉(zhuǎn)寫的文本可以用于內(nèi)容分析,比如情緒分析、關(guān)鍵詞提取或主題識(shí)別,進(jìn)而提供內(nèi)容推薦、概要生成等服務(wù)。
我當(dāng)前從事的領(lǐng)域?yàn)槿蚩头瑧?yīng)用場景主要是:
內(nèi)容分析:
客服管理人員快捷查看語言轉(zhuǎn)成的文本內(nèi)容,把數(shù)據(jù)喂給AI,進(jìn)行服務(wù)質(zhì)量評估和概要提取,方便對客服人員客觀評價(jià),方便管理。
語音助手和聊天機(jī)器人:
主流需求是小客戶希望提供AI機(jī)器人+少量真人客服,即聊天機(jī)器人服務(wù)。
解決的問題
- 多語言和方言的識(shí)別:Whisper 能夠處理多種語言和方言的轉(zhuǎn)寫,這是傳統(tǒng)語音識(shí)別系統(tǒng)難以達(dá)到的。
- 嘈雜環(huán)境下的語音識(shí)別:在噪聲背景下準(zhǔn)確識(shí)別語音是一個(gè)挑戰(zhàn),Whisper 在這方面表現(xiàn)優(yōu)異,能夠在各種嘈雜環(huán)境下準(zhǔn)確轉(zhuǎn)寫語音。
- 提高無障礙通訊的可行性:通過為聽力受損者提供實(shí)時(shí)的語音轉(zhuǎn)文本服務(wù),Whisper 提高了他們的溝通能力和社會(huì)參與度。
- 節(jié)省時(shí)間和成本:自動(dòng)語音轉(zhuǎn)寫技術(shù)可以替代人工轉(zhuǎn)寫,大幅度節(jié)省時(shí)間和成本,尤其是在需要處理大量語音數(shù)據(jù)的場景中。
通過這些使用場景和解決的問題可以看出,Whisper 作為一個(gè)先進(jìn)的語音識(shí)別技術(shù),能夠在多個(gè)領(lǐng)域帶來實(shí)質(zhì)性的改進(jìn)和便利。
全球客服業(yè)務(wù)場景下要解決的問題主要有:
多語言和方言的識(shí)別:
我們提供了多語種的客服,每個(gè)語種其實(shí)也有方言的差別,比如英語分美式英語和中式英語,還有各種俚語。
嘈雜環(huán)境下的語音識(shí)別:
客服客人的語音溝通可能在弱網(wǎng)環(huán)境或者噪音環(huán)境,需要提高準(zhǔn)確度。
節(jié)省時(shí)間和成本:
如何評估客服的工作質(zhì)量,提高管理水平,提高甲方的滿意度,以前是靠抽查錄音,現(xiàn)在是借助轉(zhuǎn)文本+AI檢查和概要提取,節(jié)約了大量的時(shí)間。
目標(biāo)
假設(shè)你在做一個(gè)全球客服平臺(tái),解決客服服務(wù)過程中的問題,提高他們的效率和智能化。那么語音轉(zhuǎn)文本的能力也是標(biāo)配的。
概括一下,我們期望使用語音轉(zhuǎn)文本達(dá)成哪些業(yè)務(wù)目標(biāo)。
- 內(nèi)部管理角度:
提高科學(xué)評估客服服務(wù)質(zhì)量的效率。
- 客服角度:
提高客服的服務(wù)質(zhì)量,通過積累的語音轉(zhuǎn)換的文字,識(shí)別客人的意圖,情緒,提供輔助。
- 新業(yè)務(wù)形態(tài)支持:
AI語音客服+少量真人客服,是現(xiàn)在小微客戶的普遍訴求。
whisper介紹
對比選型
在選定whisper之前,我也對比了開源和商用的各種解決方案。
以下是對比維度的表格概覽:

然后要提到的要點(diǎn)就是,轉(zhuǎn)文服務(wù)需要GPU, 在云計(jì)算廠商購買含有GPU的服務(wù)器,最便宜一個(gè)月都要4000一個(gè)月起。
我們有分公司在海外,比如美國,有自建機(jī)房,可以自行購買高配置顯卡,搭建服務(wù)器,
這塊費(fèi)用相比于云廠商來說有優(yōu)勢。就是程序的安裝,維護(hù),對接需要時(shí)間去設(shè)計(jì),開發(fā),調(diào)試。
簡要介紹
項(xiàng)目中現(xiàn)在落地實(shí)踐的是whisper, 一個(gè)語音轉(zhuǎn)文本的組件。
whisper 音譯: 耳語
定位: 基于大規(guī)模弱監(jiān)督的魯棒語音識(shí)別
魯棒解釋一下: 在IT行業(yè)中,“魯棒性”(Robustness)通常指的是一個(gè)系統(tǒng)、網(wǎng)絡(luò)、軟件或硬件在面對錯(cuò)誤輸入、異常條件或某些意外狀況下仍能保持其功能和性能的能力。
魯棒性強(qiáng)的系統(tǒng)能夠處理錯(cuò)誤、適應(yīng)環(huán)境的變化,并在面對意外挑戰(zhàn)時(shí)仍維持運(yùn)行,而不會(huì)崩潰或者產(chǎn)生不可預(yù)測的行為。
它是github上是openai公司開源的一個(gè)項(xiàng)目。 開發(fā)語言是python .
地址:github的主域名 + openai/whisper
官方的文檔使用場景描述: Whisper是一個(gè)通用的語音識(shí)別模型。
它經(jīng)過大量多樣化音頻數(shù)據(jù)的訓(xùn)練,并且還是一個(gè)多任務(wù)模型,可以進(jìn)行多語言語音識(shí)別、語音翻譯和語言識(shí)別。
處理流程或者模型圖如下:

圖中是whipser的處理過程。我標(biāo)了4個(gè)小點(diǎn),簡單對齊一下:
1 訓(xùn)練數(shù)據(jù)
- whisper采用多任務(wù)的訓(xùn)練的數(shù)據(jù),對噪音或者背景音樂做了特化處理,支持各種語言,時(shí)長68萬個(gè)小時(shí)。
2 log-Mei
- log-Mei Spectrogram 介紹:
log-Mel Spectrogram 是一種在語音處理中常用的特征表示方法,特別是在語音識(shí)別與分析任務(wù)中。它是Mel頻譜(Mel Spectrogram)的對數(shù)版本,通常能更好地匹配人類的聽覺感知特性,因?yàn)镸el刻度是對頻率進(jìn)行非線性變換,以模擬人耳對不同頻率的響應(yīng)。
解釋
- Mel頻譜:是通過將FFT(快速傅里葉變換)得到的頻譜映射到一個(gè)以Mel刻度為單位的頻率尺度上得到的。這個(gè)尺度基于人耳對不同頻率聲音的感知能力,低頻下更加敏感,而高頻的感知能力遞減。
- 對數(shù)操作:對Mel頻譜應(yīng)用對數(shù)操作(logarithm)進(jìn)一步改進(jìn)。這是因?yàn)槿祟惖穆犛X是對聲強(qiáng)的對數(shù)變化敏感的,即分貝(dB)尺度。因此,應(yīng)用對數(shù)變換后,Spectrogram能更準(zhǔn)確地表示聲音的感知特征。
結(jié)合場景
在使用OpenAI的Whisper項(xiàng)目進(jìn)行語音轉(zhuǎn)文本任務(wù)時(shí),log-Mel Spectrogram 可能作為語音信號(hào)的輸入前處理步驟。Whisper 的模型在訓(xùn)練前會(huì)將語音信號(hào)轉(zhuǎn)換成這種格式,因?yàn)樗梢杂行У夭蹲降綄τ谡Z音識(shí)別至關(guān)重要的特征,并降低環(huán)境噪音和其他不相關(guān)變量的影響。
Whisper的使用
在Whisper模型中,如果你想要處理音頻文件進(jìn)行語音識(shí)別,流程可能如下:
-
預(yù)處理:音頻信號(hào)首先會(huì)被轉(zhuǎn)換成
log-Mel Spectrogram。這包括采樣、窗函數(shù)應(yīng)用、FFT、Mel濾波器組應(yīng)用,最后獲取對數(shù)Mel能量。
-
模型輸入:得到的
log-Mel Spectrogram會(huì)被提供給模型作為輸入特征。
- 模型預(yù)測:Whisper模型會(huì)根據(jù)輸入的Spectrogram進(jìn)行編碼、解碼等操作,最后輸出文本。
- 后處理:輸出的文本可能會(huì)經(jīng)過一些后處理步驟以提高可讀性或準(zhǔn)確性,比如標(biāo)點(diǎn)符號(hào)的添加,去除語言模型的偏差等。
核心要點(diǎn)歸納
-
log-Mel Spectrogram提供了一種與人類聽覺相匹配的特征表示。
- 適用于語音識(shí)別等任務(wù),因?yàn)槟軌蛴行Р东@語音關(guān)鍵特征。
- Whisper等模型使用這種表示作為輸入特征進(jìn)行訓(xùn)練和預(yù)測。
- 在實(shí)際應(yīng)用中,需要對音頻文件進(jìn)行相應(yīng)的預(yù)處理來得到
log-Mel Spectrogram。
3 多任務(wù)訓(xùn)練
"tokens in multitask training format" 在使用像 Whisper 這樣的模型時(shí),
引用的是如何在訓(xùn)練階段以一種格式化的方式組織和表示數(shù)據(jù),使得模型能同時(shí)學(xué)習(xí)多個(gè)任務(wù)。
多任務(wù)訓(xùn)練(Multitask Training)是機(jī)器學(xué)習(xí)中的一種技術(shù),
旨在通過同時(shí)訓(xùn)練一個(gè)模型來執(zhí)行多個(gè)相關(guān)任務(wù),以達(dá)到提高總體性能和效率的目的。
在 Whisper 項(xiàng)目的背景下,這意味著模型不僅被訓(xùn)練用以轉(zhuǎn)換語音到文本,
還可能包括其他任務(wù),比如語言識(shí)別、情感分析等。
如何利用 Tokens 進(jìn)行多任務(wù)訓(xùn)練
在多任務(wù)訓(xùn)練中,一個(gè)關(guān)鍵的挑戰(zhàn)是如何在模型內(nèi)部表示不同的任務(wù),
以及如何向模型指示當(dāng)前的輸入數(shù)據(jù)對應(yīng)于哪個(gè)特定任務(wù)。
這是通過使用特定的“tokens”來實(shí)現(xiàn)的,這些 tokens 作為數(shù)據(jù)輸入的一部分,
用來指示模型當(dāng)前處理的是哪種任務(wù)。
以 Whisper 為例,如果它被設(shè)計(jì)為處理多種任務(wù)(例如,同時(shí)進(jìn)行語音識(shí)別和語言檢測),
那么訓(xùn)練數(shù)據(jù)可能被格式化為包含特殊 tokens 的序列,
這些 tokens 明確指出每個(gè)數(shù)據(jù)樣本的任務(wù)。
例如:
- 對于語音識(shí)別任務(wù),輸入數(shù)據(jù)可能以
[語音識(shí)別]開頭的 token 作為提示,
緊接著是轉(zhuǎn)換成 log-Mel Spectrogram 的原始語音數(shù)據(jù)。
- 對于語言識(shí)別任務(wù),數(shù)據(jù)可能以
[語言識(shí)別]開頭,后跟相同的語音數(shù)據(jù)表示。
Whisper 項(xiàng)目中的實(shí)際應(yīng)用
雖然 Whisper 主要聚焦于將語音轉(zhuǎn)換為文本,
但是將它想象成一個(gè)多任務(wù)學(xué)習(xí)的框架不難。
在這種情況下,訓(xùn)練數(shù)據(jù)將需要按照上述方式進(jìn)行組織,
使得模型能夠區(qū)分不同任務(wù)的數(shù)據(jù)并相應(yīng)地調(diào)整其內(nèi)部表示和輸出。
多任務(wù)訓(xùn)練的好處包括:
- 知識(shí)共享:
模型的不同部分可以學(xué)習(xí)到在多個(gè)任務(wù)中通用的表示和特征,從而提高整體性能。
- 效率提高:
通過同時(shí)訓(xùn)練多個(gè)任務(wù),可以節(jié)約時(shí)間和計(jì)算資源,相比單獨(dú)訓(xùn)練每個(gè)任務(wù)。
雖然此說明提供了一個(gè)理論框架,目前 Whisper 主要專注于語音到文本的轉(zhuǎn)換,
但未來的版本或者其他類似項(xiàng)目可能會(huì)探索多任務(wù)學(xué)習(xí)的潛力,
從而擴(kuò)展其應(yīng)用范圍和提高效率。
一個(gè)Transformer序列到序列模型被訓(xùn)練用于各種語音處理任務(wù),
包括多語言語音識(shí)別、語音翻譯、口語識(shí)別和聲活動(dòng)檢測。
這些任務(wù)被聯(lián)合表示為一系列由解碼器預(yù)測的標(biāo)記,
使得單個(gè)模型能夠替代傳統(tǒng)語音處理流程中的許多階段。
多任務(wù)訓(xùn)練格式使用一組特殊的標(biāo)記作為任務(wù)指示符或分類目標(biāo)。
4 多任務(wù)訓(xùn)練格式拆解
想象一下,你在一個(gè)廚房里,你需要同時(shí)煮面條、煎雞蛋和煮咖啡。
如果你一次只做一件事,那么要完成所有工作可能需要很長時(shí)間。
但是,如果你能學(xué)會(huì)同時(shí)處理這三件事,你就可以在更短的時(shí)間內(nèi)做完。這就是所謂的“多任務(wù)處理”。
在Whisper項(xiàng)目中,這個(gè)比喻類似于我們讓計(jì)算機(jī)學(xué)習(xí)如何同時(shí)處理多種語音相關(guān)的任務(wù)。
Whisper是一個(gè)被設(shè)計(jì)用來聽懂人說的話并把它們寫下來的程序。
現(xiàn)在,假設(shè)我們不僅想要它寫下話,還想要它識(shí)別說話的人使用的是哪種語言,
甚至可能想要它能理解說話的人的感情狀態(tài)。
為了讓W(xué)hisper學(xué)會(huì)這些技能,我們需要采用一種特殊的訓(xùn)練方式,
即“多任務(wù)訓(xùn)練”。就像你需要知道何時(shí)該煮面條、煎雞蛋、煮咖啡一樣,
Whisper也需要知道它是在把語音轉(zhuǎn)換成文本,還是在識(shí)別語言或感情。
我們是通過添加一些特別的標(biāo)記或者符號(hào)(也就是“tokens”)來告訴它的。
這些標(biāo)記好比是一個(gè)信號(hào),告訴Whisper現(xiàn)在應(yīng)該用它的哪一部分技能。
這樣的訓(xùn)練方式可以讓W(xué)hisper更加聰明,它不僅可以更好地完成每一項(xiàng)任務(wù),
還可以學(xué)習(xí)到一些在所有任務(wù)中都有用的東西。
最終,它能更快更好地幫助我們處理語音,
就像一個(gè)經(jīng)驗(yàn)豐富的廚師能夠輕松地同時(shí)處理多道菜一樣。
安裝步驟
- 好的,讓我們來梳理一下上面提供的安裝說明,并假設(shè)你是一名開發(fā)人員。
以下是你需要按照順序執(zhí)行的步驟,以確保Whisper能夠正確安裝在你的系統(tǒng)上。
安裝環(huán)境準(zhǔn)備
確認(rèn)Python版本:確保你的系統(tǒng)中安裝了 Python 3.9.9。
確認(rèn)PyTorch版本:你需要安裝或者確認(rèn)已安裝 PyTorch 1.10.1 或其最新版本。你可以訪問 PyTorch 官網(wǎng)來獲取安裝指南。
**安裝rust : **
如果在安裝過程中遇到tiktoken的問題,可能需要安裝 Rust。
可以根據(jù) Rust 官方的開始頁面進(jìn)行安裝,并且可能需要將 Rust 的路徑添加到系統(tǒng)的 PATH 環(huán)境變量中,例如:
export PATH="$HOME/.cargo/bin:$PATH"
如果你發(fā)現(xiàn)了類似“No module named 'setuptools_rust'”的安裝錯(cuò)誤,你需要安裝 setuptools_rust:
pip install setuptools-rust
4.安裝FFmpeg 。這是對不同操作系統(tǒng)的安裝說明:
- Ubuntu或Debian:
sudo apt update && sudo apt install ffmpeg
- Arch Linux:
sudo pacman -S ffmpeg
5 .安裝 Whisper
- 安裝Whisper:通過pip安裝Whisper的最新版本,使用以下命令:
pip install -U openai-whisper
或者,如果你想直接從GitHub安裝最新的代碼庫,可以使用以下命令:
pip install git+https://github.com/openai/whisper.git
如果你需要更新Whisper,可以使用:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
安裝小結(jié)
概括來說,安裝Whisper需要你確保 Python 和 PyTorch 環(huán)境的正確設(shè)置,
使用pip命令安裝Whisper本身,確保系統(tǒng)中安裝了 FFmpeg(用于處理音頻文件),
以及可能需要的 Rust(對于一些底層編譯處理)。
在安裝過程中,遇到任何問題可以參考官方文檔或者搜索相應(yīng)的錯(cuò)誤信息來找到解決方案。
支持的模型和語言
有五種模型,其中四種提供了英文版本,英文版本的模型提供了速度和準(zhǔn)確性的權(quán)衡。
下面是可用模型的名稱及其相對于大型模型的大致顯存需求和推理速度;
實(shí)際速度可能取決于許多因素,包括可用的硬件。
純英語應(yīng)用程序的.en模型往往表現(xiàn)得更好,尤其是對于小型應(yīng)用程序。
在模型。我們觀察到,小的模型顯存差異變得不那么顯著。
在模型選擇上的表現(xiàn)也因語言有差異。
下面是對比表格:

Whisper支持多達(dá)100多種語言的語音識(shí)別,在 tokenizer.py 文件中列舉出來了所有支持的語言 ,其中包括但不限于以下語言:
- 英語(English)
- 漢語(Mandarin Chinese)
- 西班牙語(Spanish)
- 法語(French)
- 德語(German)
- 阿拉伯語(Arabic)
- 俄語(Russian)
- 葡萄牙語(Portuguese)
- 印度語(Hindi)
- 日語(Japanese)
- 土耳其語(Turkish)
- 意大利語(Italian)
- 韓語(Korean)
- 荷蘭語(Dutch)
- 瑞典語(Swedish)
- 芬蘭語(Finnish)
- 丹麥語(Danish)
- 波蘭語(Polish)
- 匈牙利語(Hungarian)
- 希臘語(Greek)
- 諾爾斯克(Norwegian)
- 泰語(Thai)
- 等等
名詞定義:
WER: 單詞錯(cuò)誤率
CER: 字符錯(cuò)誤率
Common Voice 15和Fleurs數(shù)據(jù)集是兩個(gè)語音及語言數(shù)據(jù)集,它們是用來訓(xùn)練和評估語音識(shí)別技術(shù)如Whisper等模型的工具
下圖顯示了按語言劃分的large-v3和large-v2模型的性能分解,使用了在Common Voice 15和Fleurs數(shù)據(jù)集上評估的WER(單詞錯(cuò)誤率)或CER(字符錯(cuò)誤率)
這個(gè)圖說明對主流語言的錯(cuò)誤率比較低。 后面隨著版本是升級這個(gè)錯(cuò)誤率會(huì)進(jìn)一步降低。

命令行使用
假設(shè)我是一名開發(fā)人員,基于Whisper的官方文檔,
以下是如何使用命令行來操作Whisper模型進(jìn)行語音轉(zhuǎn)錄和翻譯的概括:
語音轉(zhuǎn)錄
- 選擇模型:
可以通過--model參數(shù)來指定使用哪個(gè)預(yù)訓(xùn)練模型。
例如,--model medium會(huì)選擇中等大小的模型進(jìn)行轉(zhuǎn)錄。
如果不指定模型,Whisper默認(rèn)會(huì)使用小模型,這在轉(zhuǎn)錄英語時(shí)通常效果不錯(cuò)。
whisper audio.flac --model medium
- 指定語言:
若要轉(zhuǎn)錄非英語的音頻,可以使用--language參數(shù)指定語言代碼。
例如,--language Japanese指令會(huì)讓模型知道輸入文件是日語。
whisper japanese.wav --language Japanese
- 轉(zhuǎn)錄與翻譯:
如果你需要將非英語的語音內(nèi)容轉(zhuǎn)錄并翻譯成英語,可以通過添加--task translate參數(shù)來實(shí)現(xiàn)。
whisper japanese.wav --language Japanese --task translate
- 支持的文件格式:
Whisper支持多種音頻文件格式,包括.flac、.mp3和.wav等。
在命令行中,直接指定文件名和格式即可。
whisper audio.flac
whisper audio.mp3
whisper audio.wav --model medium
- 獲取幫助:
若需要查看Whisper支持的所有參數(shù)選項(xiàng),可以使用whisper --help命令。
whisper --help
通過上述概括,
可以理解Whisper提供了靈活的命令行界面來轉(zhuǎn)錄和翻譯語音文件。
作為開發(fā)人員,可以根據(jù)實(shí)際需要選擇合適的模型、指定語言,甚至執(zhí)行翻譯任務(wù),
以適應(yīng)不同的應(yīng)用場景和需求。
此外,通過查閱幫助文檔可以更加深入地了解不同的命令行選項(xiàng),從而充分利用Whisper模型的功能。
python使用方式
簡單使用:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
精細(xì)化使用:
import whisper
model = whisper.load_model("base")
# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)
# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)
# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")
# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
# print the recognized text
print(result.text)
使用python有優(yōu)勢,就是它的主框架是python寫的,
部分場景可以直接調(diào)整python代碼,修改主框架。
更多使用的例子
可以在 https://github.com/openai/whisper/discussions/categories/show-and-tell 頁面找到,
開源世界非常神奇 ,例如web演示,與其他工具的集成,不同平臺(tái)的端口等。
Whisper的代碼和模型權(quán)重在MIT許可下發(fā)布。詳見LICENSE。
whisper跟業(yè)務(wù)結(jié)合實(shí)踐
體系結(jié)構(gòu)
電話錄音轉(zhuǎn)換為文本對話信息。

whisper接口封裝
處理腳本:
#!/bin/bash
# 目錄路徑
input_dir="/sftp/openai/inwav"
output_dir="/sftp/openai/outjson"
log_file="/sftp/openai/logs/log.txt"
# 并發(fā)度
concurrency=1
# HTTP請求的URL
request_url="https://xx-qa.cn/api/phone/crm6/trans/callback?fileName="
request_url2="https://xx.cn/api/phone/crm6/trans/callback?fileName="
# 處理單個(gè)文件的函數(shù)
process_file() {
file_path="$1"
file_name=$(basename -- "$file_path")
output_file="${output_dir}/${file_name%.*}.json"
echo "$file_path , $file_name , $output_file"
# 如果輸出文件已存在,則跳過處理
if [ -f "$output_file" ]; then
echo "Output for $file_name already exists, skipping..." | tee -a "$log_file"
rm "$file_path"
# 將處理結(jié)果通過HTTP GET請求發(fā)送
response=$(curl -s "$request_url$file_name")
echo "Server $request_url$file_name: response: $response" | tee -a "$log_file"
response2=$(curl -s "$request_url2$file_name")
echo "Server $request_url2$file_name response: $response2" | tee -a "$log_file"
return
fi
file_size=$(stat -c%s "$file_path")
model="small"
# 記錄開始時(shí)間
start_time=$(date +%s)
# 執(zhí)行whisper命令
whisper "$file_path" --model "$model" --output_format json --output_dir "$output_dir"
# 記錄結(jié)束時(shí)間
end_time=$(date +%s)
# 計(jì)算耗時(shí)
duration=$((end_time - start_time))
log_message="Processed $file_name using $model model in $duration seconds."
echo "$log_message" | tee -a "$log_file"
echo "---------------------------------------" | tee -a "$log_file"
# 將處理結(jié)果通過HTTP GET請求發(fā)送
response=$(curl -s "$request_url$file_name")
echo "Server $request_url$file_name: response: $response" | tee -a "$log_file"
response2=$(curl -s "$request_url2$file_name")
echo "Server $request_url2$file_name response: $response2" | tee -a "$log_file"
# 刪除原wav文件
rm "$file_path"
# 日志分隔符
echo "---------------------------------------" | tee -a "$log_file"
}
export -f process_file
export input_dir
export output_dir
export log_file
export request_url
export request_url2
while true; do
# 查找所有wav文件
files=($(find "$input_dir" -name "*.wav"))
# 如果目錄下沒有wav文件,則休眠30秒
if [ ${#files[@]} -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - No wav files to process. Sleeping for 30 seconds..." >> "$log_file"
sleep 30
else
# 順序處理文件
for next_file in "${files[@]}"; do
process_file "$next_file"
done
fi
done
目前輸入是通過sftp的方式上傳到whisperx服務(wù)器,通道可能不太穩(wěn)定。
后面按照體系結(jié)構(gòu)設(shè)計(jì)的流程去調(diào)整;即監(jiān)聽redis消息,可以把語言帶過來,進(jìn)一步提高效率。
然后,結(jié)果的輸出,暫時(shí)沒有對接S3, 也是通過SFTP返回結(jié)果的;
數(shù)據(jù)模型設(shè)計(jì)
要設(shè)計(jì)一個(gè)電話記錄轉(zhuǎn)換文本的數(shù)據(jù)表模型,我們需要考慮幾個(gè)關(guān)鍵要素:
- 錄音文件信息:
保存錄音文件的基本信息,如文件名、文件路徑、錄音時(shí)長等。
- 轉(zhuǎn)錄狀態(tài):
追蹤錄音到文本轉(zhuǎn)換的狀態(tài)(例如:待轉(zhuǎn)錄、進(jìn)行中、已完成、失?。?/p>
- 轉(zhuǎn)錄結(jié)果:
保存轉(zhuǎn)錄文本的結(jié)果以及可能的錯(cuò)誤信息。
- 通知狀態(tài):
記錄是否已經(jīng)通知Java程序以及接口調(diào)用的相關(guān)信息。
- 時(shí)間戳:
記錄每個(gè)步驟的時(shí)間,如創(chuàng)建時(shí)間、轉(zhuǎn)錄開始時(shí)間、轉(zhuǎn)錄結(jié)束時(shí)間、通知時(shí)間。
基于以上要素,我們可以設(shè)計(jì)一個(gè)簡單的數(shù)據(jù)表模型:
CREATE TABLE call_transtxt (
id INT AUTO_INCREMENT PRIMARY KEY,
audio_filename VARCHAR(255) NOT NULL,
audio_file_path VARCHAR(255) NOT NULL,
audio_duration INT DEFAULT NULL, -- 可以存儲(chǔ)錄音時(shí)長(單位:秒)
transcript_status ENUM('pending', 'in_progress', 'completed', 'failed') NOT NULL DEFAULT 'pending',
transcript_text TEXT, -- 存儲(chǔ)轉(zhuǎn)錄結(jié)果
error_message VARCHAR(255), -- 存儲(chǔ)轉(zhuǎn)錄失敗的錯(cuò)誤信息
notify_status ENUM('not_notified', 'notifying', 'notified', 'notification_failed') NOT NULL DEFAULT 'not_notified',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
transcription_started_at DATETIME,
transcription_completed_at DATETIME,
notified_at DATETIME,
INDEX idx_audio_filename (audio_filename),
INDEX idx_transcript_status (transcript_status),
INDEX idx_notify_status (notify_status)
);
在這個(gè)表中:
-
id是主鍵,用于唯一標(biāo)識(shí)每條記錄。
-
audio_filename和audio_file_path存儲(chǔ)了錄音文件的名稱和路徑。
-
audio_duration是可選的,如果你有錄音時(shí)長的具體信息,可以存儲(chǔ)在這個(gè)字段中。
-
transcript_status標(biāo)記轉(zhuǎn)錄的狀態(tài),這對于追蹤進(jìn)度很有幫助。
-
transcript_text存儲(chǔ)實(shí)際的轉(zhuǎn)錄文本。
-
error_message用于記錄轉(zhuǎn)錄失敗時(shí)的錯(cuò)誤信息。
-
notify_status用于跟蹤是否已經(jīng)向Java程序發(fā)出通知。
- 時(shí)間戳字段
created_at、transcription_started_at、transcription_completed_at和notified_at分別用于記錄不同階段的時(shí)間點(diǎn)。
有了這張表,Java程序可以輪詢數(shù)據(jù)庫或通過其他機(jī)制(如數(shù)據(jù)庫觸發(fā)器等)來獲取轉(zhuǎn)錄狀態(tài)的更新,以及一旦轉(zhuǎn)錄完成或失敗時(shí)的通知。
轉(zhuǎn)錄完成后,Java程序可以從 transcript_text 字段獲取結(jié)果并記錄到對應(yīng)的表中。
如果需要處理更多的業(yè)務(wù)邏輯,比如用戶信息、權(quán)限驗(yàn)證等,
可能還需要設(shè)計(jì)額外的表格來滿足這些需求。
其它個(gè)業(yè)務(wù)關(guān)聯(lián)的,需要在業(yè)務(wù)代碼中進(jìn)行。但是存儲(chǔ)的信息已經(jīng)夠了。
業(yè)務(wù)集成效果
處理電話錄音文件:

轉(zhuǎn)換文本效果:

上圖概要是跟AI結(jié)合之后的效果。
AI質(zhì)檢效果:

小結(jié)
一句話小結(jié):AI時(shí)代結(jié)合Whisper可以低成本靈活的實(shí)現(xiàn)語音轉(zhuǎn)文本。
通過業(yè)務(wù)場景問題引入了對語音轉(zhuǎn)文本的需求,然后基于市面上的語音轉(zhuǎn)文本產(chǎn)品做了選型,選定了之后做了詳細(xì)的了解,并結(jié)合業(yè)務(wù)項(xiàng)目進(jìn)行了實(shí)踐。
AIGC思考
要做到實(shí)時(shí)的語音轉(zhuǎn)文本,代價(jià)目前還是比較高的,看了各種云計(jì)算廠商的價(jià)格都比較高。
跑語音轉(zhuǎn)文本需要GPU,即顯存。目前在aws上售價(jià)大概 4000美金。
自建從長期來看是節(jié)約成本的。

AI發(fā)展的展望點(diǎn)
- 實(shí)時(shí)多語言轉(zhuǎn)錄與翻譯整合:
- 在全球化不斷加深的今天,未來的語音轉(zhuǎn)文本技術(shù)將可能實(shí)現(xiàn)即時(shí)多語言轉(zhuǎn)錄和翻譯,
- 不僅能夠即時(shí)將話語轉(zhuǎn)為文字,還能跨越語言障礙,實(shí)現(xiàn)實(shí)時(shí)翻譯。這將大大促進(jìn)國際交流與合作。
- 應(yīng)用方向:國際會(huì)議實(shí)時(shí)轉(zhuǎn)錄、多語言媒體內(nèi)容的自動(dòng)生成等。
- 情緒與語境識(shí)別增強(qiáng):
- 語音轉(zhuǎn)文本技術(shù)未來可能會(huì)更加智能化,能夠識(shí)別說話人的情緒和語境
轉(zhuǎn)錄結(jié)果將不僅包含文字,還能包含情感傾向、口吻強(qiáng)度等信息。這將使得轉(zhuǎn)錄文本更加豐富和準(zhǔn)確。
- 應(yīng)用方向:心理健康分析、客服情緒評估、自動(dòng)化營銷反饋分析等。
- 語音合成和虛擬個(gè)性化代表(VPA)的融合:
- 語音轉(zhuǎn)文本技術(shù)與語音合成技術(shù)的結(jié)合將使虛擬個(gè)性化代表(如虛擬助手、角色)更加真實(shí)和個(gè)性化。用戶可以創(chuàng)建具有特定聲音和個(gè)性的VPAs來自動(dòng)回應(yīng)電話、郵件或其他通信形式。
- 應(yīng)用方向:個(gè)性化的虛擬助手、角色扮演游戲、教育等。
全球客服領(lǐng)域的發(fā)展設(shè)想
- 智能客服語音助手:
- 利用語音轉(zhuǎn)文本技術(shù),未來的客服系統(tǒng)將能夠提供24/7的服務(wù),通過智能語音助手即時(shí)響應(yīng)客戶的咨詢,不僅能夠理解自然語言,還能夠根據(jù)語境提供個(gè)性化的建議和解決方案。
- 進(jìn)一步發(fā)展:結(jié)合人工智能學(xué)習(xí)客戶的歷史交互數(shù)據(jù),使服務(wù)更加個(gè)性化和高效。
- 多語言無縫服務(wù)體驗(yàn):
- 隨著語音轉(zhuǎn)文本和翻譯技術(shù)的進(jìn)步,客服將能夠無障礙地為全球客戶提供服務(wù),即便客戶和客服人員使用不同的語言。這將大幅度提高全球客戶滿意度和品牌的國際形象。
- 進(jìn)一步發(fā)展:客服系統(tǒng)能夠自動(dòng)判斷客戶的語言偏好,并提供相應(yīng)語言的服務(wù)。
- 語音分析與情感智能:
- 未來的客服系統(tǒng)可能會(huì)應(yīng)用更先進(jìn)的語音分析技術(shù),通過語音理解客戶的情感狀態(tài),并據(jù)此調(diào)整回應(yīng)策略。這種情感智能可以幫助企業(yè)更好地理解客戶需求,提高解決問題的能力。
- 進(jìn)一步發(fā)展:結(jié)合大數(shù)據(jù)分析,系統(tǒng)可以在全局層面上預(yù)測和回應(yīng)客戶需求趨勢,實(shí)現(xiàn)主動(dòng)服務(wù)。
這些技術(shù)的發(fā)展將大幅提高客戶體驗(yàn),降低企業(yè)運(yùn)營成本,并提升解決問題的效率,最終推動(dòng)全球客服行業(yè)的轉(zhuǎn)型和升級。
原創(chuàng)不易,關(guān)注誠可貴,轉(zhuǎn)發(fā)價(jià)更高!轉(zhuǎn)載請注明出處,讓我們互通有無,共同進(jìn)步,歡迎溝通交流。
我會(huì)持續(xù)分享Java軟件編程知識(shí)和程序員發(fā)展職業(yè)之路,歡迎關(guān)注!