精华内容
下载资源
问答
  • 智能语音对话系统解密 作为移动互联网新入口,智能语音系统竞争日趋激烈。语音识别、纠错、查询、意图理解、智能问答、语音信息搜索服务、上下文补全处理…………本文将解析如何在功能和技术层面打造一款成功的语音...
  • 在《基于ESP32的人工智能语音教具》项目中,已经将语音识别、语音合成、文字对话、语音对话及自然语言处理融合到一起,成为一个多功能系统,但在硬件方面采用按钮按下的触发,来进行录制语音并发送,过于机械化。...

    1. 背景

    《基于ESP32的人工智能语音教具》项目中,已经将语音识别、语音合成、文字对话、语音对话及自然语言处理融合到一起,成为一个多功能系统,但在硬件方面采用按钮按下的触发,来进行录制语音并发送,过于机械化。本项目希望采用语音活动检测(Voice Activity Detection,VAD)来进行语音的判断,从而做一个自动语音对话系统。

    2. 硬件

    在《基于ESP32的人工智能语音教具》项目中采用的是嵌入式系统与云端服务器进行结合,在嵌入式系统上进行的是数据传输的工作,复杂的操作可以在服务器端实现,如搭建自主实现的语音识别功能和实现更智能的对话功能等。
    在《在树莓派上实现基于VAD的自动语音对话系统》项目中,由于现有的语音及文字对话系统比较成熟,本项目决定采用现有的API,如灵云的语音识别/语音合成和图灵机器人的文字对话API,重点将在如何实现自动的语音对话系统。这里选用树莓派3B+,具有较强性能,拓展起来方便,且资料丰富。
    在这里插入图片描述

    3. 软件

    3.1 树莓派环境搭建

    • Raspberry Pi 3B+ 及 配套电源线
    • 读卡器 及 Micro SD卡 8G及以上
    • 显示屏 及 HDMI线
    • USB键盘 及 USB鼠标(无线键鼠也可)
    • 安装Win32 DiskImager
    • 下载RASPBIAN系统

    给树莓派安装RASPBIAN系统,从官网(https://www.raspberrypi.org/downloads/raspbian/)下载,下载ZIP解压成.img文件。
    在这里插入图片描述
    用Win32 DiskImager将.img写入对应Micro SD卡中。
    在这里插入图片描述
    写入成功后,插入HDMI连接显示屏,开机配置WiFi账号密码。在左上角蓝牙标志的边上有网络连接,点击选择无线网络,并输入密码。当出现WIFI标志时,即连接成功,如下图。
    在这里插入图片描述
    打开terminal软件,在下图所示位置。
    在这里插入图片描述
    使用命令行安装pyaudio库(用于语音处理):

    sudo apt-get install portaudio.dev
    sudo apt-get install python3-pyaudio	
    sudo apt-get install pulseaudio
    

    使用webrtcvad库进行语音活动检测,webrtcvad采用的是GMM模型(可参考WebRTC之VAD算法这篇博文):

    sudo pip3 install webrtcvad
    

    3.2 接口封装

    3.2.1 语音识别与语音合成

    选用一个平台的语音识别服务,本项目选用的是灵云(http://www.hcicloud.com/),在开发者平台上注册账号和选择语音识别和语音合成功能。申请成功后,如下图所示。在这里插入图片描述
    下面是根据官方开发文档所编写的语音识别类和语音合成类。
    语音识别类使用16k.pcm,识别结果为北京科技馆的音频作为测试。

    # -*- coding: utf-8 -*-
    #ASR
    import urllib.parse, urllib.request
    import time
    import json
    import hashlib
    		
    class LinyunAsrMode(object):
        
        def __init__(self):
            self.appkey = "545d5467"
            self.capkey = "asr.cloud.freetalk"
            self.audioformat = "pcm16k16bit"
            self.developerkey = "4811cb1e437414777250201c0d9b854a"
            self.url = "http://api.hcicloud.com:8880/asr/Recognise"
            self.nowdate = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())      
              
        def get_linyun_text(self, voicedata):
            #voicedata is binary content,saved in bytes
            body = voicedata
            x_config = "capkey={0},audioformat={1},identify={2},index={3},addpunc=yes".format(
                    self.capkey, self.audioformat, self.nowdate, "-1")
    
            x_checksum_content = self.nowdate + self.developerkey
            x_checksum = hashlib.md5(x_checksum_content.encode('utf-8')).hexdigest().upper()
            
            x_header = {"x-app-key": self.appkey,
                    'x-sdk-version': "5.0",
                    'x-request-date': self.nowdate,
                    'x-session-key': x_checksum,
                    "x-task-config": x_config,
                    "x-udid": "101:1234567890",
                    "x-result-format": "json",
                    "content-type": "application/x-www-form-urlencoded"}
    
            req = urllib.request.Request(url = self.url,
                                         data = body,
                                         headers = x_header, 
                                         method = 'POST')
            
            result = urllib.request.urlopen(req)
            result = result.read().decode('utf-8')
            json_data = json.loads(result)
            json_ResponseInfo = json_data['ResponseInfo']
            json_Result = json_ResponseInfo['Result']
            json_Score = json_Result['Score']
            if 0 != int(json_Score):
                return json_Result['Text']
            else:
                print(json_ResponseInfo)
                return None
            
    
    # %% main function
    if __name__ == '__main__':
        
        f = open("16k.pcm", 'rb')
        file_content = f.read()
        linyun = LinyunAsrMode()
        Asr_result = linyun.get_linyun_text(file_content)
        if Asr_result != None:
            print(Asr_result)
    
    # -*- coding: utf-8 -*-
    #TTS
    import time
    import hashlib
    import urllib.request
    import urllib.parse
    from pyaudio import PyAudio, paInt16
    
    def writeFile(file, content):
        with open(file, 'wb') as f:
            f.write(content)
            f.close()
            
    class LingyunTtsMode(object):
        
        def __init__(self):
            self.developerkey = "4811cb1e437414777250201c0d9b854a"
            self.appkey = "545d5467"
            self.audioformat = "pcm16k16bit"
            self.speed = "5"
            self.volume = "10"
            self.url ="http://test.api.hcicloud.com:8880/tts/SynthText"
            self.nowdate = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            
            
        def GetAudioType(self, type):
            return{
                    1:"tts.cloud.xiaokun",
                    2:"tts.cloud.haobo",
                    3:"tts.cloud.xixi",
                    4:"tts.cloud.cartoonjing",
                    5:"tts.cloud.diaoxiong",
                    6:"tts.cloud.jiangman",
                    7:"tts.cloud.liangjiahe",
                    8:"tts.cloud.shenxu",
                    9:"tts.cloud.wangjing.v9",
                    10:"tts.cloud.xiaokun.v9",
                    11:"tts.cloud.xumengjuan",
                    12:"tts.cloud.zhaqian",
                    13:"tts.cloud.zhangnan",
                    }.get(type, "tts.cloud.wangjing")
        '''
        #	 * 为语音合成http通讯方法
        #	 * byteResult这个返回的就是 16K16Bit PCM数据        
        #	 * type : 需要合成的文本  整形
        #	 * 第二个参数需要填 合成的声音类型 如女生 男生等
        #	 * 中文女声  ---0
        #	 * 中文女声  ---1
        #	 * 中文男声  ---2
        #	 * 女童声      ---3
        #	 * 卡通女声  ---4
        #	 * 幽默男声  ---5
        #	 * 利落女声  ---6
        #	 * 呆萌女童声  ---7
        #	 * 利落男声  ---8
        #	 * 知性女声  ---9
        #	 * 舒缓女声  ---10
        #	 * 嗲柔女声  ---11
        #	 * 成熟女声  ---12
        #	 * 嘹亮女声  ---13
        #	 * 其他就是默认是 0
        #	 * 
        #	 * return : 返回的就是 16K16Bit PCM数据  
        '''           
        def lingyun_tts(self, content, type):
            body = content.encode('utf8')
            capkey = self.GetAudioType(type)
            x_config = "capkey={0},audioformat={1},speed={2},volume={3}".format(
                    capkey, self.audioformat, self.speed, self.volume)
            
            x_checksum_content = self.nowdate + self.developerkey
            x_checksum = hashlib.md5(x_checksum_content.encode('utf-8')).hexdigest().upper()
            
            x_header = {"x-app-key": self.appkey,
                    'x-sdk-version': "5.0",
                    'x-request-date': self.nowdate,
                    'x-session-key': x_checksum,
                    "x-task-config": x_config,
                    "x-udid": "101:1234567890",
                    "content-type": "application/x-www-form-urlencoded"}
    
            req = urllib.request.Request(url = self.url,
                                         data = body,
                                         headers = x_header, 
                                         method = 'POST')
            
            req = urllib.request.Request(self.url, data = body, headers = x_header)
            
            response = urllib.request.urlopen(req)
            body = response.read()
            body_s = str(body)
            start = body_s.index('</ResponseInfo>') + len('</ResponseInfo>')
            
            body_l = list(body)
            sound = bytes(body_l[start:])
            return sound
            
    if __name__ == '__main__':
        
        Text = "你叫什么名字呀"
        lingyun = LingyunTtsMode()
        body = lingyun.lingyun_tts(Text, 11)
        p = PyAudio()
        stream = p.open(
                format = paInt16,
                channels = 1,
                rate = 16000,
                output = True)  
        stream.write(body)
    
        stream.stop_stream()
        stream.close
        p.terminate()
    

    3.2.2 文字对话

    文字识别使用图灵机器人的API。

    # -*- coding: utf-8 -*-
    # DLG
    import json
    from urllib.request import urlopen,Request
    from urllib.error import URLError
    from urllib.parse import urlencode
    
    class TuringChatMode(object):
        """this mode base on turing robot"""
    
        def __init__(self):
            self.turing_url = 'http://openapi.tuling123.com/openapi/api?'
        def get_turing_text(self,text):
            turing_url_data = dict(
                key = '25e9346d64e646c59530f889abb2907d',
                info = text,
                userid = '28d2444e030a',
    
            )
            self.request = Request(self.turing_url + urlencode(turing_url_data))
            try:
                w_data = urlopen(self.request)
            except URLError:
                raise IndexError("No internet connection available to transfer txt data")
            except:
                raise KeyError("Server wouldn't respond (invalid key or quota has been maxed out)")
    
            response_text = w_data.read().decode('utf-8')
            json_result = json.loads(response_text)
            return json_result['text']
    
    if __name__ == '__main__':
        print("Now u can type in something & input q to quit")
        turing = TuringChatMode()
        while True:
            msg = input("\nMaster:")
            if msg == 'q':
                exit("u r quit the chat !")         # 设定输入q,退出聊天。
            else:
                turing_data = turing.get_turing_text(msg)
                print("Robot:",turing_data)
    

    3.3 实时语音活动检测

    自动语音对话系统,需要知道什么时候人开始说话,什么时候人结束说话,并将人说话这段语音进行语音识别,再进行文字对话和语音合成,这就需要实时对语音实时进行VAD检测。
    这里使用生产者消费者模型, 生产者消费者模型当中有两大类重要的角色,一个是生产者,负责造数据的任务,本项目是录制声音;另一个是消费者,接收造出来的数据进行进一步的操作,本项目中是对录制的声音进行实时VAD检测及后续操作。

    为什么要使用生产者消费者模型?
    这里引用(python)生产者消费者模型这篇博文的表述:

    在并发编程中,如果生产者处理速度很快,而消费者处理速度比较慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个等待的问题,就引入了生产者与消费者模型。让它们之间可以不停的生产和消费。

    实时VAD检测及后续操作
    在webrtcvad中是对20ms的数据进行vad检测,若检测到语音活动则返回1,否则返回0。但对于vad检测返回的信号,不能简单拿来作为语音段,需要经过一定处理,包括去除抖动和松开/按下判断等。在防抖判断时,若判断此段语音为抖动,则清除这段语音有效标志;在松开/按下判断时,若语音有效标志为1,则储存语音,若语音标志位从1到0变化且0持续不到一定时间(如0.5秒)则继续储存语音,若语音标志位从1到0变化且0持续超过一定时间(如0.5秒)则将之前储存的语音片段进入语音识别过程。
    此时暂停和清零生产者的生产,即停止和清零录音,直至语音合成结束后恢复。

    4. 不足

    1)使用的是python而不是c语言,程序效率可以提高。
    2)基于VAD的自动语音对话系统存在着不足,若在嘈杂环境中(信噪比低)会出现误触发的情况,且在与其他人交流的时候,该系统会自动识别为与其对话。这里可以采用基于唤醒词的自动语音对话系统。

    展开全文
  •  某银行内,一位阿姨因等待办理业务的时间太长,与快宝机器人展开了一场来自灵魂的对话对于银行工作人员的不满,大妈向快宝说道:“你们的工作人员在里面哄孩子,怎么不出来办业务“;快宝答:'我们柜台里的哥哥姐姐...

    这是阿拉灯神丁Vicky的第00 8 篇文章

         就从最近短视频平台的大妈与机器人快宝的聊天说起吧。

    001.JPG

            

         某银行内,一位阿姨因等待办理业务的时间太长,与快宝机器人展开了一场来自灵魂的对话对于银行工作人员的不满,大妈向快宝说道:“你们的工作人员在里面哄孩子,怎么不出来办业务“;快宝答:'我们柜台里的哥哥姐姐也在很努力的办业务呢'听到这个回答,阿姨试图将快宝的身体转向柜台方向,说:”你往里瞅瞅,是不是在哄孩子“快宝嘤嘤嘤的好委屈:'你不要触碰我了,跟我说话就可以了'。

     

         “快宝”说话的语速和声音非常清晰,逻辑性连贯,跟普通人说话的方式简直一模一样,比苹果的SIRI强太多,有网友甚至怀疑快宝“背后”是专门的人通过摄像头在和人对话。

     

          随着人工智能相关技术的更新迭代,如今,ASR与TTS技术相对来将已经成熟,自然语言的表示和理解已经取得了很大的进展,在行业的竞争壁垒中也逐步削弱,未来智能对话机器人的核心竞争力在于理解了用户的意图之后所提供的差异化服务。下面我就在产品角度聊聊语音对话机器人的相关知识点,希望带给各位一些思考。

     

    如图1所示,智能语音对话系统的组成

     

          智能语音对话系统大致可分为五个基本模块:语音识别(ASR),自然语音理解(NLU),对话管理(DM),自然语言生成(NLG),语音合成(TTS)。

     

    002.JPG

            

          语音识别将语音转化文字,让机器读取用户再说什么,自然语言理解是理解用户说的话是什么意思,分析用户说话的意图,和对用户语言中核心词槽的解析。而对话管理(对话管理),DM)就是人机对话中的CPU,控制着整个人机对话的过程。对话管理的任务主要有下四点,对话状态维护(对话状态跟踪,DST),生成系统决策(对话政策),作为接口与后端/任务模型进行交互,提供语义表达的期望值(解释的预期)。由对话管理分析出用户的意图之后并做出相关行为,自然语言生成对用户任务的处理结果以文字形式生成,然后语音合成将此结果合成为语音说出来。就形成了人机对话的整个过程。

     

    2,人机对话的分类

     

        个人将常见的人机对话分为日常撩拨型和任务驱动型。

     

          最常见的就是任务驱动的多轮对话,用户是带着明确的目的如订餐,订票,叫车等比较复杂的需求来,而这中间有很多限制条件,用户并不能一次将任务所需的关键信息一次性说完,说清楚,因此就要分多轮进行QA问答一方面,用户在对话过程中,可以不断修正和完善自己的需求;另一方方面,当用户在陈述需求不够具体和明确时,机器人可以通过询问,澄清和确认来帮助用户寻找满意的结果,并且在任务的驱动下与用户完成日常的交互,以此不断完善对于用户需求的满足。

     

          而日常撩拨型对话中的关键,是要根据用户唤醒机器人时和唤醒之后第一句话的日期时间和语气来判断用户当前的情绪,比如:周五晚上9点下班回家,而唤醒时语气中带着些许匹配疲惫与不开心,此时就需要机器人的安慰和鼓励,以此满足用户的情感需求。当用户心情愉悦时,对话中还可以偶尔“皮一下”,对话中一定要有让用户惊艳的句子和当下比较流行的词语,有趣和好玩是日常撩拨对话中的刚需,而这需要训练师不断更新语料库,以此来持续性对智能语音设备的依恋。

     

    003.png

     

    3,对话管理的重要性

     

          对话管理对于多轮对话又异常重要,因为单词对话每次聊天都需要用户去唤醒语音对话机器人,用户必须每次将需求完成的说出,否则几次对话下来用户将会产生烦躁的情绪,语音。对话机器人将会变得鸡肋下面我们来分解下对话管理的大致任务:

     

    1,对话状态维护(DST)

          维护和更新对话状态,t + 1的时刻的对话状态,依赖于前一时刻吨的对话状态,和之前时刻吨的系统行为,以及当前时刻t + 1中对应的用户行为。因此整个依赖关系就是。006.png007.png008.png009.png010.png

     

    2,生成系统决策(对话政策)

          根据DST中的对话状态,产生系统行为,决定下一步做什么可以监测到用户的输入,就是NLU的过程,以及系统对于NLU的反馈行为,就是NLG。

     

    3,作为接口与后端/任务模型进行交互。

          作为应用程序接口与服务器端或任务模型进行请求交互,获取反馈结果,生成文字结果。

     

    如图4所示,提供语义表达的期望值

          根据用户输入的表达,包括语言表达和语义解析,做出满足用户期望的语义表达,满足用户需求。

    多轮对话中为了清晰明确的理解用户的意图和需求,将对话建模过程中缺少的信息形成一个填槽的过程,槽就是多轮对话当中将初步用户意图转化为明确用户指令所需要补全的信息。一个槽与任务处理中所需要获取的一种信息相对应。槽没有顺序,缺什么槽就向用户询问什么信息。

     

    基于框架式的对话管理(基于框架的DM)需要如下要点: 

     

        如图1所示,框架:槽位的集合,定义了需要由用户提供哪些信息;

        2,对话状态:记录了哪些槽位已经被填充,那些槽位待填充;

        3,行为选择:下一步该向用户询问哪些信息,填充哪些槽位,进行何种操作,对哪些槽位进行加权填充。

     

          基于框架的系统本质上是一个生成系统,不同类型的输入触发不同的生成规则,每个生成灵活的填入相应的模板,这些模型的和框架的设计只为在满足用户需求的前提下,尽快的完成必要信息的获取。

     

    如图4所示,语音对话系统的设计要点

     

    设计语音对话系统需要注意的5个要点:

          行为模式的设计,交互过程的设计,知识结构的设计,人格情绪的设计,熟悉过程的设计,我们又可以将这5中设计要点进行情景细分:

     

    004.png

        

          在整体架构设计当中,加入这些细分情景的收集,透过用户与机器对话的行为细分模式,包括知识结构和人格情绪的收集,来出一个虚拟人格。此模式就相当于某宝或某东商城根据用户的点击,搜索和浏览行为结合大数据生成的千人千面,通过语音交互的使用过程,了解用户习惯进而达到更好的体验。

     

         语音对话体验可分为三个方向:声音形象,对话交互模式和对话内容,它们分别对应GUI时代的品牌设计,交互设计,服务设计,产品经理需要把握好机器人与人的平衡点,不要过度人性化,以免某些点不能满足用户的过渡预期,而产生的失望。

        

         人类的大脑依赖所学的知识进行思考,逻辑推理和语言理解。而机器人则是依赖数据的训练,互联网时代积累的大量的数据能为训练机器人提供的强有力的保障,对话机器人以数据为基础,利用深度学习模型和算法,对人类世界进行感知,识别和判断,并通过知识图谱对人类的知识进行梳理,整合,推理,变成有智慧的AI。

     

    005.png

     

    5,对话机器人所面临的问题

     

          人的复杂性(复合),随机性(随机),和非理性化(illogica)的特点导致人机对话在应用场景下面临者各种各样的问题,包括但不限于如下问题:

        如图1所示,模型描述能力与业务复杂度的权衡;

        2,用户对话偏离业务涉及的路径及边界;

              (如:系统问用户导航的目的地时,用户反问了一句某地天气情况)

        3,多轮对话的容错性;

              (如:3轮对话的场景,用户已经完成2轮,第3轮由于ASR或NLU错误,导致前功尽弃,如此用户体验就非常差)

        如图4所示,多场景的的切换和回复;

        5,降低交互变更难度,适应业务迅速变化;

        6,跨场景信息继承。

     

    6,结束语

     

          未来对话机器人除了被动回复用户的请求外,主动预测用户需求并提供即时方案成为必然的发展方向,当用户没有给出明确的需求情况下,提醒即将发生的事件或推荐有用的服务,人们会逐渐依靠他们来管理自己的工作生活,提高生活效率及幸福感。

     

          对话机器人的目标不一定是解决用户面临的所有问题,而是成为用户的虚拟助理。通过与用户建立情感链接,理解用户,长期范围内帮助他们,与用户建立多种形式的交流,包括文本,语音和图像以及视频功能。

            

            011.jpeg

     

    展开全文
  • ELIZA这是典型的聊天机器人 .它并不真正“理解”对话框的语法结构,但可能是一个好的开始 .非常simple example在SWISH . 这是一些代码在我的HD上睡觉(IIRC,它来自Clocksin - Mellish,移植到SWI-Prolog) .eliza :-...

    ELIZA这是典型的聊天机器人 .

    它并不真正“理解”对话框的语法结构,但可能是一个好的开始 .

    非常simple example在SWISH . 这是一些代码在我的HD上睡觉(IIRC,它来自Clocksin - Mellish,移植到SWI-Prolog) .

    eliza :-

    write('? '), read_word_list(Input), eliza(Input), !.

    eliza([bye]) :-

    write('Goodbye. I hope I have helped you'), nl.

    eliza(Input) :-

    pattern(Stimulus, Response),

    match(Stimulus, Dictionary, Input),

    match(Response, Dictionary, Output),

    reply(Output),

    !, eliza.

    match([N|Pattern], Dictionary, Target) :-

    integer(N), lookup(N, Dictionary, LeftTarget),

    append(LeftTarget, RightTarget, Target),

    match(Pattern, Dictionary, RightTarget).

    match([Word | Pattern], Dictionary, [Word | Target]) :-

    atom(Word), match(Pattern, Dictionary, Target).

    match([], _Dictionary, []).

    pattern([i,am,1],[how,long,have,you,been,1,'?']).

    pattern([1,you,2,me],[what,makes,you,think,i,2,you,'?']).

    pattern([i,like,1],[does,anyone,else,in,your,family,like,1,'?']).

    pattern([i,feel,1],[do,you,often,feel,that,way,'?']).

    pattern([1,X,2],[can,you,tell,me,more,about,your,X,'?']) :- important(X).

    pattern([1],[please,go,on]).

    important(father).

    important(mother).

    important(son).

    important(sister).

    important(brother).

    important(daughter).

    reply([Head | Tail]) :-

    write(Head), write(' '), reply(Tail).

    reply([]) :- nl.

    lookup(Key, [(Key, Value) | _Dict], Value).

    lookup(Key, [(Key1, _Val1) | Dictionary], Value) :-

    Key \= Key1, lookup(Key, Dictionary, Value).

    read_word_list(Ws) :-

    read_line_to_codes(user_input, Cs),

    atom_codes(A, Cs),

    tokenize_atom(A, Ws).

    编辑回答评论...

    好吧,那段代码是由Prolog大师编写的,而不是我:)所以,我们应该尝试理解它......这两个子句实现了'incremental dictionary',数据结构不完整 . 它们在刺激和响应之间绑定任意短语,并且是ELIZA这种紧凑编码的关键(原始程序并非如此简单,尽管......) . 要遵循用法,Prolog调试是可能的:

    ?- leash(-all),spy(lookup).

    ?- eliza.

    ? i am happy

    * Call: (12) lookup(1, _G4620, _G4621)

    * Exit: (12) lookup(1, [(1, _G4616)|_G4613], _G4616)

    * Call: (15) lookup(1, [(1, [happy])|_G4613], _G4645)

    * Exit: (15) lookup(1, [(1, [happy])|_G4613], [happy])

    how long have you been happy ?

    ? i think you hate me

    * Call: (14) lookup(1, _G4821, _G4822)

    * Exit: (14) lookup(1, [(1, _G4817)|_G4814], _G4817)

    * Call: (16) lookup(2, [(1, [i, think])|_G4814], _G4834)

    * Call: (17) lookup(2, _G4814, _G4834)

    * Exit: (17) lookup(2, [(2, _G4829)|_G4826], _G4829)

    * Exit: (16) lookup(2, [(1, [i, think]), (2, _G4829)|_G4826], _G4829)

    * Call: (19) lookup(2, [(1, [i, think]), (2, [hate])|_G4826], _G4858)

    * Call: (20) lookup(2, [(2, [hate])|_G4826], _G4858)

    * Exit: (20) lookup(2, [(2, [hate])|_G4826], [hate])

    * Exit: (19) lookup(2, [(1, [i, think]), (2, [hate])|_G4826], [hate])

    what makes you think i hate you ?

    ...

    您可以看到关联列表的尾部在退出时是空闲的,因此根据需要扩展了Dictionary . 巧妙地使用不完整的数据结构 . 参见“Prolog的艺术”第15章

    展开全文
  • 语音作为互联网的一种入口方式,正在侵入我们的生活,人机交互的核心——对话系统,对交互的应用至关重要,人脑与机器智能的结合,能够突破现有技术瓶颈吗?这里就有必要重点介绍下人机交互相关...

    雷锋网按:本文来源公众号“极限元”,作者温正棋,极限元技术副总裁、中国科学院自动化研究所副研究员,中科院—极限元“智能交互联合实验室”主任。雷锋网(公众号:雷锋网)授权转载。

    语音作为互联网的一种入口方式,正在侵入我们的生活,人机交互的核心——对话系统,对交互的应用至关重要,人脑与机器智能的结合,能够突破现有技术瓶颈吗?这里就有必要重点介绍下人机交互相关的核心技术。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    从整个交互系统接入用户的输入信息开始,包括语音、人脸、多模态情感相关的信息,我们在对话系统里面对输入的信息进行理解,通过这个对话部分以后产生输出,最后用文字也可以用语音合成展现出来,这就是整个流程,其中我们关注的最主要的是语音部分以及对话系统部分,其他的多模态今天的分享不会涉及太多。

    国内研究语音相关的团队主要包括科研院所、语音技术公司以及互联网公司三部分:

    • 科研院所主要包括高校和科学院,比如科学院里有声学所、自动化所,高校里面研究比较多的清华、北大、西工大、科大、上海交大等,这些都是在语音圈里占有较高位置的老牌队伍。

    • 语音技术公司包括我们比较熟悉的科大讯飞、云知声、思必驰、极限元等。

    • 互联网公司包括BAT、搜狗等拥有强大的语音技术团队来支撑着其本身的很多业务。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    在应用对话系统时,首先从语音输入开始要有一些前端处理,包括硬件和软件的前期处理;接下来是语音内容,说话人识别等相关的内容进行判别,对话系统根据输入信息来进行对话逻辑的分析,以及对应语言的产生,最后由语音合成系统来合成语音,在这里重点介绍一下前端处理、语音识别、说话人识别语音合成等相关技术。

    前端处理技术的研究进展

    前端处理包括回升消除、噪声抑制、混响抑制等技术,刚开始时研究前端处理的人员并不多。近年来特别是ECHO的推出,把一些远场的问题融入到语音识别等系统中,所以这部分的研究在这几年兴起比较快。语音识别的研究从一些简单的数据如手机的录音扩展到远场的语音识别,这些促进了前端处理技术的发展,在语音圈里做前端处理比较牛的应该是陈景东老师。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    回声消除

    回声消除在远场语音识别中是比较典型功能,最典型的应用是在智能终端播放音乐的时候,远场扬声器播放的音乐会回传给近端麦克风,此时就需要有效的回声消除算法来抑制远端信号的干扰,这是在智能设备如音响、智能家居当中都需要考虑的问题。比较复杂的回声消除系统,近端通过麦克风阵列采集信号,远端是双声道扬声器输出,因此近端需要考虑如何将播出形成算法跟回声消除算法对接,远端需要考虑如何对立体声信号相关。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    噪声抑制

    噪声抑制可以有多通道的也可以有单通道的,今天主要介绍单通道噪声抑制,单通道语音增强通过DNN的方法进行增强,语音信号是有一个谐波结构的,通过加入噪声这个谐波结构会被破坏掉,语音增强的主要目的就是抬高波峰,降低波谷,这个训练对DNN来说是比较容易的。但是也有实验研究表明,基于DNN的语音增强对浊音段效果会比较好,但对轻音段效果并不是很好,语音的浊音段有显著谐波结构,因此要有目的去训练这个模型。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    混响抑制

    声音在房间传输过程中经过墙壁或者其他障碍物的反射后到达麦克风,从而生成混响语音,混响的语音会受到房间大小、声源麦克风的位置、室内障碍物等因素的影响,大多数的房间内混响时间大概在200--1000毫秒范围内,如果混响时间过短,声音会发干,枯燥无味,不具备清晰感,混响时间过长会使声音含混不清,需要合适的声音才能圆润动听。

    前端处理涉及的内容比较多,除了前面提到的还包括多说话人分离、说话人移动过程中的声音采集、不同的麦克风阵列结构、各种噪声和房间模型如何更好的建模等。

    音识别技术的研究进展

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    有了前端处理以后,反馈回来的信息会加到训练语音识别模型,语音识别主要是建立一个声学参数到发音单元的映射模型或者叫判别模型,现在的方法从传统的GMM-HMM模型到DNN-HMM混合模型,再到最新的端到端的CTC相关的。语音信号经过特征提取得到声学特征,再通过声学特征训练得到声学模型,声学模型结合语言模型以及发音辞典构建声码器以后,最终识别出文本。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    GMM用来对每个状态进行建模,HMM描述每个状态之间的转移概率,这样就构建了一个音素或三因子的HMM模型建模单元,GMM训练速度相对较快,而且GMM声学模型可以做得比较小,可以移植到嵌入式平台上,其缺点是GMM没有利用真的上下文信息,同时GMM不能学习深层的非线性特征变换,建模能力有限。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    随着深度神经网络的兴起,深度神经网络也应用到了语音识别里面声学建模,主要是替换了GMM-HMM模型里的GMM模型,上端仍然是HMM模型加状态转移,在GMM模型里面可能有500至1万个状态,这个状态可以通过DNN模型预测出每个的概率,输出的就是一个三因子,我们两者结合起来构建基于DNN-HMM的声学模型。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    DNN能利用的上下文系统在输入端进行扩帧,同时又非线性变换可以学习到,但DNN不能利用历史信息捕捉当前的任务,因为扩帧是有限的,不可能无限扩下去,所以他输入的历史信息还是有限的。因此,自然而然的有了基于RNN的混合声学模型,将DNN模块替换成RNN模块,RNN能够有效的对历史信息进行建模,并且能够将更多的历史信息保存下来,可于将来的预测。但是在RNN训练过程中会存在梯度消失和梯度膨胀的问题,梯度膨胀可以在训练过程中加一些约束来实现,当梯度超过一定值以后设定一个固定值,但是梯度消失很难去把握,因此有很多方法解决这种问题,比较简单的一个方法是将里面的RNN单元变成长短时记忆模型LSTM,这样长短时记忆模型能够将记忆消失问题给很好的解决,但这样会使计算量显著增加,这也是在构建声学模型中需要考虑的问题。

    CNN用于声学模型的建模有一个比较老的方法,在DNN的前端加两层的CNN变换,这样只对参数做了一定的非线性变换,变化完以后输入DNN和LSTM里面,但是随着非常深的CNN在图象识别里面成功应用,这些也被运用到了声学模型中,比如说谷歌、微软、IBM均在2016年发表成果证明非常深的CNN模型已经超越其他深度神经网络的模型,其词错率是最低的。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    CTC本身是一个训练准则并不算声学模型,在DNN输出中,每个phone他占用的帧数可能有十帧二十帧。因为它不是一个尖峰,但CTC会把它变成一个尖峰,CTC可以将每一帧变成一个senones或者对应一个因数,但每个因数只需几帧就可以了,在解码的时候可以把一些blank帧给去掉,这样可以显著的增加解码速度。减少解码帧有两种方法,一种是通过减帧、跳帧的方法,另一种在解码过程中有一个beam,特别是遇到beam的时候把并值减少,我们的实验结果跳帧会比较好。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    在NLP中应用较多的Attention端对端的声学模型能够从RNN历史信息中挑选出比较重要的信息对词学进行建模,目前的准确率比较低,这应该是一种趋势,至少在NLP中证明了它是比较成功的。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    在声学模型中还有TDNN和chain模型,在声学模型中帧及运算过程中会有一些重叠,它有效的去除了信息冗余,嵌入模型也是一个训练准则,采用单状态模型,融入了MMI区分信息链准则,在训练过程中可以实现跳帧,这也加快了解码速度。总结起来现在的语音识别模型更新特别快,最重要的核心内容就是数据,如果数据量足够大的话,做出一个好的结果还是比较容易的,而且我们现在语音识别核心模块主要是在一些解码模块上调优上,这相当于是一种艺术。

    语音合成技术的研究进展

    语音合成是建立文本参数到声学参数的影射模型,目前的方法有拼接合成、参数合成还有端对端的语音合成。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    基于HMM统计参数的语音合成是在训练过程中建立文本参数,如韵律参数、普参数和基频参数的映射模型,通过决策数聚类的方法对每一个上下文相关的文本特征构建GMM模型,训练其GMM模型,在合成时对输入文本预测出它的GMM以后,通过参数生成算法,生成语音参数然后再输出语音。在这个过程中,有三个地方会产生语音音质的下降,第一是决策树的聚类,第二是声码器,第三是参数生成算法,针对这三个问题,我们接下来看看各位研究者提出的解决方法。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    针对决策树聚类的问题,我们可以将里面的HMM决策树据类变成一个DNN模型,文本参数到语音参数的一个映射可以很容易通过DNN来实现,而且在实验效果会比决策树好一点,但是并没有达到我们理想中的那种很惊艳的一些结果。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    除了DNN,RNN也用到了统计参数语音合成中,而且RNN里面单元采用LSTM模型,我们可以把参数生成算法这个模块从统计参数语音合成中去掉,这样在基于LSTM-RNN中直接预测出语音参数,通过声码器就可以合成语音,跟RNN-LSTM预测出一阶二阶统计量以后,采用参数生成算法,生成语音参数合成语音的话效果差不多,所以RNN-LSTM可以把里面的参数生成算法给去掉。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    最近几年大家在这方面声码器问题上做了很多工作,比如WaveNet其实也属于声码器的模型,建立一个现今预测的模型,通过前面采样点预测出后面的采样点,但是存在几个问题:比如刚开始速度比较慢,这个问题后期被很多公司都解决了,而且它并不是一个传统的vocoder,需要文本参数作为它的输入。它有好处是在输入过程中,可以很容易的在后端控制说话人的特征,比如不同说话人情感特征这些属于外部特征我们都可以进行很好的加入。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    还有一个比较成功的是百度的Deep Voice,它将里面的很多模块用深度神经网络去实现,而且做到了极致,这样我们在最后通过类似WaveNet的合成器来合成,效果也是比较理想的。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    下面两个端对端的语音合成:

    第一个是Char2Wav,这个模型是直接对输入的文本他进行编码,采用的模型。对输入的直接对输入的叫字母进行编码,然后生成中间的一个编码信息放到解码器里进行最后的合成,合成采用SimpleRNN的合成器来合成语音,效果也是比较理想的,而且是纯粹的End-To-End的一个语音合成模型。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    再一个是谷歌提出的端对端的语音合成系统,它跟Char2Wav比较类似,输入的也是Embeddings,合成更加直接比RNN更好。

    语音合成前期工作主要放在前端文本分析上,因为我们在听感上可能更关注,但是如果有一些很好的End-to-End的模型出来以后,文本分析的工作并不是很重要,我们也可以在后端中加入一些文本分析的结果进行预测,这即是一种尝试,也是一种很好的办法。现有的合成器的音质不再首先考虑我们采用哪种声码器,我们采用直接生成的方法在实域上直接进行合成。

    语音合成更重要的是一些音库,我们不能忽略音库在语音合成中所占据的位置,以及它的重要性。目前,极限元智能科技语音合成定制化支持录音人选型、录音采集、语料标注,还能实现模型迭代训练、合成引擎优化,支持在线、离线模式,适用多种平台

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    说话人识别也就是声纹识别,简单介绍一下现有的I-vector的系统以及如何将DNN应用到对应的I-vector系统,同时我们也跟踪了最近end to end的一种方法。基于Ivector的系统,通过UBM模型来训练数据,然后训练得到混合高斯模型,通过统计量的提取,比如零阶一阶二阶我们来训练它的差异空间T,从而提取出它的Ivector,最后考虑到不同的补偿方式进行信道补偿,使性能更加完善,同时我们在合成端、最后识别端也可以考虑不同系统的融合提高最终的准确率。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    将DNN用到说话人识别,主要是针对Ivector的系统,UBM训练是一个无监督的训练方式。不考虑音速相关的信息,因此就不考虑每个人说话音速在声学空间上法人不同,我们可以将这部分信息运用到说话人识别中,将前面提到的Ivector需要提到的临界统计量,通过DNN模型的输出把临界统计量来进行替换,在训练Ivector的过程中,考虑了每个人音速,发音音速相关的不同特征,这样会更好的对说话人进行识别。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    DNN还有一种应用形式,采用bottleneck特征替换掉原来的MFCC,PLP相关的特征,这也是从音速区分性,每个人发音音速不一样来考虑的。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    百度前段时间提到的一个Deep Speaker,这部分最主要的优点是采用了Triple Loss这种方法,能很好的用于训练中。原来如果要训练一个说话人可能是输出是一个one-hot,但是speaker的训练语并不是很多,所以训练效果并不是很好,如果我们采用这种训练误差的,可以构建很多对训练参数来进行训练,这样模型会更加棒。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    以一个简单的智能客服平台技术原理说明它采用了基于状态转移图的结构来控制对话的进行,在这个状态转移图中,表示了所有对话片断与用户意图之间的关系,系统根据用户的意图和当前知识库中的对话片断转到下一个对话片断,并根据每个状态的定义对用户做出应答,整个对话的过程是在状态转移中实现的。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    智能客服平台训练阶段主要针对本身已有的系统进行简单的数,包括两个虚拟人,在运行过程中对虚拟人的提问,通过关键词抽取对关键词进行匹配,然后找到对应的它的状态相关的信息,得到最优问题解答再进行返回。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    POMDP是一个六元组,包括状态集合、观察集合、行动集合、回报函数、转移函数和观测函数,根据用户输入语句来得到意图分类,然后根据意图分类得到观测值,再通过对立面POMDP里面的训练分布进行更新,训练分布与POMDP结合得到动作,分析各个子动作得到反馈后再接收新的数据。比如我要去上海,它会问你从哪里出发,用什么交通工具,对应一些信息,比如说查天气,因为查天气的时候你需要反馈到是上海的天气还是北京的天气,这些都会根据上面的语句进行提问。

    人机交互未来的研究方向

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    除了前面提到语音作为主要接口的一种对话形式,我们也会考虑一些多模态相关的信息,比如对于用户和机器人,当中有一个人机交换属于人机协同,但是需要处理的信息会比较多,比如机器人会根据用户输出个性化声音,同时融合多元情感融合的处理,机器人会根据你输入的信息进行自主学习以及智能生长,这些都是将来人机交互这块需要考虑的问题。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    基于交互学习的知识问答和智能生长,目前最主要基于短时工作记忆,未来主要工作可能转换到长时记忆的转换,同时我们也能对新知识进行快速的学习和更新。

    语音对话系统的技术突破点在哪?深度解读人机交互的技术核心

    我们考虑的信息除了听觉信息还有视觉信息,通过多模态融合的方法,我们也会研究在脑部这些脑区功能的一些主要关注点,这些都会成为将来的研究点。对话平台有了前面的多模态的信息输入,我们希望把这些都融合起来做成一个多模态融合的一个对话系统。

    语音作为互联网的重要入口,功能得到了大家越来越多的重视,当然语音产业也需要更多的人才去发展,目前对话系统的功能在体验上有些不理想,这也是行业从业者需要考虑的问题,同时我们在将来会研究采用多模态智能生长等相关交互技术,促进人机交互的发展。

    相关文章:

    专访阿里 iDST 语音组总监鄢志杰:智能语音交互从技术到产品,有哪些坑和细节要注意?

    一文读懂智能语音前端处理中的关键问题

    本文作者:雷锋专栏

    本文转自雷锋网禁止二次转载,原文链接

    展开全文
  • 语音对话控制智能家居系统 介绍 后端使用到了onenet、讯飞语音、图灵接口 实物图 演示链接(提取码:xszp) 项目源码 转载于:https://my.oschina....
  • 智能(语音对话系统架构研究

    千次阅读 2018-05-30 10:51:24
    智能对话系统的需求目标 智能对话系统可以提供回答问题的能力,即在理解自然语言的基础上,解答用户提出的问题。进一步的,可以提供基于任务的对话能力,及判断用户的意图,通过多轮对话收集必要的信息,完成订票,...
  • 市场主流智能语音音箱对话系统哪个做的更好? 如何评价智能语音音箱对话系统的好与坏呢?智能音箱的对话技能如何实现?评价指标又有哪些呢?带着一连串的问题,小君来说说自己的理解。首先,智能音箱的对话技能是...
  • (19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 CN 110728977 A (43)申请公布日 2020.01.24 (21)申请号 201810713957.9 G10L 13/08(2013.01) (22)申请日 2018.06.29 (71)申请人 南京芝兰人工...
  • 系统的功能有:与图灵机器人进行对话;设置闹钟(计时器);播放本地音乐:机器写古诗; (1)与图灵机器人对话的部分,参考了这篇博客,博主写得非常用心详细。需要下载安装的包有: cmd:pip install xxxx...
  • 基本环境配置版本:Python3系统:Windows原理许多现代语音识别系统会在HMM识别之前使用神经网络,通过特征变换和降维技术来简化语音信号,也可以使用语音活动检测器将音频信号减少到可能包含语音的部分。幸运的是,...
  • 项目简介 ...再对所识别到的文字进行判断,是命令还是普通对话,命令则执行系统命令执行模块;普通对话则交给图灵机器人进行交流,所返回的文字交给百度语音合成平台,启动播放功能,则成功进行对话
  • 背景智能语音机器人是58集团TEG架构平台线AI Lab自主研发的具有自动电话拨打、多轮语音交互、智能意向判断等多种功能的通用对话机器人。在电话拨打场景下,多轮语音交互要求具备内容的专业性和极高的流畅性,目前多...
  • 谛听语音对打系统

    2018-06-28 14:50:24
    智能语音对话,根据语境智能判断,容易上手 智能语音对话,根据语境智能判断,容易上手 智能语音对话,根据语境智能判断,容易上手 智能语音对话,根据语境智能判断,容易上手 智能语音对话,根据语境智能判断,容易...
  • 给出ros下使用百度UNIT快速搭建机器人对话系统的示例 套路上,在开放平台发布应用,都会有ak 和sk。用这两个k来获取与应用通迅用的token 我分两个节点实现功能 一个处理 获取token并发布。 一个等待token并...
  • 出品|AI科技大本营头图 | CSDN付费下载于视觉中国近日,在国际顶尖人工智能竞赛第九届对话系统技术挑战赛(DSTC9)中,滴滴语音和NLP技术团队参与端到端多领域面向任务型对话系...
  • 原标题:精选:语音对话机器人,百行Python代码就能轻松实现 前言:Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了收藏已久的视频教程分享给大家!希望能带给大伙儿...
  • 2003年——口语对话系统语音识别的研究——清华大学博士论文.pdf 2003年——口语对话系统语音识别的研究——清华大学博士论文.pdf
  • 可以使用触摸屏输入城市名称搜索天气,也可以使用语音搜索天气。1.1 系统功能作品包含的的功能有:(1)实时天气显示,温湿度显示,日历显示;(2)收音机功能;(3)人机对话功能。系统框图如下...
  • 对话系统

    千次阅读 2018-11-13 22:23:59
    对话系统涉及的五种主要技术。 语音识别(ASR) 口语理解(SLU) 对话管理(DM) 自然语言生成(NLG) 文本生成语音(TTS) 口语理解-SLU 输入经过ASR输出的语句,将其转换为语义表示,如frame形式,包含intent和多个槽位,...
  • 基本环境配置版本:Python3系统:Windows原理许多现代语音识别系统会在HMM识别之前使用神经网络,通过特征变换和降维技术来简化语音信号,也可以使用语音活动检测器将音频信号减少到可能包含语音的部分。幸运的是,...
  • 人工智能的这一领域被称为对话系统,语音对话系统或聊天机器人。机器需要为你提供信息丰富的答案,维持对话的上下文,并且难以与人类(理想情况下)区分。 在实践中,最后一项要求尚未达到,但幸运的是,如果机器人...
  • 然后我想动手自己做一个语音识别系统,从GitHub上下载了两个流行的开源项目MASR和ASRT来进行复现,发现语音识别的效果没有写的那么好,其中如果要从零来训练自己的语言模型势必会非常耗时。 因此,就有了一个新的...
  • 开源项目叮当-中文语音对话机器人在ubuntu上的安装      在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程。而我对硬件不感兴趣,我不...
  • 语音合成跟语音识别,自然语音理解,作为人机交互的基础模块,加上对话管理器,形成人机语音对话系统。 语音合成原理 语音合成(Text to Speech,TTS)是指将文本通过一系列的信号处理转换为“人造”语音(声学...
  • 树莓派打造智能语音控制系统

    万次阅读 多人点赞 2019-08-17 21:36:58
    近几年,随着科技迅速发展,智能语音在现实生活中的普及率越来越高,特别是语音识别、语音合成、语音对话、语音控制等方面。树莓派的智能语音控制系统,该系统使用麦克风对语音进行采集,通过调用语音识别云服务对...
  • 人机对话系统具有四大功能 人机对话系统又分下面这三方面:自然语言理解、对话管理、自然语言生成。这里面聊天、知识、任务、推荐,都有各自相应的研究点。具体内容请看PPT。 对话管理(Dialog Management, DM)是...
  • 1、人机对话系统基本框架 对话管理:控制对话流程 信息处理:语料库建立、知识的表示、信息搜索算法 2、自然语言理解模块(NLU) 四个层次: (1)基本语言信号的构成;(语音、文字) (2)语言基本运用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 708
精华内容 283
关键字:

语音对话系统