改訂版 Javaによる知能プログラミング入門

まえがき

 本書は,「Javaによる知能プログラミング入門」(2002年2月26日付けで出版)の改訂版である。旧版は,初版から約7年経過し,途中,第6刷まで発行し,本書を含めると毎年の増刷に相当する。このように,本書は,多くの読者を獲得し,多くの有益なコメントと高い評価を得ている。多くの読者の皆様に心より感謝する次第である。実際に,筆者の担当講義(学部3年次向けのプログラミング演習)で本書を利用することにより,多くの学生が,Javaプログラミングの技能を効果的かつ短期間で習得し,人工知能(Artificial Intelligence(AIと略す)の様々な要素技術をJavaプログラミングを通して学び,その本質を理解するに至っている。初版の「まえがき」の冒頭に,「本書では,Artificial Intelligence(AI)の基礎的な要素技術を,Java言語によるプログラミングを通して学ぶことを目的としている。また,逆に,AIの基礎プログラミング(知能プログラミング)を具体的なJavaプログラミングで示すことにより,Java言語の実際的で有用な使い方を習得することが可能である」と紹介している。本書は,この目標(すなわち,Javaプログラミング技法を習得すること,および人工知能の基礎技術を理解すること)を十分に達成できる適切な入門書であると自負している。特に,第1章の「Javaの基礎」は,Javaプログラミングを習得するために,必要最小限の題材がコンパクトにまとめられており,例えば,C言語などを習得している読者ならば,効果的にJavaプログラミングを短期間に習得することが可能である。

 Java言語は,ここ数年の間に,バージョンアップを繰り返し,最新のJava言語を深く習得するためには,その他の適切な入門書を参考にすると良い。本書では,新たに「リレーショナルデータベース」の章を設けたことにより,読者は,最新のJava5で導入された新たな文法などを実践的に習得することが可能である。近年,AI技術は,コンピュータの応用技術として多くの有用なシステムに利用されている。例えば,Webにおけるサーチエンジンの実装に関連しては,自然言語処理技術の応用が実践されている。ここでは,Webページにおける内容を効果的に分析して検索するための重要な要素技術となっている。本書では,新たな章として,「自然言語処理」を設けたことにより,読者は,実際のWeb API(Yahoo! テキスト解析)の利用例をJavaプログラミングとして習得することが可能である。

 最近,Web を利用した知的なユーザ支援機能を実現するために,知的Web 技術とWeb プログラミングとしてのマッシュアップ手法が着目されている。知的Web(Web Intelligence)というキーワードには,明確な定義はないが,その対象とする範囲は,Web2.0 技術やセマンティックWeb 技術に関連して多く最新のテーマを包含している。例えば,知的Web の応用分野として,Web サービス,Web 電子商取引,Web エージェント技術,XML,次世代オントロジー,および,情報共有技術などがあり,既存のAI応用技術,マルチエージェントシステム,電子商取引技術を融合した新しい分野として確立されつつある。例えば,Web に関連した人工知能の会議として,IEEE/WIC/ACM International Conference on Web Intelligence がある。この会議はWIC (Web Intelligence Consortium) を母体としている。

 一般的に,知的なユーザ支援機能の実現に関連して,効果的なユーザインタフェースを実装するためには,その開発に多くの工数が必用とされる。一方,既存のWeb ブラウザを利用するWeb アプリケーションを導入することにより,このような知的なユーザインタフェースの効率的かつ効果的な実現が可能である。最近では,Web ビジネスを展開する多くの企業により,有用なWeb API が数多く公開され,知的なWeb アプリケーション(知的Web)を実現するために利用可能である。例えば,Google, Amazon, そして, Yahoo!などのWeb 関連企業が,自社のWeb サービスを提供するための手段として,Web API を公開している。開発者は,これらのWeb API を使用することにより,インターネット上の様々なサービスを自分のWeb サイトに組み込む事が可能となる。このようなWeb API には,Google の提供する地図サービスであるGoogle Maps,Amazonが所有する書籍データにアクセスするためのAmazon Web サービス,Yahoo!の日本語テキスト解析のためのWeb API,そして,YouTube で配信されている動画の情報を取得するためのWeb API など,インターネット上には多くのWeb API が公開されている。知的なプログラムであるエージェント技術によりWeb API の抽象化が進めば,エージェント間の連携に基づくマッシュアップが可能になり,より高度で知的なWeb アプリケーションをプログラミングなしに実現できる。Web API に関するマッチメイキングのような,エージェントに基づくマッシュアップに関して今後の研究の発展が期待される。本書では,紙面の都合で,エージェント技術の詳細な解説は他の入門書に譲ることにするが,エージェント技術の中心となるモバイルエージェントに関連して,Java技術との関連を解説している。 さらに,このような知的Web技術により社会的波及効果が期待される応用分野として,Blog(ブログ)やSNS(ソーシャルネットワーキングサービス)を用いた意見の集約・共有化サービスや議論支援サービス等が注目されている。このような技術は,様々な組織において根拠に基づく意思決定を実現するために求められており,今後その重要性は益々増していくと考えられる。本書では,これらのサービスの開発に欠かせない自然言語処理の基礎技術として言語解析結果の簡単な利用法を4章の「自然言語処理」で説明している。

 旧版からの主な変更点は,次の6点である。(1)第1章に,オープンソースの統合開発環境であるEclipseを使ったJavaプログラムの開発方法に関して説明を加えた。これにより,効果的にJavaプログラミングの実践と習得が可能になることが期待できる。(2)第2章に,新たに「リレーショナルデータベース」の節を設けた。ここでは,知能プログラミングで重要なデータの効率的な保存手法に関連して,リレーショナルデータベースについて説明する。ここでは,リレーショナルデータベースにおいて重要な関係演算の実装例を示す。また,リレーショナルデータベースの実装を通して,Java5で導入された新たな文法(総称型,拡張forループ,Boxing,可変長引数関数)の利用方法について説明する。(3)第4章に,新たに「自然言語処理」の節を設けた。自然言語処理とは,人間の言葉をコンピュータで処理する技術のことである。コンピュータに言葉の構造を解析させ,意味を理解させることができれば,検索,要約,翻訳,対話などを自動化できるだけでなく, Web上の膨大なテキスト情報を効率的に扱えるようになる。本節では,自然言語処理システムの入門として,具体的に,コンピュータネットワーク上のコミュニケーション手段のひとつであるチャット(chat)システムを実装方法を示し,そのシステム上で簡単な会話を実現するシステム(チャットボット)をJavaで実現する方法を紹介する。ここでは,JavaによるWeb APIの利用技術と自然言語処理プログラミングの基礎を効果的に習得可能である。(4)第3章に,旧版の「モバイルエージェント」を移し,新たに書き直した。ここでは,筆者らが実装したモバイルエージェントシステム(MiLog(マイログと読む))の実装例と利用例を示すことにより,Javaを利用したモバイルエージェントの実装の概略を理解する。紙面の都合で,他の章とは異なり,実際的なJavaプログラミングの部分は,省略した。本節では,エージェント技術の要素を習得することを目的とする。(5)旧版にあった「整合性管理機構」の節を割愛した。本節は,整合性管理機構のJavaによる実装を具体的に解説しており,他の入門書にない特長であるが,紙面の都合上,別の書籍で改めて解説することとした。(6)読者の利便性を考慮して,参考文献を,全面的に見直し,より新しく適切なものに更新した。

 Javaは, 1995年に Sun Microsystems社によって提案された言語である。驚くことに, Javaは,またたくまの間に,世界中で使われるようになった。これには, Javaにおけるプログラミングの簡単さ,マルチプラットフォームでの利用可能性などさまざまな理由がある。最近の情報系学部の学生に聞くと, Lispや Prologは知らないが, Javaは知っている,という学生が多い。筆者は,多くの人にAIプログラミングの楽しさや面白さを体験してもらうには, Javaを使って書いた新たな AIの教科書が必要であると感じた。すなわち,本書執筆のおもな動機は,AIの入門書として,AIの基礎的な要素技術を Javaによるプログラムを示すことにより,やさしく解説することである。本書によって, Winstonの「 Artifcial Intelligence[1]」や「 Lisp[2]」のように,AI入門者が,実際にシステムを試作することで,AIや Javaの面白さを実感していただくことができれば,幸いである。

 各章は,以下のような内容である。 1章では,本書での Javaを用いたプログラミングを理解するために最低限必要な, Java言語の基礎を説明する。 Javaが初めてという読者は, 1章から読み始めていただきたい。また, Javaの初心者は,巻末の参考文献に示した良書などを参照しながら学習するとよい。 2章では,AIプログラミング(知能プログラミング)の基礎となる技術として,探索手法とパターンマッチングを示し,その具体的なプログラムを紹介する。探索手法は,知能プログラミングの基本中の基本であり,その他の要素技術の実装において基礎となる本質的な技術である。また,ここでのパターンマッチングのプログラムは,特に,3章の推論システムやプランニングシステムでも用いられる。さらに,前述したように,新たに,リレーショナルデータベースの解説を設けた。ここでは,最新のJava5を活用したJavaプログラミングを習得する。3章では, AIの要素技術となる,知識表現技術,推論機構,およびプランニングと,そのプログラムを示す。ここでは,知識表現技術として,セマンティックネットとフレームを示す。推論機構として,ルールベースシステム(プロダクションシステム)を示す。さらに,追加の節として,モバイルエージェントを説明する。ここでは,Javaによるモバイルエージェントの実装技術を説明する。また,具体的に,筆者らが開発したモバイルエージェントシステム(MiLog)を示すことにより,より柔軟な知能プログラミングが可能になることを理解する。 4章では,AIの先端的な応用トピックとして,自然言語処理と意思決定支援システムを解説する。自然言語処理の節では,前述したように,会話を実現するシステム(チャットボット)をJavaで実現する方法を紹介する。意思決定支援システムの節では,要素技術として, Analytic Hierarchy Process(AHP)を実装したプログラム例を示す。 AHPは,人間の主観的評価を数量化する手法であり,支援システムの基本機能として,多くの応用システムが構築されている。

 各章の章末には,その章で扱うトピックに関連して演習問題を掲げてあり,巻末に参考文献を示してある。演習問題は,おもにプログラミングに関する課題が多く,なかには最新のテーマに関連するものもある。是非,これらの課題に取り組んで頂きたい。また,本書で紹介するすべてのプログラムの完全なソースファイルは,添付の CD-ROMに収録されている。詳細は,本書の付録を参照されたい。まずは,本ソースファイルを各自の計算機環境でコンパイルして,試しに動かしてみるとよい。

 本書は,読者の目的に応じて読みすすめることができるように構成されている。以下に例を示す。授業で用いる場合は,特に, 2章および 3章に重点を置くとよい。ここで, Javaを未習得な学生を対象にする場合は, 1章に関する説明を最初の授業で行うと効果的である。独学で読み進める読者は, Javaが未習得ならば, 1章から始め, 2章および 3章,そして 4章という順に学習を進めるとよい。簡単な Javaプログラムを読むことが可能ならば, 2章から始めてもかまわない。また,AIプログラミングは一通りやったことがあるという読者は, 4章を読むとよい。 4章の内容は,自然言語や意思決定支援に関するAIの応用的なテーマを扱っており,他の教科書では,プログラムまで解説しているものは少ない。特に,自然言語処理の節は,実際のプログラムを示すことにより,最新の自然言語処理の基礎的入門書として,活用できる。

 本書では, Javaの入門的な知識は,その他多くの入門書に譲り,以上のように, Javaプログラミングのより実際的な利用方法に焦点を当て, Javaプログラムを易しく解説することに重点を置いている。本書に掲載されたJavaソースコードを一読することにより,実践的なJavaプログラミング技法を短期間に習得することができる。本書で紹介したAI技術は,情報系学部の大学3年生以上の学生を対象としている。読者は,Javaプログラミングの実践的な入門書として,また,AIの基礎的な入門書として,本書を活用して頂ければ幸いである。本書は,筆者が担当している講義である「知能プログラミング演習II」(名古屋工業大学情報工学科3年次を対象)の演習課題とその講議ノートをベースにしている。本講議の経験から,本書を一読することにより,実践的な Javaプログラミングおよび知能プログラミングの基本を効果的に理解することが可能である。

 最後になりますが,大囿忠親氏(現,名古屋工業大学大学院准教授)および白松俊氏(現,名古屋工業大学大学院助教)には,本書全般にわたってプログラミングおよび草稿の作成をお手伝いしていただいた。両氏とは,本書原稿の完成に向けて,楽しく,有意義な時間を多くもつことができました。両氏に深く感謝いたします。さらに,新谷研究室の多くの大学院生,名古屋工業大学情報工学科の学生のみなさんには,プログラムのバグの発見などに協力していただいた。また,多くの読者に,有用なコメントや質問をいただきました。これら有用なコメントが本書改訂版を出版する動機となりました。ここに深く感謝いたします。

2009年8月

新谷虎松


1 Patrick Winston, Artificial Intelligence, 3rd Edition, Addison Wesley, 1992.
2 Patrick Winston, Berthold Horn, Lisp, 3rd Edition, Addison Wesley, 1989.

戻る