基本概念
语音识别(Automatic Speech Recognition,ASR):也被称为自动语音识别,其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。
自然语言理解(Natural Language Understanding,NLU): 俗称人机对话,人工智能的分支学科。研究用电子计算机模拟人的语言交际过程,使计算机能理解和运用人类社会的自然语言如汉语、英语等,实现人机之间的自然语言通信,以代替人的部分脑力劳动,包括查询资料、解答问题、摘录文献、汇编资料以及一切有关自然语言信息的加工处理。
语音识别SDK离在线融合版(Baidu Voice Recognition Client V2, BDASRv2):文中简称为BDASRv2。BDASRv2是一个封装了语音采集、语音预处理、云端识别、离线识别等功能的语音识别解决方案。使用BDASRv2可以快速在应用程序中集成语音识别功能。
BDVRClient是运行在Android 平台的一体化语音识别解决方案,以JAR包 + SO库的形式发布,BDVRClient支持下列功能:
• 语音识别控件:集成提示音、音量反馈动效整套交互的对话框控件,方便开发者快速集成;
• 基本功能:录音,语音数据处理,端点检测、网络通讯和状态通知,返回识别结果;
• 播放提示音:在录音前后播放提示音,优化用户体验;
• 监听语音能量:实时反馈用户当前说话声音能量强度;
• 语义理解:将语音识别成领域相关的语义结果。
语义理解
意图表示协议描述语言
为了易于人阅读,同时也方便机器解析和生成,意图表示协议采用 json 语言进行描述,采用 gb18030 编码。json 语言的基本概念:
属性名/属性值
即键值对(key-value)
数组
在 json 中是“[]”括起来的内容,数据结构为["value1","value2",...],取值方式和所有语言中一样,使用索引获取,属性值的类型可以是数字、字符串、数组、对象。
对象
在 json 中表示为“{}”括起来的内容,数据结构为 {key1:value1,key2:value2,...}的键值对的结构。在面向对象的语言中,key 为对象的属性,value 为对应的属性值,所以很容易理解,取值方法为对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
意图表示协议
自然语言文本(以下简称 query)。query 的意图表示由如下键值对和数组构成:
. raw_text:用户的原始输入文本
. parsed_text:经过分词,纠错,改写处理后的文本
. version:协议版本号
. results:意图表示数组
意图表示数组中存放多个意图表示对象。每个意图表示对象含有领域、意图、置信度三个键值对和一个意图对象。
领域(domain):同一类型的数据或资源,以及围绕数据或资源提供的服务称为一个领域。领域数据一般是结构化的表格数据,有一个主键(主属性);领域一般以名词命名。如: 列车:围绕车次数据的列车时刻查询和预订服务,主键是车次 天气:围绕天气数据的查询服务,主键是日期 电话:围绕联系人-号码数据的电话拨打、通话记录查询服务,主键是电话号码
意图(intent):代表用户对领域数据的操作,如查询、查询某一个属性的值、预订、拨打等。一般以动词命名。
置信度(score):意图表示的置信度,多个意图表示对象按置信度降序排序。
意图对象(object):描述意图的数据(键值对的集合),也是实现意图所需要的参数。
意图表示以 json 语言描述,json 语言中“对象”指的是键值对的集合。
语义理解示例:
query:北京西站到无锡的高铁
{
"raw_text": "北京西站到无锡的高铁",
"parsed_text": "北京 西站 到 无锡 的 高铁",
"results": [
{
"domain": "train",
"intent": "query",
"score": 1,
"object": {
"arrival_city": "无锡",
"start_city": "北京",
"start_station": "北京西站",
"train_type": "高速动车"
}
}
]
}
领域取值
本表格详细描述了领域(domain)的取值。
意图取值
意图和领域相关,不同领域下有多种意图,我们将意图抽样为一般查询(query)和具体属性值的查询(get)两类,部分领域还有特殊的意图。详见第三节各领域意图表示。
一般查询是指用户对某一个领域的通用查询,不针对特定属性,如“北京到上海的飞机”;具体属性值的查询(下文简称属性查询)是用户针对一个领域的特定属性进行查询,如“ho1252 航班什么时候起飞”,用户查询的是航班 ho1252 的起飞时间属性。
属性值类型
基本数据类型,如 string、int、float 之外,还定义了时间(time)、日期(date)、折扣(discount)等属性值类型。
在以上类型定义的基础上,还定义了组合类型和范围类型,如时间日期(date_time)、时间段(time_range)、日期段(date_range)、时间日期段(date_time_range)、金额范围(amount_range)、折扣范围(discount_range)等。
日期(date)
格式是:yyyy-mm-dd,4位阿拉伯数字代表年份,2位数字代表月份,2位数字代表日期。支持多种自然语言表述的日期到上述标准格式的归一化解析。
• 一般日期或农历日期。如果没有年或月,则默认当年当月。示例:
• 2013年1月10号:2013-01-10
• 8 月 15:2013-08-15
• 农历二月初一:2013-03-12
• 相对日期,示例:
• 明天:2013-09-26
• 下周一:2013-09-30
• 节日,示例:
• 春节:2013-02-10
• 明年春节:2014-01-31
• 父亲节:2013-06-16
时间(time)
格式是:hh:mm:ss,24小时制,分别用2位数字代表时、分、秒。支持多种自然语言表述的时间到上述标准格式的归一化解析。示例:
• 十点整:10:00:00
• 下午三点半:15:30:00
时间日期(date_time)
时间和日期的组合类型。示例:
query:明天早上八点
{
"date":"2013-09-26",
"time":"08:00:00",
}
日期段(date_range)
以逗号间隔的两个日期表示日期段的开始和结束。示例:
• 明后天:2013-09-26,2013-09-27
• 下周末:2013-10-05,2013-10-06
时间段(time_range)
以逗号间隔的两个时间表示时间段的开始和结束。如“上午”、“明天下午”等常见的时间段表述,起始和结束的时间点见表格 2-2 常见时间段的开始和结束时间点定义。示例:
• 下午:12:00:00,18:59:59
• 早上:04:00:00,11:59:59
常见时间段的开始和结束时间点定义如下表
时间日期段(date_time_range)
以两个时间日期类型的值分别表示时间范围和起始(begin)和结束(end)。示例:
query:明天下午 3 点半到后天早上 8 点
{
"begin":{
"date":"2013-09-26",
"time":"15:00:00"
},
"end":{
"date":"2013-09-27",
"time":"08:00:00"
}
}
query:中秋节假期
{
"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"
}
}
重复时间(repeat_time)
提醒、闹钟等设置需要用到:示例:
query:每天早上十点
{
"time":"10:00:00",
"repeat":"00001111111",
}
注意:repeat 是 11 个字符的字符串,从左到右分别是月份(01)日期(23)和星期(4~10)。对月份和日期位,非 0 值代表该月或日期进行提醒,对 7 个星期位,每位对应一天,值为 1 代表该天进行提醒。
query:每天中午十二点整
{
"time":"12:00:00",
"repeat":"00001111111",
}
query:每个月 11 号 12 点
{
"time"::"12:00:00",
"repeat":"00110000000",
}
query:每年的元旦
{
"repeat":"01010000000",
}
金额范围(amount_range)
以两个浮点数代表金额范围。示例:
{
"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 之间的浮点数。示例:
• 三折:0.3
• 半价:0.5
折扣范围(discount_range)
以两个折扣类型的值分别表示折扣范围的最小值(begin)和最大值(end)。示例:
query:三折到八五折:
{
"begin":0.3,
"end":0.85,
}