通信ソフトウェア作成のための知識獲得の研究
ATR通信システム研究所 通信ソフトウェア研究室 島 健一
1.はじめに
将来の通信システムは、現在より一層の高機能化、高性能化が実現され、ユーザの要求に対しても柔軟かつ迅速な対応が可能になります。例えば、臨場感通信のような人間相互の意思疎通が円滑に行える場を提供したり、意図に応じて情報内容を変換できる通信が提供されます[1]。こうした通信システムのソフトウェアは、現在よりはるかに大規模で複雑なものとなり、ソフトウェア作成の効率化の一層の推進が必要となります。
従来、ソフトウェア作成の効率化に向けた研究では、抽象化プログラミングやプログラムの部品化などの技法の提案、プログラム開発支援ツールの開発が盛んに行われています。最近ではさらにソフトウェア作成の自動化を目指して、ソフトウェアの設計や要求の理解に研究の目が向けられています。ATR通信システム研究所では、ソフトウェア作成を、人間の要求を計算機内にモデル化し、計算機で実行できる形に構成し直すプロセスと捉え、対象を通信システムに限定し、以下の知的な機能を持つ支援システムについて研究を進めています[2]。すなわち、ユーザ要求の分析支援機能、ユーザ要求を計算機内表現に変換(モデル化)するモデル機能、通信に関する常識や専門知識、ソフトウェア設計に関する知識の蓄積機能を持つ支援システムです。また、通信ソフトウェア作成を容易にするための人間と計算機との知的インタラクション、ソフトウェアの維持管理を容易にする思考過程の分析機能も必要とされます。
ここでは、将来の様々な通信分野のソフトウェア作成の自動化に役立つ通信に関する知識、ソフトウェア設計に関する知識の獲得法について紹介します。この知識を利用することにより、システムの新規設計時、あいは機能の追加、変更時に迅速な対応が可能となり、ソフトウェア生産性の向上が図れます。またソフトウェア維持管理における人間の負担を軽減することができます。
2.通信ソフトウェア作成のための知識
通信に関する要求を理解し、通信ソフトウェアの作成を自動化するためには、通信に関する常識、専門知識(通信世界知識と呼ぶ)を計算機内に持つことが必要になります。
通信世界知識には、
(1)通信に関する用語の知識(用語の定義、用語の用い方など)
(2)通信における事象の因果関係の知識(通信プロトコルに関する知識など)
(3)通信システムの構成方法の知識(網構成法、高信頼性構成法など)
(4)通信ソフトウェア、設計方法の知識(プログラム構造、データ定義の知識など)
など様々なものが含まれます。
当研究所では、知識の抽出、蓄積(これらを合せて知識獲得と呼ぶ)方法について以下の研究をしています。
(1)電話機の仕組み、電話のかけ方などの知識を技術文書から獲得する。
(2)設計方法に関する知識を実際の人間の設計プロセスから獲得する。
(1)は、「本は知識の宝庫」と呼ばれるように知識を体系的に集めるのに適しています[3]。人間が本を呼んで理解する過程を自動化することにより知識を獲得しようとしています。
(2)は、従来、知識エンジニアが人手で集めていた設計に関する知識を自動的に獲得しようとしています。
3.技術文書の知識体系化
人間がソフトウェアを設計する場合、各種の仕様書、マニュアル、解説書などの技術文書を読んで理解した結果を基に設計を進めています。そこで、本を読んで理解する過程に準じて、専門書、設計文書から知識を体系的に集めるための研究を行っています。知識抽出の観点から、各語彙、重要語句の用語の定義関係などの構造を技術文書などから抽出し、さらに文章の内容の意味を取り出し知識体系を作成するものです。
技術文書の対象として、高度情報社会の基盤技術となるISDNのユーザ網インタフェース(I-INTERFACEと呼ばれる)に関するCCITT(通信分野の世界標準化機関)勧告書[8]を取り上げ検討を始めました。知識の体系化は以下のステップで行います。
(ステップ1)ハイパーテキスト(Hypertext)システム1を用いて、章立てや節立て、段落の文書構造の管理をします。また段落や図の間の参照関係も保持します。たとえば、図1はハイパーテキストを用いた文書構造と参照関係を表しています。この例では、段落1は段落2、段落3を参照しています。
(ステップ2)文書から重要語句を抽出し、その語句の用い方を示す視点を付けて、上位・下位、全体・部分の関係に従って階層的に整理します。視点の例としては、定義や機能、影響、能力、実行条件などがあります。たとえば、図1では、定義の視点からチャネルには、BチャネルとDチャネルが含まれることを示しています。
(ステップ3)さらに、文書から因果関係や時間順序、役割の関係を抽出します。それを重要語句の階層に付け加えることにより、図2に示す意味ネットワークを完成して総合的な知識ベースを構築します。この意味ネットワークは、音声を伝達する場合の知識を表わしています。
ただし、自然言語で書かれた本は、人間が当然持っている常識を前提にしているため、意味的な解析や文脈処理が必要となります。しかし、この解析技術はまだ未熟であり、現在のところ人間との協調作業により実現しています。
こうした知識体系化の研究に併せて以下の研究を進めています[5]。
(1)技術文書から知識を得る場合、文書に含まれる知識の他に、人間が積極的に常識を知識ベースに付加することが必要です。この常識の付加をガイドするためのインタラクティブな支援法を研究しています。
(2)この知識ベースを用いてユーザ要求を知識ベース内の知識と照合し、ユーザ要求を理解するとともに、要求を補完する研究を行っています。
(3)知識の追加により通信世界知識を順次拡大させた場合、既存の知識が変化、修正されます。その修正法について研究しています。
今後の課題としては例外や矛盾を含む知識の取り扱い方があげられます。特に、ステップ3で述べた時間順序に多くの例外条件があり、これをいかに取り扱うかが問題となっています。
4.設計知識の獲得
文書からの知識獲得は、いうなれば整理された知識が中心でした。しかし、ソフトウェアの設計には、まだ整理が済んでいない知識を扱うことも必要であり、その知識はやはり人間から学ばなければなりません。
このためには、人間によるソフトウェアの設計過程の観察、インタビューによる設計知識の獲得が必要です[4]。その設計知識のうち、特に問題解決過程における判断の知識を獲得することが重要です。
従来の設計では、設計情報(仕様書、プログラムなどのドキュメント)を残すことを主にしていたため、設計者が考え、判断した過程については整理されたものは残っていません。しかし、機能追加、変更を行う場合に必要なのはこの問題解決過程における判断です。
設計時の判断の知識獲得に向けての第1ステップとして、以下の知識について分析を行っています。 (1)候補案の作成−どのように問題に対する解答案を作成するか
(2)問題の分割−与えられた問題をどのように部分問題に分割するか
(3)作業順序−部分問題をどのような順序で解決したか
当研究所では、相手の名前を言えば、自動的に電話帳を調べ、その相手にダイヤルするインテリフォンのソフトウェアを、曖昧な要求から実際に設計し、その過程の観察実験を行いました。
この観察実験では、設計者と観察者が、二人で一組になり、それぞれの設計者が設計時に何を考えていたかをビデオに取り、後でその設計過程をプロトコルアナリシス法2により分析しました。
その分析により、以下の知見がえられました[6]。
(1)設計途中での思考の移り変りの図式表現法
(2)設計時に中断がおきる理由の発見
(3)設計作業の順序の進み方を制御するメカニズムの発見
その知見をもとに、設計者にあまり負担をかけずに問題解決時の判断の記録をとり、分析するための検討をシステムの試作を通じて行っています[7]。図3に示すように候補案の作成、問題分割、作業順序の判断を理由と関連付けて自動的に記録します。つまり、試行錯誤的に設計を進めていく過程を、計算機が整理しながら記録していきます。
このシステムにより、人間の思考を視覚化することで設計知識の分析を容易にし、さらに以下の知識を取り出すことが可能となります。
・なぜ、設計がうまくいかなかったか、別の発想は無かったか、どんな思考パターンがあったかなどの分析に用いることができます。
・問題の分割過程が実際の設計結果と関連づけて記録されているので、ある案が失敗した時は、次にどの設計案を選んで設計を進めれば良いかわかります。
・設計情報を変更しようとする時は、どういう判断の過程でその情報が作られたかが記録されているので、そのポイントまで戻り、そこから新たに設計を進めることができます。
5.おわりに
知識工学の分野では、知識獲得ボトルネックが久しく言われてきました。ソフトウェアの設計、特に、要求理解、要求分析の過程は、高度な判断が要求され、所要の知識も広い範囲にわたるため、なかなか知識が獲得しづらい分野です。当研究所では、この解消に役立てようと技術文書の知識体系化と設計知識の分析という2種類の方法で研究を進めていますが、現状では、まだ、知識を自動的に獲得できる部分は多くありません。
技術文書からの知識獲得に関しては、将来は、この一連の獲得プロセスを自動化し、計算機内に通信に関する常識、専門知識を蓄積していく予定です。さらに、このシステムの中に学習機能を追加し、計算機自らがいろいろな知識を獲得できるような知的なシステムを作成し、便利で使いやすいものにしていきたいと考えています。
設計知識の獲得に関しては、現在までに確立した知識獲得のメカニズムを基に、問題の分割と候補案作成、作業順序に関するソフトウェア設計の知識を集める予定です。将来は、これらの分析から「こういう場合の設計は、こうすればできる。」といった知識を獲得したいと考えています。
参考文献