基本概念
語音識別(Automatic Speech Recognition,ASR):也被稱為自動語音識別,其目標(biāo)是將人類的語音中的詞匯內(nèi)容轉(zhuǎn)換為計算機(jī)可讀的輸入,例如按鍵、二進(jìn)制編碼或者字符序列。
自然語言理解(Natural Language Understanding,NLU): 俗稱人機(jī)對話,人工智能的分支學(xué)科。研究用電子計算機(jī)模擬人的語言交際過程,使計算機(jī)能理解和運用人類社會的自然語言如漢語、英語等,實現(xiàn)人機(jī)之間的自然語言通信,以代替人的部分腦力勞動,包括查詢資料、解答問題、摘錄文獻(xiàn)、匯編資料以及一切有關(guān)自然語言信息的加工處理。
語音識別SDK離在線融合版(Baidu Voice Recognition Client V2, BDASRv2):文中簡稱為BDASRv2。BDASRv2是一個封裝了語音采集、語音預(yù)處理、云端識別、離線識別等功能的語音識別解決方案。使用BDASRv2可以快速在應(yīng)用程序中集成語音識別功能。
BDVRClient是運行在Android 平臺的一體化語音識別解決方案,以JAR包 + SO庫的形式發(fā)布,BDVRClient支持下列功能:
? 語音識別控件:集成提示音、音量反饋動效整套交互的對話框控件,方便開發(fā)者快速集成;
? 基本功能:錄音,語音數(shù)據(jù)處理,端點檢測、網(wǎng)絡(luò)通訊和狀態(tài)通知,返回識別結(jié)果;
? 播放提示音:在錄音前后播放提示音,優(yōu)化用戶體驗;
? 監(jiān)聽語音能量:實時反饋用戶當(dāng)前說話聲音能量強(qiáng)度;
? 語義理解:將語音識別成領(lǐng)域相關(guān)的語義結(jié)果。
語義理解
意圖表示協(xié)議描述語言
為了易于人閱讀,同時也方便機(jī)器解析和生成,意圖表示協(xié)議采用 json 語言進(jìn)行描述,采用 gb18030 編碼。json 語言的基本概念:
屬性名/屬性值
即鍵值對(key-value)
數(shù)組
在 json 中是“[]”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為["value1","value2",...],取值方式和所有語言中一樣,使用索引獲取,屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象。
對象
在 json 中表示為“{}”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key1:value1,key2:value2,...}的鍵值對的結(jié)構(gòu)。在面向?qū)ο蟮恼Z言中,key 為對象的屬性,value 為對應(yīng)的屬性值,所以很容易理解,取值方法為對象.key 獲取屬性值,這個屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
意圖表示協(xié)議
自然語言文本(以下簡稱 query)。query 的意圖表示由如下鍵值對和數(shù)組構(gòu)成:
. raw_text:用戶的原始輸入文本
. parsed_text:經(jīng)過分詞,糾錯,改寫處理后的文本
. version:協(xié)議版本號
. results:意圖表示數(shù)組
意圖表示數(shù)組中存放多個意圖表示對象。每個意圖表示對象含有領(lǐng)域、意圖、置信度三個鍵值對和一個意圖對象。
領(lǐng)域(domain):同一類型的數(shù)據(jù)或資源,以及圍繞數(shù)據(jù)或資源提供的服務(wù)稱為一個領(lǐng)域。領(lǐng)域數(shù)據(jù)一般是結(jié)構(gòu)化的表格數(shù)據(jù),有一個主鍵(主屬性);領(lǐng)域一般以名詞命名。如: 列車:圍繞車次數(shù)據(jù)的列車時刻查詢和預(yù)訂服務(wù),主鍵是車次 天氣:圍繞天氣數(shù)據(jù)的查詢服務(wù),主鍵是日期 電話:圍繞聯(lián)系人-號碼數(shù)據(jù)的電話撥打、通話記錄查詢服務(wù),主鍵是電話號碼
意圖(intent):代表用戶對領(lǐng)域數(shù)據(jù)的操作,如查詢、查詢某一個屬性的值、預(yù)訂、撥打等。一般以動詞命名。
置信度(score):意圖表示的置信度,多個意圖表示對象按置信度降序排序。
意圖對象(object):描述意圖的數(shù)據(jù)(鍵值對的集合),也是實現(xiàn)意圖所需要的參數(shù)。
意圖表示以 json 語言描述,json 語言中“對象”指的是鍵值對的集合。
語義理解示例:
query:北京西站到無錫的高鐵
{
"raw_text": "北京西站到無錫的高鐵",
"parsed_text": "北京 西站 到 無錫 的 高鐵",
"results": [
{
"domain": "train",
"intent": "query",
"score": 1,
"object": {
"arrival_city": "無錫",
"start_city": "北京",
"start_station": "北京西站",
"train_type": "高速動車"
}
}
]
}
領(lǐng)域取值
本表格詳細(xì)描述了領(lǐng)域(domain)的取值。


意圖取值
意圖和領(lǐng)域相關(guān),不同領(lǐng)域下有多種意圖,我們將意圖抽樣為一般查詢(query)和具體屬性值的查詢(get)兩類,部分領(lǐng)域還有特殊的意圖。詳見第三節(jié)各領(lǐng)域意圖表示。
一般查詢是指用戶對某一個領(lǐng)域的通用查詢,不針對特定屬性,如“北京到上海的飛機(jī)”;具體屬性值的查詢(下文簡稱屬性查詢)是用戶針對一個領(lǐng)域的特定屬性進(jìn)行查詢,如“ho1252 航班什么時候起飛”,用戶查詢的是航班 ho1252 的起飛時間屬性。
屬性值類型
基本數(shù)據(jù)類型,如 string、int、float 之外,還定義了時間(time)、日期(date)、折扣(discount)等屬性值類型。
在以上類型定義的基礎(chǔ)上,還定義了組合類型和范圍類型,如時間日期(date_time)、時間段(time_range)、日期段(date_range)、時間日期段(date_time_range)、金額范圍(amount_range)、折扣范圍(discount_range)等。
日期(date)
格式是:yyyy-mm-dd,4位阿拉伯?dāng)?shù)字代表年份,2位數(shù)字代表月份,2位數(shù)字代表日期。支持多種自然語言表述的日期到上述標(biāo)準(zhǔn)格式的歸一化解析。
? 一般日期或農(nóng)歷日期。如果沒有年或月,則默認(rèn)當(dāng)年當(dāng)月。示例:
? 2013年1月10號:2013-01-10
? 8 月 15:2013-08-15
? 農(nóng)歷二月初一:2013-03-12
? 相對日期,示例:
? 明天:2013-09-26
? 下周一:2013-09-30
? 節(jié)日,示例:
? 春節(jié):2013-02-10
? 明年春節(jié):2014-01-31
? 父親節(jié):2013-06-16
時間(time)
格式是:hh:mm:ss,24小時制,分別用2位數(shù)字代表時、分、秒。支持多種自然語言表述的時間到上述標(biāo)準(zhǔn)格式的歸一化解析。示例:
? 十點整:10:00:00
? 下午三點半:15:30:00
時間日期(date_time)
時間和日期的組合類型。示例:
query:明天早上八點
{
"date":"2013-09-26",
"time":"08:00:00",
}
日期段(date_range)
以逗號間隔的兩個日期表示日期段的開始和結(jié)束。示例:
? 明后天:2013-09-26,2013-09-27
? 下周末:2013-10-05,2013-10-06
時間段(time_range)
以逗號間隔的兩個時間表示時間段的開始和結(jié)束。如“上午”、“明天下午”等常見的時間段表述,起始和結(jié)束的時間點見表格 2-2 常見時間段的開始和結(jié)束時間點定義。示例:
? 下午:12:00:00,18:59:59
? 早上:04:00:00,11:59:59
常見時間段的開始和結(jié)束時間點定義如下表

時間日期段(date_time_range)
以兩個時間日期類型的值分別表示時間范圍和起始(begin)和結(jié)束(end)。示例:
query:明天下午 3 點半到后天早上 8 點
{
"begin":{
"date":"2013-09-26",
"time":"15:00:00"
},
"end":{
"date":"2013-09-27",
"time":"08:00:00"
}
}
query:中秋節(jié)假期
{
"begin":{
"date":"2013-09-19",
"time":"00:00:00"
},
"end":{
"date":"2013-09-21",
"time":"23:59:59"
}
}
query:明天晚上
{
"begin":{
"date":"2013-09-26",
"time":"17:00:00"
},
"end":{
"date":"2013-09-26",
"time":"23:59:59"
}
}
重復(fù)時間(repeat_time)
提醒、鬧鐘等設(shè)置需要用到:示例:
query:每天早上十點
{
"time":"10:00:00",
"repeat":"00001111111",
}
注意:repeat 是 11 個字符的字符串,從左到右分別是月份(01)日期(23)和星期(4~10)。對月份和日期位,非 0 值代表該月或日期進(jìn)行提醒,對 7 個星期位,每位對應(yīng)一天,值為 1 代表該天進(jìn)行提醒。
query:每天中午十二點整
{
"time":"12:00:00",
"repeat":"00001111111",
}
query:每個月 11 號 12 點
{
"time"::"12:00:00",
"repeat":"00110000000",
}
query:每年的元旦
{
"repeat":"01010000000",
}
金額范圍(amount_range)
以兩個浮點數(shù)代表金額范圍。示例:
{
"begin":100.00,
"end":200.00
}
query:300 元左右
{
"begin":240.00,
"end":360.00
}
query:200 元以下
{
"begin":0.00,
"end":200.00
}
query:300 元以上
{
"begin":300.00",
"end":-1
}
注意:-1 代表無窮大。
折扣(discount)
價格的折扣,如一折、八五折、半價等,解析成 0 到 1 之間的浮點數(shù)。示例:
? 三折:0.3
? 半價:0.5
折扣范圍(discount_range)
以兩個折扣類型的值分別表示折扣范圍的最小值(begin)和最大值(end)。示例:
query:三折到八五折:
{
"begin":0.3,
"end":0.85,
}