IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Sample IT projects  >

WebSphere Voice SDK によるエンタープライズ・データの音声検索と音声応答

今、話しかけました?

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

サンプルコード

原文はこちら

原文はこちら


レベル: 初級

Kulvir Bhogal (kbhogal@us.ibm.com), Software Engineer, IBM Corporation
Joe Puli (joepuli@hotmail.com), Software Engineer

2002年 9月 01日

本稿は、皆さんの音声を使ってDB2のデータを読み出す方法を紹介します。今回のプロジェクトでは、WebSphere Voice SDK 1.5、Visual Age for Java 4.0、およびIBM DB2 UDB 7.2を使用します。PeopleSearchと名付けたプロジェクトを順を追って説明していきます。このプロジェクトは、皆さんがアプリケーションに名前を音声で提供すると、アプリケーションがその名前に対応付けられているデータをデータベースに照会するというものです。

今回の試みについて

データベースを扱った経験のある方なら、おそらく、データ・ウェアハウスからデータを読み出すためのSQLのselect文については、よくご存じのことと思います。Javaが出現して間もなく、プログラマーはJavaプログラムでデータベースにアクセスしたいと考えるようになりました。そこで、Java Database Connectivityという概念が登場しました。われわれ多くが、好感を持ってJDBCと呼んでいるものです。ところで、データベース・プログラマーやカスタマーのニーズは満たされているのでしょうか。はい、まったくもって、そのとおりです。

コンピューター・プログラマーにとって、そして彼らの給料にとっても幸運なことに、カスタマーは、より多くのことを望んでいます。カスタマーは、音声コマンドを使ってデータベースとやりとりしたいと思っているのです。リレーショナル・データベースに格納されたデータを、自分の音声によって取り出したいと思っています。

なぜユーザーは、音声コマンドを使いたいのでしょうか。子供のころ、『宇宙家族ジェットソン』のテレビ番組をたくさん見すぎたからかもしれません。タイプするのが面倒くさいのかもしれません。あるいは、何か合理的な理由があるのかもしれません。視覚障害のあるユーザーが簡単にデータのやりとりを行えるようになるだけでなく、携帯電話やモバイル機器でも、こうしたアプリケーションは重宝されることになるでしょう。名前を告げれば、その人の電話番号を検索できるとしたらどうでしょうか。ドライブしながら誰かに電話をかけるという世界が、実現するかもしれません。そんなことが実現できれば 素晴らしいと思いませんか。

何と、この記事は、その感動を味わって頂くためのものなのです。本稿では、IBM WebSphere Voice SDK V1.5とVisualAge for Java 4.0とIBM DB2 Universal Databaseを組み合わせて、音声操作でエンタープライズ・データを読み出す方法を紹介します。

数年前までは、こんな芸当は不可能だったことでしょう。しかし、今ではIBM VoiceServer SDKにバンドルされているVoice Technologiesインフラストラクチャーを使うことで、IBMが長年の研究の末特許取得した音声認識技術の成果を利用できるようになったのです。この記事で説明することですが、もはや、この課題を達成するのに、何千行ものコードを読み解く必要はなくなったのです。この一見難解そうに見える目標を達成するために必要なインフラストラクチャーは、わりと単純なものなのですが、われわれのやりたいことを実現するには充分です。それでは、始めましょう。




上に戻る


必要となるもの

われわれは、このプロジェクトを達成するのに、IBM DB2 UDBバージョン7.2をインストールしてあるマシンを使用し、オペレーティング・システムにはWindows NTを使用しました。コンピューターに接続可能なマイクロホンと、スピーカーかヘッドホンも必要です。また、Javaサーブレット、SQL、JDBC、および基本的なVoiceXMLのタグ定義を理解しておく必要があります。

われわれは、IBM VisualAge 4.0 for Javaを使ってコードの開発を行いました。まず、このプロジェクトを実際に動かしてみるために、この統合開発環境 (IDE) の使い方をご説明します。また、WebSphereと同様の環境をエミュレートするために、IDEのWebSphere Test Environmentを利用することとします。もちろん、実際のアプリケーションの場合、テスト環境を使用せずに、実機 (real McCoy) のWebSphere Application Serverを使用されることでしょう。しかしながら、WebSphere Test Environmentは、われわれの手法を実際にお見せしたり、プログラムをデバッグするためには、非常に好都合なものです。




上に戻る


IBM WebSphere Voice Server SDKバージョン1.5.0のインストール

Voice Server SDKをインストールするには、先に、サン・マイクロシステムズのJava Runtime Environment (JRE) バージョン1.3以上をインストールしておく必要があります。JREは、VoiceServer SDKのディストリビューションにバンドルされており、インストール・ディレクトリーに入っています。なお、Voice Server SDKは、IBM WebSphere Voice Serverがインストールされているマシンにはインストールできませんので注意してください。Voice Server SDKのインストールに難しいことありませんので、問題は何も起こらないことと思います。




上に戻る


データベースの設定とデータの挿入

バックエンドの データベースは、複雑なものではありません。ユーザーは、アプリケーションに人の姓を指定してやります。すると、アプリケーションは、この姓をキー値にして一意に決まる行を返してきます。今回は、非常に単純化した実験にしています。たとえば、同じ姓の人が二人いることは想定していません。もちろん、実際のアプリケーションの場合、条件をもっと厳密なものにする必要があるでしょう。

コマンド・ライン・プロセッサーを使って以下のコマンドを実行して、環境設定を行います。

db2 => create database empldb

db2 => connect to empldb

次に、レコードの形式に合わせてデータベースのテーブルを作成します (ここでは、コマンドを数行に分けていますが、これをタイプするときには全部を1行で入力する必要があります)。

db2 => create table employee (FirstName varchar(20), lastname varchar(20) not null, 
department varchar(30), designation varchar(30), city varchar(30), state varchar(30), 
country varchar(30), phone varchar(30), email varchar(30))

次に、データベース・テーブルに以下のレコードを挿入します。

db2 =>insert into employee values ('Mike','Jordan','IBM Global Services','Manager','Dallas','Texas','USA','123-456-7890','mike@somewhere.com')

db2 =>insert into employee values ('Dan','Smith','IBM ThinkPad Sales','Technician','Hollywood','California','USA','123-456-7120','smith@somewhere.com')




上に戻る


VisualAge for Javaを話上手にする

本稿で使用するプロジェクトzipファイルをダウンロードしてください。このzipファイルにJARファイルが1個入っているはずです。VisualAge for Java Workbenchでプロジェクトを1個新規に作成します。(われわれは、このプロジェクトをpeopleSearchと名付けました。) プロジェクトzipファイルからJARファイルをインポートします。すると、com.ibm.peoplesearchというパッケージが表示されるようになるはずです。このパッケージは、メッセンジャーの働きをするもので、必要に応じてデータベースからデータを収集します。

Servlet Engineのクラス・パスは、WebSphere Test Environment Control Centerを使って編集する必要があります。「Select the projects to include the classpath (クラス・パスに含めたいプロジェクトの選択)」の項目で、いま作成したpeopleSearchプロジェクトを選択します。また、「Enter the class path (クラス・パスの指定)」の項目には、IBM DB2 JDBCドライバー (db2java.zip) のパスを指定します。この2つのことを行うと、以下の図1 のような表示になるはずです。


図1. Servlet Engineのクラス・パスの設定

プロジェクトzipファイルには、また、ファイル名がwelcome.vxmlというファイルとpeoplesearch.jspというファイルの2個のファイルも入っているはずです。これら2個のファイルをWebSphereのテスト環境ディレクトリーにコピーしてください。デフォルトでは、以下が、このディレクトリーになっているはずです。

C:\Program Files\IBM\VisualAge for Java\ide\project_resources\IBM WebSphere Test Environment\hosts\default_host\default_app\web

次に、Servlet Engineを始動します。Servlet Engineが始動したことは、コンソールに「***Servlet Engine is started*** (サーブレット・エンジンが始動しました)」というメッセージが表示されることでわかります。




上に戻る


Test EnvironmentとIBM Voice Server SDKの連携

さて、これでサーブレット・エンジンは稼働した状態になっていますので、今度は、SDKをWebSphere Test Environmentと連携させます。

DOSプロンプトを使って、Voice Server SDKのインストールされているディレクトリーに切り替えます。このインストール・ディレクトリーに、binというディレクトリーがあります。われわれの場合、デフォルトのインストール設定にしましたので、binディレクトリーはC:\Program Files\VoiceServerSDK\bin\ です。

このbinディレクトリーにバッチ・ファイルがありますので、これを実行します。次のDOSコマンドを実行します。

vsaudio_en_US "http://localhost:8080/welcome.vxml"

初めてこのコマンドを実行した場合、Voice Server SDKは、Audio Setup Wizard (オーディオ設定ウィザード) を起動します (図2 参照)。


図2. Audio Setup Wizard (オーディオ設定ウィザード)

このウィザードを使って、マイクロホンやスピーカーの設定を行います。ここで尋ねられる質問は、簡単に答えることのできるものですが、答は、それぞれのオーディオ設定によって違ってきます。設定作業は、設定ウィザードのガイドにしたがって進めることができるようになっています (図3 参照)。


図3. Audio Setup Wizard (オーディオ設定ウィザード) を使って設定作業を進めることができる

マイクロホンは、最適の録音環境になるようにします (図4参照)。


図4. ウィザードの指示にしたがってヘッドセットを調整する

次にウィザードは、録音環境を設定するための一連の手順を進めていきます。これらの手順は簡単なもので、2、3分もあれば、設定は完了します。

ウィザードでの設定がすべて終わると、今度は、以下のようなやり取りをシステムと行います。

System: Hello and Welcome to IBM's Address Book Application. Please say the last name of the person whose address you want to search.

User: [姓を呼びます]

すると、システムは、このアプリケーション用にインライン記述されている文法ファイルで、その姓の確認を行います。

<grammar>
<![CDATA[[      Jordan | Smith | Peters | Jackson| Biggs      ]]]>
</grammar>>

実際のアプリケーションの場合、文法ファイルは、Java Speech Grammar Format (JSGF) にしたがって、動的に作成され、VoiceXML文書にリンクされることになります。文法の詳細は、この記事の範囲を越えています。文法の詳細については、参考文献を参照してください。

文法的な妥当性のチェックを行うと、システムは、入力を収集し、ユーザー入力が妥当であれば、people.vxmlファイル内の <filled> 要素を実行します。

System: I heard you say $userInput, would you like to continue?

User: Yes

ここで、システムは、この要求を、VoiceXMLのタグ <submit> を使って、JavaServer Pagesのページであるpeoplesearch.jspに転送します。その人の姓が、照会文字列として、JSPのページに送信されます。

このJSPでは、まず、これが <vxml version="1.0"> という形式のファイルであることを明言します。それによって、VoiceSDKにJSPページ内のVoiceタグを解釈してもらえるようになります。ユーザーが音声で与えた名前を request オブジェクトから取り出してくるには、以下の構文を使います。

String name = request.getParameter("name");

JSPは、情報の与えられた形式や方式には関知していない点に注意してください。われわれは、VXMLを使って音声で語られる姓と文法で指定した姓とを1対1対応させました。そして、この姓を照会文字列に連結し、その照会文字列を基にgetParameterメソッドでパラメーターを読み出すようにしています。

要求パラメーターを読み出したら、その新たに獲得した情報をcom.ibm.peoplesearch.EmployeeInfoクラス (すなわちEmployeeテーブルのデータベース・アクセス・オブジェクト) のコンストラクタに送ります。

コンストラクタのコードは、以下のとおりです。


com.ibm.peoplesearch.EmployeeInfoコンストラクタのコード
                
/**
 * EmployeeInfo constructor comment.
 */
public EmployeeInfo(String empName) 
{
 super();
 
 try

 {

  //load the IBM DB2 driver
  
  Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); 
  // Get Connection object to query the EMPDB database 
     conn = DriverManager.getConnection(URL);
     // get the employee record from the employee 
     // and populate the Class Attributes.
     // empName is the Employee LastName value 
     // we get from Application EndUser.
     if(empName !=null){

      String strSQL = "select * from employee where LASTNAME='"+empName+"'";
      
      stm = conn.createStatement();
      
      rs = stm.executeQuery(strSQL);

      int i =1;
      
      while(rs.next()){

       recordFound = true;
       strFirstName = rs.getString(i);
       strLastName = rs.getString(++i);
       strDept = rs.getString(++i);
       strDesignation = rs.getString(++i);
       strCity = rs.getString(++i);
       strState = rs.getString(++i);
       strCountry = rs.getString(++i);
       strPhone = rs.getString(++i);
       strEmail = rs.getString(++i);       
      }


       }
     
     }
 catch(Exception e){

  System.out.println("Error in the EmployeeInfo Object constructor");
  System.out.println("Error is :"+e.getMessage());
  try{
   if(rs!=null){rs.close();}
   if(stm!=null){stm.close();}
   if(conn!=null){conn.close();}
  }
  catch(Exception sqe){
   System.out.println("Error is :"+sqe.getMessage());
  }
   
  
  
  }
}

コードを見ればわかるように、まずは、DB2データベースとの接続を確立しています。次に、ユーザーが入力した姓を使ってSQLの照会を作成します。指定した条件に合致するレコードが見つかった場合、インスタンス化したオブジェクトのプロパティーに、そのデータを設定します。

さらに、このデータはVoiceSDKに伝達されます。VoiceSDKは、データに含まれるタグを理解し、80年代に大はやりしたSpeak-and-Spellsに非常に似た感じのコンピューター化された音声を使って、ユーザーに向かってスペルを読み上げます。今回紹介したアプリケーションは、かなり初歩的なものですが、皆さんは、この小規模なアプリケーションを基礎に拡張していくことで、皆さん自身のエンタープライズ・ソリューションを構築していけることと思います。




上に戻る


まとめ

皆さんの隣のキュービクルに、コンピューター画面と本当に会話しようとしている人がいた経験はありませんか。もし、「その人」が皆さんだとしたら、少なくとも皆さんは、音声を使って何か生産的なことを行えることになります。たとえば、エンタープライズ・データを取り出す、というようなことを。本稿では、数年前だったらSFの世界だと考えられていた感動的な技術、すなわち音声認識の技術を利用する手順を紹介しました。IBMは、IBM ViaVoiceやVoice Server SDKなどの製品で受賞するなど、音声認識の開発で先頭を走ってきました。この記事では、皆さんの音声だけを使って実現できる素晴らしい芸当の一端を紹介しました。

ダウンロード





上に戻る


ダウンロード

ファイル名サイズダウンロード形式
i-voicesdk.zipHTTP
ダウンロード形式について


参考文献



著者について

author name

Kulvir Singh Bhogalは、IBMコンサルタントとして、米国中のお客様サイトでJava中心のソリューションの考案および実装を行っています。Kulvirの連絡先はkbhogal@us.ibm.com です。


Joe Puliは、ベイ・エリア (サンフランシスコ湾岸地域) を本拠とする独立系ソフトウェア・エンジニアです。数多くの企業で開発を行ってきており、Javaを中心としたプロジェクトを専門としています。Joeのメール・アドレスは、joepuli@hotmail.com です。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ