ManySpeech.AliParaformerAsr 使用指南
一、簡介
ManySpeech.AliParaformerAsr 是 ManySpeech 語音處理套件中一個專門的語音識別組件,支持paraformer-large、paraformer-seaco-large、sensevoice-small 等模型,其底層借助 Microsoft.ML.OnnxRuntime 對 onnx 模型進行解碼,具備諸多優勢:
- 多環境支持:可兼容 net461+、net60+、netcoreapp3.1 以及 netstandard2.0+ 等多種環境,能適配不同開發場景的需求。
- 跨平臺編譯特性:支持跨平臺編譯,無論是 Windows、macOS 還是 Linux、Android 等系統,都能進行編譯使用,拓展了應用的范圍。
- 支持 AOT 編譯:使用起來簡單便捷,方便開發者快速集成到項目中。
二、安裝方式
推薦通過 NuGet 包管理器進行安裝,以下為兩種具體安裝途徑:
(一)使用 Package Manager Console
在 Visual Studio 的「Package Manager Console」中執行以下命令:
Install-Package ManySpeech.AliParaformerAsr
(二)使用.NET CLI
在命令行中輸入以下命令來安裝:
dotnet add package ManySpeech.AliParaformerAsr
(三)手動安裝
在 NuGet 包管理器界面搜索「ManySpeech.AliParaformerAsr」,點擊「安裝」即可。
三、配置說明(參考:asr.yaml 文件)
用于解碼的 asr.yaml 配置文件中,大部分參數無需改動,不過存在可修改的特定參數:
use_itn: true:在使用 sensevoicesmall 模型配置時開啟此參數,即可實現逆文本正則化功能,例如可將類似“123”這樣的文本轉換為“一百二十三”,讓識別結果的文本表達更符合常規閱讀習慣。
四、代碼調用方法
(一)離線(非流式)模型調用
- 添加項目引用 在代碼中添加以下引用:
using ManySpeech.AliParaformerAsr;
using ManySpeech.AliParaformerAsr.Model;
- 模型初始化和配置
- paraformer 模型初始化方式:
string applicationBase = AppDomain.CurrentDomain.BaseDirectory;
string modelName = "speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx";
string modelFilePath = applicationBase + "./" + modelName + "/model_quant.onnx";
string configFilePath = applicationBase + "./" + modelName + "/asr.yaml";
string mvnFilePath = applicationBase + "./" + modelName + "/am.mvn";
string tokensFilePath = applicationBase + "./" + modelName + "/tokens.txt";
OfflineRecognizer offlineRecognizer = new OfflineRecognizer(modelFilePath, configFilePath, mvnFilePath, tokensFilePath);
- SeACo-paraformer 模型初始化方式:
- 首先,需在模型目錄下找到 hotword.txt 文件,并按照每行一個中文詞匯的格式添加自定義熱詞,例如添加行業術語、特定人名等熱詞內容。
- 然后,在代碼中新增相關參數,示例如下:
string applicationBase = AppDomain.CurrentDomain.BaseDirectory;
string modelName = "paraformer-seaco-large-zh-timestamp-onnx-offline";
string modelFilePath = applicationBase + "./" + modelName + "/model.int8.onnx";
string modelebFilePath = applicationBase + "./" + modelName + "/model_eb.int8.onnx";
string configFilePath = applicationBase + "./" + modelName + "/asr.yaml";
string mvnFilePath = applicationBase + "./" + modelName + "/am.mvn";
string hotwordFilePath = applicationBase + "./" + modelName + "/hotword.txt";
string tokensFilePath = applicationBase + "./" + modelName + "/tokens.txt";
OfflineRecognizer offlineRecognizer = new OfflineRecognizer(modelFilePath: modelFilePath, configFilePath: configFilePath, mvnFilePath, tokensFilePath: tokensFilePath, modelebFilePath: modelebFilePath, hotwordFilePath: hotwordFilePath);
- 調用過程
List<float[]> samples = new List<float[]>();
//此處省略將 wav 文件轉換為 samples 的相關代碼,詳細可參考 ManySpeech.AliParaformerAsr.Examples 示例代碼
List<OfflineStream> streams = new List<OfflineStream>();
foreach (var sample in samples)
{
OfflineStream stream = offlineRecognizer.CreateOfflineStream();
stream.AddSamples(sample);
streams.Add(stream);
}
List<OfflineRecognizerResultEntity> results = offlineRecognizer.GetResults(streams);
- 輸出結果示例
歡迎大家來體驗達摩院推出的語音識別模型
非常的方便但是現在不同啊英國脫歐歐盟內部完善的產業鏈的紅利人
he must be home now for the light is on他一定在家因為燈亮著就是有一種推理或者解釋的那種感覺
elapsed_milliseconds:1502.8828125
total_duration:40525.6875
rtf:0.037084696280599808
(二)實時(流式)模型調用
- 添加項目引用 同樣在代碼中添加以下引用:
using ManySpeech.AliParaformerAsr;
using ManySpeech.AliParaformerAsr.Model;
- 模型初始化和配置
string encoderFilePath = applicationBase + "./" + modelName + "/encoder.int8.onnx";
string decoderFilePath = applicationBase + "./" + modelName + "/decoder.int8.onnx";
string configFilePath = applicationBase + "./" + modelName + "/asr.yaml";
string mvnFilePath = applicationBase + "./" + modelName + "/am.mvn";
string tokensFilePath = applicationBase + "./" + modelName + "/tokens.txt";
OnlineRecognizer onlineRecognizer = new OnlineRecognizer(encoderFilePath, decoderFilePath, configFilePath, mvnFilePath, tokensFilePath);
- 調用過程
List<float[]> samples = new List<float[]>();
//此處省略將 wav 文件轉換為 samples 的相關代碼,以下是批處理示意代碼:
List<OnlineStream> streams = new List<OnlineStream>();
OnlineStream stream = onlineRecognizer.CreateOnlineStream();
foreach (var sample in samples)
{
OnlineStream stream = onlineRecognizer.CreateOnlineStream();
stream.AddSamples(sample);
streams.Add(stream);
}
List<OnlineRecognizerResultEntity> results = onlineRecognizer.GetResults(streams);
//單處理示例,只需構建一個 stream
OnlineStream stream = onlineRecognizer.CreateOnlineStream();
stream.AddSamples(sample);
OnlineRecognizerResultEntity result = onlineRecognizer.GetResult(stream);
//具體可參考 ManySpeech.AliParaformerAsr.Examples 示例代碼
- 輸出結果示例
正是因為存在絕對正義所以我我接受現實式相對生但是不要因因現實的相對對正義們就就認為這個世界有有證因為如果當你認為這這個界界
elapsed_milliseconds:1389.3125
total_duration:13052
rtf:0.10644441464909593
五、相關工程
- 語音端點檢測:為解決長音頻合理切分問題,可添加 ManySpeech.AliFsmnVad 庫,通過以下命令安裝:
dotnet add package ManySpeech.AliFsmnVad
- 文本標點預測:針對識別結果缺乏標點的情況,可添加 ManySpeech.AliCTTransformerPunc 庫,安裝命令如下:
dotnet add package ManySpeech.AliCTTransformerPunc
具體的調用示例可參考對應庫的官方文檔或者 ManySpeech.AliParaformerAsr.Examples 項目。該項目是一個控制臺/桌面端示例項目,主要用于展示語音識別的基礎功能,像離線轉寫、實時識別等操作。
六、其他說明
- 測試用例:以
ManySpeech.AliParaformerAsr.Examples作為測試用例。 - 測試 CPU:使用的測試 CPU 為 Intel? Core? i7-10750H CPU @ 2.60GHz(2.59 GHz)。
- 支持平臺:
- Windows:Windows 7 SP1 及更高版本。
- macOS:macOS 10.13 (High Sierra) 及更高版本,也支持 ios 等。
- Linux:適用于 Linux 發行版,但需要滿足特定的依賴關系(詳見.NET 6 支持的 Linux 發行版列表)。
- Android:支持 Android 5.0 (API 21) 及更高版本。
七、模型下載(支持的 ONNX 模型)
以下是 ManySpeech.AliParaformerAsr 所支持的 ONNX 模型相關信息,包含模型名稱、類型、支持語言、標點情況、時間戳情況以及下載地址等內容,方便根據具體需求選擇合適的模型進行下載使用:
八、模型介紹
(一)模型用途
Paraformer 是由達摩院語音團隊提出的一種高效的非自回歸端到端語音識別框架,本項目中的 Paraformer 中文通用語音識別模型采用工業級數萬小時的標注音頻進行訓練,這使得模型具備良好的通用識別效果,可廣泛應用于語音輸入法、語音導航、智能會議紀要等多種場景,且有著較高的識別準確率。
(二)模型結構
Paraformer 模型結構主要由 Encoder、Predictor、Sampler、Decoder 以及 Loss function 這五部分構成,其結構示意圖可查看此處,各部分具體功能如下:

- Encoder:它可以采用不同的網絡結構,像 self-attention、conformer、SAN-M 等,主要負責提取音頻中的聲學特征。
- Predictor:是一個兩層的 FFN(前饋神經網絡),其作用在于預測目標文字的個數,并且抽取目標文字對應的聲學向量,為后續的識別處理提供關鍵數據。
- Sampler:屬于無可學習參數模塊,它能夠依據輸入的聲學向量和目標向量,生成含有語義的特征向量,以此來豐富識別的語義信息。
- Decoder:結構與自回歸模型類似,但它是雙向建模(自回歸模型為單向建模),通過雙向的結構能夠更好地對上下文進行建模,提升語音識別的準確性。
- Loss function:除了包含交叉熵(CE)與 MWER(最小詞錯誤率)這兩個區分性優化目標外,還涵蓋了 Predictor 優化目標 MAE(平均絕對誤差),通過這些優化目標來保障模型的精度。
(三)主要核心點
- Predictor 模塊:基于 Continuous integrate-and-fire (CIF) 的預測器(Predictor)來抽取目標文字對應的聲學特征向量,借助這種方式能夠更為精準地預測語音中目標文字的個數,提高語音識別的準確性。
- Sampler:通過采樣操作,將聲學特征向量與目標文字向量變換為含有語義信息的特征向量,然后與雙向的 Decoder 配合,能夠顯著增強模型對于上下文的理解和建模能力,使識別結果更符合語義邏輯。
- 基于負樣本采樣的 MWER 訓練準則:這一訓練準則有助于模型在訓練過程中更好地優化參數,減少識別錯誤,提升整體的識別性能。
(四)更詳細的資料
- 論文: Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition
- 論文解讀:Paraformer: 高識別率、高計算效率的單輪非自回歸端到端語音識別模型
引用參考 [1] https://github.com/alibaba-damo
浙公網安備 33010602011771號