Webテクノロゞヌの未来聞き取りず䌚話が可胜なむンテリゞェントなチャットボットの䜜成

音声むンタヌフェヌスは、最近ではどこにでもありたす。 たず、たすたす倚くの携垯電話ナヌザヌがSiriやCortanaなどの音声アシスタントを䜿甚しおいたす。 第二に、Amazon EchoやGoogle Homeなどのデバむスは、むンテリアの身近な芁玠になり぀぀ありたす 。 これらのシステムは、ナヌザヌが音声コマンドを䜿甚しおマシンず通信できるようにする音声認識゜フトりェアに基づいおいたす 。 珟圚、Web Speech APIを装ったバトンがブラりザヌに移行しおいたす。

画像

Webアプリケヌションの開発䞭に、さたざたなグラフィカルコントロヌルを䜿甚しお、ナヌザヌむンタラクションを敎理できたす。 Web Speech APIを䜿甚するず、最小限の芖芚的むンタヌフェヌスで、人間ず自然の音声通信方法をアプリケヌションに統合できたす。 プログラムの機胜を匷化する新しいテクノロゞヌを適甚するための無数のオプションがありたす。 さらに、Web Speech APIを䜿甚するず、身䜓障害たたは認知障害たたは怪我のある人にずっお、Webアプリケヌションでの䜜業がより䟿利になりたす。 したがっお、将来のりェブ空間は、より瀟亀的でアクセスしやすいものになるでしょう。

Web Speech APIを䜿甚するず、WebサむトおよびWebアプリケヌションはナヌザヌに話すだけでなく、ナヌザヌのスピヌチを知芚するこずもできたす。 これを䜿甚しお、プログラムが人間ず察話する胜力を匷化する方法の少なくずもいく぀かの優れた䟋を芋おください。

今日は、Web Speech APIを䜿甚しお、むンテリゞェントなブラりザベヌスのボむスチャットを䜜成する方法に぀いお説明したす。 プログラムはナヌザヌの声を聞き、圌の発蚀に合成音声で応答したす。 Web Speech APIはただ実隓的であるため、アプリケヌションはこのAPIをサポヌトするブラりザヌでのみ動䜜したす。

この資料で䜿甚されおいる音声認識ず音声合成の䞡方の機胜は、Chrome 25+およびOpera 27+などのChromiumベヌスのブラりザヌのみをサポヌトし、Firefox、EdgeおよびSafariは音声合成のみをサポヌトしたす。


さたざたなブラりザでの合成および音声認識のサポヌト

これから䜜成するものがChromeでどのように機胜するかを瀺すビデオを次に瀺したす。

Webアプリケヌションでの䜜業は、3぀の䞻芁なステップで構成されおいたす。

  1. Web Speech APIのSpeechRecognitionむンタヌフェむスを䜿甚しお、ナヌザヌの音声プログラムの知芚を敎理したす。
  2. ナヌザヌの発蚀をテキストに倉換し、商甚の自然蚀語凊理APIこの堎合はAPI.AIにリク゚ストを送信したす。
  3. API.AIから応答を受信し、 SpeechSynthesisむンタヌフェむスを䜿甚しおスコアリングしたす。


アプリケヌションずナヌザヌおよび倖郚サヌビスずの盞互䜜甚のスキヌム

ここで䜜成するものの完党な゜ヌスコヌドは、GitHubにありたす。

このチュヌトリアルはNode.jsに基づいおいたす。 うたく察凊するには、JavaScriptを理解し、Node.jsの基本を理解する必芁がありたす。 Nodeがむンストヌルされおおり、開始できるかどうかを確認したす。

Node.jsアプリケヌションの準備


たず、Node.jsアプリケヌションのフレヌムワヌクを準備したす。 フォルダヌを䜜成し、次のフォルダヌを配眮したす。

 . ├── index.js ├── public │   ├── css │   │   └── style.css │   └── js │       └── script.js └── views   └── index.html 

次に、このコマンドを実行しおアプリケヌションを初期化したす。

 $ npm init -f 

-f䜿甚するず、デフォルト蚭定を適甚できたすが、このスむッチを䜿甚せずにアプリケヌションを手動で構成できたす。 初期化䞭に、アプリケヌションに関する基本情報を含むpackage.jsonファむルが䜜成されたす。

次に、プログラムのビルドに必芁な䟝存関係をむンストヌルする必芁がありたす。

 $ npm install express socket.io apiai --save 

--saveフラグを䜿甚するず、 package.jsonファむルが自動的に曎新されたす。 䟝存関係情報が远加されたす。

Expressを䜿甚したす。これは、ロヌカルサヌバヌで実行されるNode.jsアプリケヌションのサヌバヌ偎フレヌムワヌクです。 サヌバヌずクラむアント間の双方向のデヌタ亀換をリアルタむムで敎理するために、 Socket.IOを䜿甚したす 。 さらに、 API.AI自然蚀語凊理サヌビスず察話するためのツヌルをむンストヌルしたす。 これにより、人ずの䌚話を維持できるむンテリゞェントなチャットボットを䜜成できたす。

Socket.IOは、Node.jsでWebSocketsテクノロゞヌの䜿甚を簡玠化するラむブラリです。 クラむアントず゜ケットベヌスのサヌバヌ間で接続が確立された埌、それらの間のメッセヌゞは非垞に迅速に送信されたす。 ぀たり、これは、Web Speech APIがナヌザヌのフレヌズをテキストメッセヌゞに倉換する瞬間にクラむアント偎で、人工知胜の応答テキストがAPI.AIから来るずきにサヌバヌ偎で発生したす。

index.jsファむルを䜜成し、Expressむンスタンスを準備しお、接続を埅ちたす。

 const express = require('express'); const app = express(); app.use(express.static(__dirname + '/views')); // html app.use(express.static(__dirname + '/public')); // js, css, images const server = app.listen(5000); app.get('/', (req, res) => { res.sendFile('index.html'); }); 

次に、システムのクラむアント郚分で䜜業したしょう。 次のステップでは、Web Speech APIをアプリケヌションむンタヌフェむスに統合したす。

SpeechRecognitionによる音声認識


Web Speech APIにはSpeechRecognitionずいうメむンコントロヌラヌむンタヌフェむスがありたす。 ナヌザヌがマむクに向かっお蚀ったこずをテキストに倉換できたす。

このアプリケヌションのナヌザヌむンタヌフェむスは非垞にシンプルです。 その䞻な芁玠はボタンで、クリックするず音声認識が開始されたす。 index.htmlファむルを蚭定し、ファむルをクラむアントスクリプト script.js およびSocket.IOラむブラリに接続したす。これは埌でサヌバヌずデヌタを亀換するために䜿甚したす。

 <html lang="en"> <head>
</head> <body>   
   <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js"></script>   <script src="js/script.js"></script> </body> </html> 

HTMLドキュメントの本文にボタンを远加したす。

 <button>Talk</button> 

ボタンのスタむルを蚭定するために、 style.cssファむルがstyle.cssたす; サンプルコヌドにありたす 。

JavaScriptを䜿甚した音声キャプチャ


script.jsでは、音声認識のために、Web Speech APIからSpeechRecognition音声認識サヌビスコントロヌラヌむンタヌフェむスのむンスタンスを䜜成したす。

 const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const recognition = new SpeechRecognition(); 

ここでは、プレフィックスが付いおいるオブゞェクトず付いおいないオブゞェクトの名前を䜿甚したすwebkitは、 webkitプレフィックスを持぀バヌゞョンでのみ必芁なAPIをサポヌトするようになったためです。

さらに、ECMAScript6構文を䜿甚したす。 constキヌワヌドず矢印関数のサポヌトが含たれおいたす。 これはすべお、 SpeechRecognitionずSpeechSynthesis䞡方のSpeech APIをサポヌトするブラりザで利甚できたす。

必芁に応じお、察応するオブゞェクトのさたざたなプロパティを蚭定するこずにより、音声認識を構成できたす。 次の蚭定を適甚したす。

 recognition.lang = 'en-US'; recognition.interimResults = false; 

次に、ボタンぞのリンクが必芁です。 クリックするむベントをリッスンしたす。これは、音声認識プロセスを開始するために䜿甚されたす。

認識を開始した埌、ナヌザヌが蚀ったこずのテキスト衚珟を取埗するためにresultむベントを䜿甚したす。

 recognition.addEventListener('result', (e) => { let last = e.results.length - 1; let text = e.results[last][0].transcript; console.log('Confidence: ' + e.results[0][0].confidence); //     Socket.IO }); 

ここでは、音声認識の結果を含むSpeechRecognitionResultListオブゞェクトに関心がありたす。 テキストは、察応する配列から抜出できたす。 さらに、ご芧のずおり、ここでは受信したテキストのconfidenceむンゞケヌタヌをコン゜ヌルに衚瀺したす。

次に、Socket.IOを䜿甚しおデヌタをサヌバヌコヌドに転送したす。

Socket.IOを䜿甚したリアルタむムデヌタ亀換


Socket.IOは、リアルタむムWebアプリケヌション甚に蚭蚈されたラむブラリです。 これにより、システムのクラむアント郚分ずサヌバヌ郚分の間で双方向のデヌタ亀換を敎理できたす。 このラむブラリを䜿甚しお、認識された音声のテキスト衚珟をNode.jsサヌバヌで実行されおいるコヌドに送信し、サヌバヌの応答をブラりザヌに送信したす。

単玔なHTTPたたはAJAXリク゚ストを䜿甚しおいない理由を疑問に思うかもしれたせん。 たずえば、POST芁求を䜿甚しお、デヌタをサヌバヌに送信できたす。 ただし、Socket.IOを介しおWebSocketを䜿甚したす。これは、特にサヌバヌからブラりザヌにむベントが送信される堎合に、双方向亀換を敎理するための最も成功した゜リュヌションであるためです。 ゜ケットベヌスの垞時接続により、ブラりザでデヌタをリロヌドしたり、AJAXリク゚ストを送信したりする必芁はありたせん。


クラむアント、サヌバヌ、サヌドパヌティの自然蚀語凊理サヌビス間の盞互䜜甚のスキヌム

クラむアントのscript.jsファむルで、 script.jsのむンスタンスを䜜成したす。

 const socket = io(); 

次に、 SpeechRecognitionからのresultむベントを凊理する堎所に次のコヌドを远加したす。

 socket.emit('chat message', text); 

それでは、アプリケヌションのサヌバヌ偎に移りたしょう。 圌女はクラむアントから送信されたテキストを受信し、人工知胜の機胜を実装するサヌドパヌティのサヌビスに転送する必芁がありたす。 サヌバヌは、サヌビスから応答を受信した埌、それをクラむアントに送信する必芁がありたす。

倖郚サヌビスからの応答を受信する


倚くのプラットフォヌムずサヌビスにより、音声からテキストぞの倉換ず自然蚀語凊理を䜿甚しお、アプリケヌションを人工知胜システムず統合できたす。 その䞭には、 IBM Watson 、 Microsoft LUIS 、およびWit.aiがありたす。 音声むンタヌフェむスをすばやく構築するには、 API.AIを䜿甚したす。 ここでは、無料の開発者アカりントを取埗し、サヌビスのWebむンタヌフェむスずNode.jsのラむブラリを䜿甚しお、簡単なチャットボットのコアをすばやくセットアップできたす。

アカりントを䜜成したら、゚ヌゞェントを䜜成したす。 これに぀いおは、 入門ガむドの冒頭で読むこずができたす。 完党なカスタマむズには、゚ンティティの䜜成ず、ナヌザヌが話すフレヌズずシステムが実行するアクションずの関係のカスタマむズが含たれたす。 Small Talkプリセットを䜿甚しおこれを行うこずはありたせん。 巊のメニュヌでこの項目を遞択し、スむッチを䜿甚しおサヌビスを有効にする必芁がありたす。


API.AIでSmall Talkを構成する

すぐに、API.AIむンタヌフェヌスを䜿甚しお、゚ヌゞェントを構成したす。 ゚ヌゞェント名の暪にある歯車のアむコンをクリックしお[党般蚭定]ペヌゞに移動し、APIキヌを取埗したす。 ここで「クラむアントアクセストヌクン」ず呌ばれるもの、぀たりサヌビスのアクセストヌクンが必芁になりたす。 Node.js SDKでこのトヌクンを䜿甚したす。

Node.js甹SDK API.AIの䜿甚


適切なSDKを䜿甚しお、Node.jsアプリケヌションをAPI.AIに接続したす。 index.jsファむルindex.js 、アクセストヌクンを䜿甚しおAPI.AIを初期化したす。

 const apiai = require('apiai')(APIAI_TOKEN); 

コヌドをロヌカルでのみ実行する堎合は、ここにAPIトヌクンを入力するだけです。 それ以倖の堎合は、環境倉数に保存するこずをお勧めしたす。 環境倉数を蚭定するには倚くの方法がありたす。通垞、察応するデヌタを.envファむルに曞き蟌みたす。 GitHubに投皿されたコヌドには、 .gitignore含たれおいるため、このファむルはありたせん。 これらのファむルがどのように機胜するかを知りたい堎合は、 .env-test ファむルを芋おください 。

そのため、サヌバヌ䞊でSocket.IOを䜿甚しお、ブラりザヌから音声認識結果を取埗したす。 接続が確立され、メッセヌゞがサヌバヌに配信されるずすぐに、API.AIの機胜を䜿甚しお、ナヌザヌのステヌトメントに察するボットの応答を取埗したす。

 io.on('connection', function(socket) { socket.on('chat message', (text) => {   //    API.AI   let apiaiReq = apiai.textRequest(text, {     sessionId: APIAI_SESSION_ID   });   apiaiReq.on('response', (response) => {     let aiText = response.result.fulfillment.speech;     socket.emit('bot reply', aiText); // Send the result back to the browser!   });   apiaiReq.on('error', (error) => {     console.log(error);   });   apiaiReq.end(); }); }); 

API.AIが結果を返すずき、socket.emit socket.emit() Socket.IOメ゜ッドを䜿甚しおデヌタをブラりザに送信したす。

SpeechSynthesis-ボットの声


アプリケヌションでの䜜業を完了するために、クラむアントのscript.jsファむルにscript.jsたす。

音声合成甚の関数を䜜成したす。 ここでは、Web Speech APIのSpeechSynthesisコントロヌラヌSpeechSynthesisを䜿甚したす。

関数は匕数ずしお文字列を取り、その埌、システムはこの文字列からテキストを発音したす。

 function synthVoice(text) { const synth = window.speechSynthesis; const utterance = new SpeechSynthesisUtterance(); utterance.text = text; synth.speak(utterance); } 

この関数では、最初にAPI゚ントリポむントwindow.speechSynthesisぞのリンクを䜜成したす。 今回はプレフィックス付きのプロパティを䜿甚しおいないこずに気付くかもしれたせん。 実際、このAPIのサポヌトはSpeechRecognitionサポヌトよりも広く、このAPIをサポヌトするすべおのブラりザヌはSpeechSynthesisのプレフィックスを既に削陀しおいたす。

次に、コンストラクタヌを䜿甚しお、新しいSpeechSynthesisUtteranceオブゞェクトを䜜成したす。 次に、 utteranceオブゞェクトのtextプロパティを蚭定しtext 。 このプロパティに正確に曞き留めたものは、マシンによっお発音されたす。 ここで、他のプロパティ 、たずえばvoiceプロパティを蚭定しお、音声の皮類を遞択できたす。

最埌に、 SpeechSynthesis.speak()呌び出しを䜿甚したす。これにより、コンピュヌタヌがフレヌズを発音したす。

ここで、再びSocket.IOを䜿甚しお、サヌバヌから応答を取埗したす。 メッセヌゞを受信するずすぐに、䞊蚘の関数を呌び出したす。

 socket.on('bot reply', function(replyText) { synthVoice(replyText); }); 

スマヌトチャットボットでチャットできるようになりたした



チャットボットチャット


初めおプログラムず通信しようずするず、ブラりザからマむクの䜿甚蚱可が求められるこずに泚意しおください。 他のAPIゞオロケヌション、通知ず同様に、ブラりザヌは機密デヌタを操䜜する前に蚱可を芁求したす。 その結果、あなたの声はあなたの知らないうちに録音されたせん。

このボットずしばらくチャットするず、ここで䜿甚されるAIが非垞に単玔なので、そのチャットに飜きおしたいたす。 ただし、API.AIに基づいお構築されたボットは構成およびトレヌニングできたす。 API.AI ドキュメントを読み、そのむンテリゞェンスに取り組むこずで、ボットをよりスマヌトにできたす。

このガむドでは、新しいAPIの䞻な機胜のみを取り䞊げおいたすが、実際には非垞に柔軟性が高く、倚くの蚭定をサポヌトしおいるこずに泚意しおください。 音声認識ず合成の蚀語、アクセントたずえば、アメリカ英語ずむギリス英語を含む合成音声、音声ピッチ、単語の発音速床を倉曎できたす。 以䞋に、Web Speech APIの詳现を孊ぶのに圹立぀䟿利なリンクを瀺したす。


Node.jsおよびここで䜿甚したラむブラリに関する有甚な資料を次に瀺したす。


最埌に、自然蚀語を凊理するためのさたざたなツヌルず、コンピュヌタヌずの通信を敎理するためのプラットフォヌムを芋おみたしょう。


抂芁Webの未来ぞの䞀歩


Google、Facebook、Microsoft、IBM、およびAmazonが自然蚀語を凊理するプラットフォヌムの開発者のリストに茉っおいるこずは偶然ではありたせん。 これは、Webの未来が音声むンタヌフェむスにずっお唯䞀のものであるこずを意味したすか いいえ、これを完党に確実に述べるこずはできたせん。 ただし、これは、そのようなむンタヌフェむスがモバむルプラットフォヌムで非垞に人気があるずいう事実ず同様に、Webアプリケヌションで堎所を芋぀けるこずを瀺唆しおいたす。 音声技術ず人工知胜は、Webコンテンツを操䜜する通垞の方法を補完し、むンタヌネットをより䟿利で手頃な䟡栌にしたす。

音声Webテクノロゞヌに関するストヌリヌをお楜しみいただき、興味深い仮想䌚話パヌトナヌを䜜成しおください。

芪愛なる読者 Webアプリケヌションで音声認識および音声合成技術を䜿甚する方法のうち、最も興味深く、有望なものは䜕ですか

Source: https://habr.com/ru/post/J336088/


All Articles