• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 人文社科 > 正文

    学习型智能交互系统的研究与实现

    时间:2021-04-09 07:51:12 来源:达达文档网 本文已影响 达达文档网手机站


    打开文本图片集

    摘 要:本文是以研究开发一款可实现学习型智能交互的软件为目的,在人机交互的基础上利用JAVA等编程语言实现文字、语音、表情三方面的交互,同时更具有自学习的功能,并将自学习反过来利用到交互系统,具有很好的软件灵活性。本文主要介绍一种具有学习能力的智能交互的设计与实现技术。

    关键词:人机交互;语音识别;软件开发;学习性

    中图分类号:TP311 文献标识码:A 文章编号:2095-8595 (2017) 03-133-005电子科学技术 URL: http://.cn DOI: 10.16453/j.issn.2095-8595.2017.03.033

    引言

    人机交互( Human Computer Interaction,HCI)通俗来说就是计算机与人的交流,人将自己的需求告诉计算机,计算机响应这个需求协助人类完成相应的工作。目前运用最成熟的是多通道交互,多通道交互即通过语音、手势、肢体与计算机系统进行交流,它基于语音识别、手势输入、人体感知等技术,意在提高人机交互的高效性和自然性[1]。本文从交互功能和自學习功能的角度,通过对人机交互方式的研究,运用编程语言、语音识别技术和数据库技术,实现人与智能手机之间文字的交互、表情的交互,兼顾语音识别功能,将人的双手从操作中解放,使机器可以识别人类的语言,并将语言转化为文字再进行交互,最后加入自学习这一特性提升交互的灵活性与实时性,使机器可以把不擅长、不了解的内容通过与人的交互,将人的交互内容学习下来转换为自己的交互内容并应用到下一次的对话中。

    本文是在华北理工大学迁安学院大学生创新创业项目(项目名称:学习型智能交互系统的研发)的基础上,总结整理而成,希望能促进学生创新创业能力的提高。

    1 系统总体结构设计

    学习型智能交互系统结合了编程语言、语音识别技术和数据库技术,采用了C/S的客户端/服务器模式。软件开发平台为SQLite,Java SE Development Kit7,NetBeans IDE 8.0.1,主要提供基于互联网络的客户端进行实时语音、文字传输。系统基于聊天层面却又区别于聊天工具,可很好地运行于安卓系统平台。通过调研分析,确定了系统的边界,主要包含以下几方面的功能。

    客户端:整个软件在Android平台下运行,用户下载软件包之后需要安装完成,本软件需要用到录音功能,用户若想获得完整体验需要开启录音权限。

    信息模块:在开始进入交互之前需要事先输入用户信息,其目的是创建一个用户角色,以创造更好的交互体验。

    设置昵称:用户可利用文字输入心仪的昵称。

    选择形象:这属于功能的扩展,在未来可以对不同人物设置不同方向的交互信息。

    交互模块:用户输入文字、语音这两方面的交互信息并点击发送,系统会对输入的交互信息与数据库中已有的交互信息进行比对,按照权值高低输出最为匹配的回答,最后以文字内容的形式返回给用户。对于表情方面,用户输入表情点击发送,系统将反馈适合的表情给用户。

    查询手册内容:本项目将交互内容扩展到实际运用中来,针对于学生用户,将我校学生手册中有关高等学校学生行为准则、高等学校学生管理规定、迁安学院学生学籍管理规定、迁安学院学生考试相关规定、迁安学院学生转专业实施办法、华北理工大学学生违纪处分管理规定等相关内容加入到了系统数据库中。用户可以输入部分相关关键字查询我校相关规定,系统将返回查询到的内容,方便直观,提高软件实用性。

    查询百科内容:同样针对于学生用户,在系统数据库中增加来自各个方面的趣味百科知识,在课余时间可以丰富生活,了解更多的课外百科知识,增强学习兴趣,提高学习效率。

    学习性:对于系统数据库中没有的知识内容,用户可以进行自定义增加;对于系统中没有的对话,用户可以自定义回答,这便使系统能够灵活应对不同用户的需求,方便扩大不同使用用户层面。

    2 系统主要关键技术

    2.1 数据库技术环境

    本软件数据库采用SQLite创建,与Java SE Development Kit7,NetBeans IDE 8.0.1连接。采用关系数据模型,建立了关系的完整性约束,严格遵守规范化的关系模式,尽可能减少数据冗余。

    2.2 自动回复

    自动回复模块是利用编程语言获取用户输入的文字信息,将信息送到内存缓冲区与数据库中的关键字内容进行对比查询,前期将基本的对话以数据的形式增加到数据库项中,运用条件控制语句将数据库中已存在的与用户输入信息吻合的关键字回复信息找到并输出,从而实现自动回复功能。若系统未找到与用户输入相吻合的数据库关键字回复,则利用自学习的方法实现自动回复功能。

    交互信息为文字信息时,程序会将输入的文字信息同数据库内的key元组进行比较,如果count(key)=1,输出该key所对应的回答,之后将回答反馈到客户端呈现给用户;如果count(key)>=2,运用循环找到一个关键字对应的权值将权值赋值给一个变量,继续查找直到存在的key找完为止,然后对不同key的权值进行比较,权值最大的key的回答将会被输出反馈到客户端呈现给用户[2]。

    交互信息为语音信息时,程序会将输入的音频转化为文字,将文字与音频表中的key进行比较,如果count(key)=1,输出该key对应的音频地址,同时在客户端里以音频的形式反馈给用户;如果count(key)>=2,运用循环找到一个关键字对应的权值将权值赋值给一个变量,继续查找直到存在的key找完为止,然后对不同key的权值进行比较,权值最大的key的音频地址将会被输出反馈到客户端,然后客户端以音频的形式呈现给用户。

    交互信息为表情时,程序将会按照情况给出同为表情的回复,当用户输入一个表情时,客户端将以一个表情反馈给用户。

    以下为有关实现自动回复的部分代码:

    //获取回答的方法,参数为用户的问题

    public String getAnswer(String question){

    String[] answerList = new String[100];

    //创建数据库实例

    SQLiteDatabase db;

    //打开或创建数据库

    db = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);

    //读取数据库的数据

    Cursor cursor = db.rawQuery("select key,answer,metric from talk", null);

    Cursor cursorFirst = db.rawQuery("select key,answer,metric from flag",null);

    String key = "";

    //获取第一条

    cursor.moveToFirst();

    a = 0;

    //遍历每条数据

    do{

    //获取每条数据的第一个元素,即关键字

    key = cursor.getString(0);

    //判断问题中是否包括关键字

    if(question.contains(key)){

    //包括则添加到数组中

    answerList[a++] = cursor.getString(1);

    //控制数组大小

    if(a == 100){

    break;

    }

    }

    }while(cursor.moveToNext());

    /*

    * 如果数据库中有对应的数据,则获取前三个回答,

    * 由于数据库中是按照权值由大到小排列,

    * 所以前三个是权值最高的三个回答 */

    if(a==0){

    cursorFirst.moveToFirst();

    answerList[0] = cursorFirst.getString(1);

    cursorFirst.moveToNext();

    answerList[1] = cursorFirst.getString(1);

    cursorFirst.moveToNext();

    answerList[2] = cursorFirst.getString(1);

    }

    //随机获取其中一个回答,getAnswerNum为随机获取回答的方法

    String sendText = answerList[getAnswerNum(a)];

    return sendText;

    }

    2.3 语音识别与存储

    在语音识别方面我们参考了科大讯飞旗下语音识别的demo,并从中摘取了我们需要的功能将其融入开发系统中,协助我们完成软件的语音方面的交互与自学习,单击开始说话之后初始化后将实例轉化为语音的对象,然后调用方法获取转换后的文字,转换所需要的识别器与引擎都在科大讯飞jar包中,直接调用即可[3]。具体实现步骤可参照代码的注释段。

    以下为有关实现语音识别的部分代码:

    语音合成:

    //获取回答的方法与文字的相同,通过后期的语音识别和语音合成来实现语音的对话

    String speechanswer = getAnswer(question);

    //发送回答,即在界面上显示回答

    sendanswer(speechanswer);

    mEditTextContent.setText("");

    //将回答用语音读出

    //设置发音人

    mySynthesizer.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");

    //设置音调

    mySynthesizer.setParameter(SpeechConstant.PITCH,"50");

    //设置音量

    mySynthesizer.setParameter(SpeechConstant.VOLUME,"50");

    //读出speechanswer,即回答

    mySynthesizer.startSpeaking(speechanswer, mTtsListener);

    语音识别:

    //单击开始说话,实例化语音转文字的对象,初始化

    VoiceToWord voice = new VoiceToWord(context,"57b79e4d",

    view.findViewById(R.id.content_et));

    //调用方法获取转换后的文字

    voice.GetWordFromVoice();

    //语音转换的方法

    public void GetWordFromVoice()

    {

    //获取引擎的状态

    boolean isShowDialog = mSharedPreferences.getBoolean("iat_show",true);

    //如果为true,则显示听写对话框

    if (isShowDialog) {

    //显示语音听写Dialog.

    showIatDialog();

    } else {

    //如果为false,则判断识别器是否为空,如果为空则创建,mInitListener是监听器

    if(null == iatRecognizer) {

    iatRecognizer=SpeechRecognizer.createRecognizer(context,mInitListener);

    }

    //判断识别器状态,未关闭则关闭

    if(iatRecognizer.isListening()) {

    //关闭识别器

    iatRecognizer.stopListening();

    }

    }

    }

    //识别器与引擎,都在讯飞下载的jar包中,在此直接调用

    2.4 自学习功能的实现

    使系统具有学习能力是本项目最突出和最重要的一个特色。近年来,国内外在实现机器自学习方面取得了很大的进展。香克(R. Shank)说:“一台计算机若不会学习,就不能称为具有智能。”正如学习是人类具有智力的主要标志和获得知识的基本手段,机器学习是使计算机具有智能的根本途径。机器的学习依靠人类将机理设计运用到机器上,同样有助于人类脑力的进化。所以机器学习是一个一直得到重视,且理论正在创建,方法逐渐成熟,但仍未达到理想的研究领域[4]。

    在本系统中学习性的实现是相对开放的,用户可以使系统学习任何方面的回复,只要是数据库中不存在的问题就触发系统的反问,此时用户只需将所要让系统学习的内容发送,便可实现系统的学习功能,这里利用数据库的存储,将问题和回答存储到已建立的数据库表中,之后对于同样问题的提问,系统便可给出学习之后的回答,完成自学习。

    以下为有关实现自学习性的部分代码:

    //a为判断是否有对应回答的数值

    if(a == 0){

    //若没有相应回答,则提出反问

    sendanswer("你觉得呢?" + "\n" + question);

    //newquestion为需要存在数据库中的关键字

    newquestion = question;

    //设定好下次用户输入的文字即为newquestion对应的回答

    setStr("添加");

    }

    //实例化数据库

    SQLiteDatabase db;

    //打开数据库

    db = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);

    //将(newquestion,question,权值)添加到数据库

    db.execSQL("insert into talk (key,answer,metric) values ("" + newquestion + "","" + question + "","1")");

    //提示已添加进数据库

    mToast.setText("已将您的回答添加到数据库,请继续对话");

    mToast.show();

    //设定下次用户输入的信息为正常对话

    setStr("发送");

    3 研究结果与分析

    本文主要介绍具有自学习性的智能交互系统的实现,在整个项目中,使用了程序设计语言、图像处理技术、数据库技术以及最前沿的语音识别技术。运用图像处理技术,对软件外观界面进行规划设计,之后通过JAVA编程语言对界面进行实现;利用JAVA程序语言与数据库技术相连接,通过给问题中关键字设置权值的方式来对数据库中已存在的回复中权值最高的进行输出以此实现软件自回复功能;连接已有的语音识别demo,摘取其中可以将语音识别成文字的部分功能通过JAVA编程语言进行方法调用,调用后用户输入语音可直接在软件界面的用户输入框内输出已识别后的文字再经由用户发送后,实现语音的回复;自学习功能的触发需要用户输入问题后数据库中不存在此问题的回答这个条件,若此条件成立则用户可输入相应的回答使软件完成自学习。

    软件经由一年时间开发完成,之后历经半年测试,测试期期间在校内学生群体内部进行推广测试,并根据收到的不同学生、不同手机的内测结果对软件进行多次改进。其中有针对外观界面设计不美观的情况,引入了很多简洁卡通的人物形象,使软件更加符合学生这个角色使用;交互内容实用性方面,先后加入了我校学生手册中相关高等学校学生行为准则、管理规定等诸多实用性内容,后期还考虑为丰富学生课余生活、提高学生的知识储备,加入相关的实用性百科,受到来自学生用户的极大好评;考虑到软件内存空间的占用情况,将语音识别放置到后台进行,对用户语音识别后的文字进行交互,极大释放内存使用空间,提高软件速度;引入了活泼的经典表情,提高了交互的生动性。

    4 总结

    计算机用户对工作效率的要求越来越高,探索自然、高效的人机交互方式便成为了计算机学科的重要前沿课题[5]。多通道人机交互讲成为一个崭新的研究方向。多通道用户界面可以充分利用用戶多个感觉和动作通道,如键盘、语音、手势、表情、视频、人脑等的互补特性,让计算机来捕捉用户的意图,从而提高用户输入效率,增进人机交互的自然醒。合理的运用好人机交互技术可以给未来人类的生活带来多大的好处和影响是不可估计的。

    参考文献

    [1]高树芳.软件工程[M],第五版.大连:大连理工大学出版社,2014.

    [2]李红.数据库原理与应用[M],第二版.北京:高等教育出版社,2003.

    [3]王裕明,李旭芳.数据结构与程序设计[M].北京:清华大学出版社,2010.

    [4]郁亚男. 基于Android平台的人机交互的研究与实现[M]. 北京:北京邮电大学出版社,2011.

    [5]孟祥旭,李学庆.人机交互技术:原理与应用[M].北京:清华大学出版社,2005.

    相关热词搜索: 学习型 交互 智能 研究 系统

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网