袁瑞雪


摘要:應(yīng)用人工智能技術(shù),以Android studio為開發(fā)工具,采用Python語言,通過Android調(diào)用第三方語音識別接口,設(shè)計能夠進(jìn)行語音識別輸入與文字轉(zhuǎn)換、根據(jù)發(fā)送信息進(jìn)行自動回復(fù)、可以和其他程序結(jié)合進(jìn)行訓(xùn)練的簡易聊天機(jī)器人。
關(guān)鍵詞:聊天機(jī)器人;自然語言處理;語音交互
中圖分類號:TN929 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2019)10-0144-02
0 引言
隨著社會信息化進(jìn)程的日益加快,人們希望能夠用自然語言與計算機(jī)進(jìn)行交流,聊天機(jī)器人的市場因此產(chǎn)生。聊天機(jī)器人旨在通過自然語言處理等技術(shù),對人們提出的問題進(jìn)行理解,通過檢索知識庫等方式產(chǎn)生對應(yīng)的回復(fù)[1-2]。它是一種模擬人類的對話模式,使用自然語言與人類進(jìn)行交流的程序。它不僅能回答用戶所提的問題,還能人性化地與用戶交流,同時提醒或者安排用戶完成一些任務(wù)。研究聊天機(jī)器人的相關(guān)技術(shù),尤其是對話理解等問題,對促進(jìn)人機(jī)交互方式的發(fā)展具有重要意義[3-4]。本設(shè)計旨在通過Android智能終端與機(jī)器人聊天,進(jìn)行語音識別輸入與文字間的轉(zhuǎn)換,理解輸入發(fā)送的信息并進(jìn)行自動回復(fù),最終將問題的輸入以及對話的效果以APP的形式展示。
1 語料獲取和處理
對話系統(tǒng)的關(guān)鍵基礎(chǔ)就是數(shù)據(jù)集,即語料庫。但目前開源的語料庫很少,該系統(tǒng)選取了兩個語料庫進(jìn)行對比,分別是電影獨白語料庫和公開的小黃雞語料庫。本文選擇學(xué)習(xí)訓(xùn)練時間比較快的小黃雞語料來進(jìn)行學(xué)習(xí)。
原始語料文本不能用來直接訓(xùn)練,需要進(jìn)行句子和向量間的轉(zhuǎn)換;然后是構(gòu)建語料問答對,對其進(jìn)行拆分;最后保存和訓(xùn)練語料模型即深度模型,實現(xiàn)語音識別輸入與文字的轉(zhuǎn)換,理解輸入發(fā)送的信息并進(jìn)行自動回復(fù)并以APP形式展示。
2 Android客戶端交互設(shè)計
安卓交互模塊主要具有如下四個功能:(1)語音識別輸入:軟件調(diào)用科大訊飛接口,具有語音識別輸入的功能,直接對語音內(nèi)容進(jìn)行識別,轉(zhuǎn)換為文本內(nèi)容發(fā)送給服務(wù)器;(2)文字鍵入:除了語音識別輸入,還可以文字的鍵入;(3)信息顯示:內(nèi)容顯示界面,包括軟件名稱,聊天框,聊天內(nèi)容,語音識別功能和發(fā)送按鈕的顯示等;(4)語音播報輸出:在進(jìn)行回答結(jié)果信息顯示的同時可以進(jìn)行語音播放,同樣也是調(diào)用科大訊飛輸出結(jié)果。
3 語音聽寫和合成設(shè)計
該系統(tǒng)調(diào)用的是科大訊飛接口,它是國內(nèi)著名的語音技術(shù)提供商,專業(yè)于語音和文字產(chǎn)品,提供了語音識別和合成接口,可接入使用。該平臺為開發(fā)者們提供了中文分詞、詞性標(biāo)注、語義角色標(biāo)注等NLP技術(shù)服務(wù)。
調(diào)用科大訊飛接口主要有以下步驟:注冊登陸科大訊飛開放平臺(http://www.xfyun.cn/)、進(jìn)入控制臺、創(chuàng)建應(yīng)用,記下AppID、點擊開通服務(wù)進(jìn)入語音聽寫去下載相對應(yīng)的SDK、下載安卓版本的SDK。
語音合成與語音聽寫識別剛好反過來,是把文字內(nèi)容轉(zhuǎn)變?yōu)檎Z音信息,使得機(jī)器可以像人類一樣說話。
4 客戶端和服務(wù)端設(shè)計
客戶端模塊主要由語音聽寫和合成、網(wǎng)絡(luò)請求和UI繪制這個三個模塊組成。(1)語音聽寫和合成模塊:使用科大訊飛提供的語音聽寫和語音合成SDK,將語音內(nèi)容轉(zhuǎn)變成文本內(nèi)容返回和將文本內(nèi)容轉(zhuǎn)換為語音輸出;(2)網(wǎng)絡(luò)請求模塊:通過http協(xié)議,用get的請求方式將語句字符串發(fā)送到服務(wù)端;(3)UI繪制模塊:以適當(dāng)布局顯示用戶輸入的語句內(nèi)容和服務(wù)端返回的問答字符串結(jié)果。
服務(wù)端的操作系統(tǒng)為mac,環(huán)境配置為python3.7和jdk。首先需要flask模塊,實例一個此類,該系統(tǒng)使用的是單一模塊_name_。用route告訴flask使用url來激發(fā)應(yīng)答函數(shù)。此函數(shù)將問答模型對象中得到結(jié)果的函數(shù)返回給客戶端進(jìn)行信息的顯示。服務(wù)端模塊主要由請求解析模塊、語義解析模塊和應(yīng)答封裝這三個模塊所組成:(1)請求解析模塊:將http數(shù)據(jù)報的內(nèi)容解析到response對象中,供開發(fā)者調(diào)用;(2)語義解析模塊:從請求解析模塊中提取文本,得到應(yīng)答語句,將其提供給應(yīng)答封裝;(3)應(yīng)答封裝:最后把應(yīng)答語句以json串的形式返回給開發(fā)者調(diào)用。
5 模型訓(xùn)練和評估
5.1 模型訓(xùn)練
有基于seq2seq的train和train_anti兩種模型進(jìn)行訓(xùn)練,設(shè)置同樣的參數(shù)進(jìn)行訓(xùn)練比較,其中可以選LSTM和GRU這兩種模型,該系統(tǒng)采用2層隱藏層的神經(jīng)網(wǎng)絡(luò)模型,隱藏節(jié)點個數(shù)為128個,學(xué)習(xí)率即步長為0.001,迭代訓(xùn)練的迭代次數(shù)有20次,100次。
5.2 訓(xùn)練效果評估
交叉熵是Shannon信息論中一個重要概念,主要用于度量兩個概率分布間的差異性信息。交叉熵的意義是對文本識別的難度。將交叉熵引入計算語言學(xué)消岐領(lǐng)域,采用語句的真實語義作為交叉熵的訓(xùn)練集的先驗信息,將機(jī)器翻譯的語義作為測試集后驗信息。計算兩者的交叉熵,并以交叉熵指導(dǎo)對歧義的辨識和消除。
交叉熵可在神經(jīng)網(wǎng)絡(luò)(機(jī)器學(xué)習(xí))中作為損失函數(shù)(Cross Entropy Loss)。
圖1展示了加入attention機(jī)制后兩種模型訓(xùn)練下的損失函數(shù)。
由圖可見:隨著縱坐標(biāo)數(shù)值的增加損失函數(shù) L 越小;第二種模型收斂的速度更快,交叉熵一開始更小,也更快達(dá)到1以下,優(yōu)于正常的seq2seq模型。
這種優(yōu)勢也是基于迭代次數(shù)的,在前期較少的輪數(shù)訓(xùn)練下,兩種訓(xùn)練效果區(qū)別不大。
訓(xùn)練輪數(shù)為20輪、100輪時同一問題回答效果如圖2所示。
6 結(jié)語
本文針對閑聊機(jī)器人模型的背景,通過對其中可能涉及到的算法的閱讀與學(xué)習(xí),選擇了最符合本文特點的相應(yīng)算法,依托Andriod開發(fā)環(huán)境搭建出整個聊天機(jī)器人系統(tǒng)。但在由于中文自然語言的復(fù)雜性,產(chǎn)生式聊天機(jī)器人容易構(gòu)建出無意義的回復(fù),如何將產(chǎn)生式深度模型應(yīng)用于閑聊機(jī)器人領(lǐng)域還需要深入的研究。
參考文獻(xiàn)
[1] 馮志偉.自然語言處理綜論(第二版)[M].北京:人民郵電出版社,2018.
[2] 周志華.機(jī)器學(xué)習(xí)[M].北京:清華大學(xué)出版社,2016.
[3] 鄭澤宇,顧思宇.Tensorflow:實戰(zhàn)Google深度學(xué)習(xí)框架[M].北京:電子工業(yè)出版社,2018.
[4] 張旭,崔陽,劉海平.Python自然語言處理[M].北京:人民郵電出版社,2014.