以下、添付図面を参照して本発明の一実施の形態を説明する。本実施の形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
(1)本実施の形態による故障診断装置の構成
図1において、1は全体として本実施の形態による故障診断装置を示す。この故障診断装置1は、過去に作成された複数の事故報告書から不具合情報をそれぞれ抽出し、抽出したこれらの不具合情報に基づいて故障診断を行うコンピュータ装置であり、CPU2、主記憶装置3、入出力装置4及び補助記憶装置5を備えて構成される。
CPU2は、故障診断装置1全体の動作制御を司るプロセッサである。CPU2は、補助記憶装置5に格納されたプログラムを故障診断装置1の起動時や必要時に主記憶装置3にロードし、ロードしたプログラムを実行することにより各種処理を実行する。なおプログラムは、図示しないネットワークを介して外部サーバから主記憶装置3にロードするようにしてもよい。
主記憶装置3は、例えば、揮発性の半導体メモリから構成され、CPU2のワークメモリとして利用される。また入出力装置4は、キーボードやマウスなどの入力装置と、液晶ディスプレイなどの表示装置とから構成される。入力装置は、ユーザが各種情報や指示を入力するために利用され、表示装置は、必要な情報やGUI(Graphical User Interface)画面を表示するために利用される。
補助記憶装置5は、ハードディスク装置、SSD(Solid State Drive)又はフラッシュメモリなどの計算機(コンピュータ)で読取り可能な大容量の不揮発性の記憶装置から構成される。補助記憶装置5には、各種プログラムや、各種データが格納される。本実施の形態においては、かかるプログラム及びデータとして、事故報告書データベース10、OS(Operating System)11、不具合情報抽出プログラム12、故障診断プログラム13、不具合情報テーブル14及び機器・部品階層関係辞書15が補助記憶装置5に格納される。
事故報告書データベース10は、過去に作成された事故報告書16が蓄積されたデータベースである。また事故報告書16は、過去の不具合に関する調査内容、調査結果及びそのとき実行した対策などの事例が記載された文書である。フォーマットは規定されている場合も,任意である場合もある。
不具合情報抽出プログラム12は、事故報告書データベース10に登録されている各事故報告書16から不具合情報を抽出して不具合情報テーブル14に登録する機能を有するプログラムである。例えば、事故報告書データベース10に登録された各事故報告書16の内容がそれぞれ図2のようなものであったとする。図中、斜体太字の部分は機器・部品を表し、下線の部分は不具合事象を表す。この場合、不具合情報抽出プログラム12は、例えば文書IDが「00001」の事故報告書16からは、「エンジン」の「オイル交換忘れ」という不具合情報と、「シリンダ」の「圧縮圧力低下」という不具合情報とを抽出し、抽出したこれらの不具合情報を不具合情報テーブル14に登録する。
なお、文書IDが「00001」の事故報告書16に関連して、「のため」という接続関係を示す表現がある場合、前者が後者を引き起こす、逆に言えば、後者が発生している場合には、前者が原因となる可能性があると推定することができる、このような原因と現象との関係(因果関係)に基づいて、故障原因を推定することもできる。
故障診断プログラム13は、ユーザにより入力された不具合事象に類似する過去の事例の不具合情報を抽出し、抽出した不具合情報に基づいて故障原因を推定し、推定結果に基づく対処方法をユーザに提示する機能を有するプログラムである。具体的に、故障診断プログラム13は、ユーザにより入力された、故障原因を診断する対象となる不具合事象に類似する不具合情報を不具合情報テーブル14上で検索し、当該検索により検出した不具合情報に基づいてその不具合事象の対処方法をユーザに提示する。
不具合情報テーブル14は、不具合情報抽出プログラム12が事故報告書16から抽出した不具合情報を管理するために利用するテーブルであり、図3に示すように、文書ID欄14A、事象ID欄14B、故障機器・部品欄14C及び不具合事象欄14Dを備えて構成される。不具合情報テーブル14では、1つの行が不具合情報抽出プログラム12により1つの事故報告書から抽出された1つの不具合情報に対応する。1つの事故報告書から、複数の不具合情報が抽出されることもあり、その場合、同一の文書IDを持ち、異なる事象IDを持つ複数の行が存在することとなる。
そして文書ID欄14Aには、対応する不具合情報を抽出した事故報告書16に付与されたその事故報告書16に固有の識別子(文書ID)が格納され、事象ID欄14Bには、その不具合情報に付与されたその不具合情報に固有の識別子(事象ID)が格納される。また不具合事象欄14Dには、対応する事故報告書26から抽出した具体的な不具合事象が格納され、故障機器・部品欄14Cには、当該事故報告書16から抽出されたその不具合事象が発生した機器・部品(以下、適宜、これを故障機器・部品と呼ぶ)の名称が格納される。
従って、図3の例の場合、「00001」という文書IDが付与された事故報告書16から「エンジン」の「オイル交換忘れ」という不具合情報と、「シリンダ」の「圧縮圧力が低下」という不具合事象とが抽出され、前者の不具合事象には「0000001」という事象IDが付与されると共に、後者の不具合事象には「0000002」という事象IDが付与されたことが示されている。なお、以下の説明においては、不具合情報の内容を「故障機器・部品の名称/不具合事象」の形式で表記するものとする。例えば、「エンジン」の「オイル交換忘れ」という不具合情報については「エンジン/オイル交換忘れ」と表記し、「シリンダ」の「圧縮圧力が低下」という不具合情報については「シリンダ/圧縮圧力が低下」と表記する。
機器・部品階層関係辞書は、図4に示すような機器・部品間の階層関係(親子関係)を管理するために利用される辞書であり、図5に示すように、部品ID欄15A、故障機器・部品欄15B及び親部品欄15Cを備えるテーブル状の構成を有する。機器・部品階層関係辞書15では、1つの行が1つの機器・部品間の親子関係に相当する。
そして故障機器・部品欄15Bには、機器・部品の名称が格納され、機器・部品ID欄15Bには、その機器・部品に付与されたその機器・部品に固有の識別子(部品ID)が格納される。また親部品欄15Cには、故障機器・部品欄15Bに名称が格納された機器・部品の親部品の名称が格納される。
なお、この機器・部品階層関係辞書15は、部品表(BOM:Bill of materials)などの構造データに基づいて作成することができるが、処理対象の事故報告書16などのテキストから自動的に作成することもできる。この場合には、テキスト内の「AのB」のような表現を手掛かりとして機器・部品間の親子関係(包含関係)を判断しながら機器・部品階層関係辞書15を作成する。
例えば、「バッテリの端子」のように2個の部品が「の」により接続されている場合には、これらの部品が親子関係にある可能性が高いため、「端子」が「バッテリ」の部品であると推定することができる。同様に、「AB」のような表現も2個の部品の親子関係を推定するための手掛かりとなる。例えば、「バッテリ端子」のように2個の部品が隣接して存在する場合、これらの部品が親子関係にある可能性が高く、「端子」が「バッテリ」の一部品(「バッテリ」が「端子」の親部品)であると推定することができる。
(2)本実施の形態による不具合抽出機能
(2-1)本実施の形態による不具合抽出機能の概要
ところで、図2の文書IDが「00002」の事故報告書16の内容に対して不具合情報抽出プログラム12が単純に不具合情報を抽出する処理を実行した場合、「バッテリ/経年劣化」という不具合情報と、「端子/腐食」という不具合情報とが抽出される。
しかしながら、後者の不具合情報は、故障した部品が「端子」というだけでは情報として不十分である。つまり、この例の場合、「端子」は「バッテリ」の端子を指していると推定されるが、「バッテリ」という情報が省略されているため、「端子」が「バッテリ」の端子を指しているのか、または「スパークプラグ」の端子を差しているのかが明確ではない(図4参照)。このため、このような不具合情報に基づいて実行された故障診断処理において、故障原因候補として「端子の腐食」との診断結果が提示されたとしても、ユーザはどの機器・部品の「端子」の腐食が故障原因であるかを特定することができない。
この場合、人間が事故報告書16を読む際には、省略された要素を自然と補完するため、上述のように「端子」の直前に「バッテリ」という親部品の名称が存在しない場合でも特に問題とはならない。しかしながら、事故報告書16から部分的に不具合情報のみを抽出するに際しては、省略された要素を何らかの方法により補完する必要がある。
そこで、本実施の形態の故障診断装置の場合、不具合情報において記載が省略されている情報(ここでは親部品)を推定し、その情報をその不具合情報に追加するようにして不具合情報を補完する親部品推定機能が不具合情報抽出プログラム12に搭載されている。実際上、不具合情報抽出プログラム12は、図5について上述した機器・部品階層関係辞書15を利用してそのとき注目している部品(以下、これを注目部品と呼ぶ)の親部品の候補(以下、これを親部品候補と呼ぶ)を取得し、対応する事故報告書16のテキスト内でその親部品候補の名称を探索することでその注目部品の親部品を推定して、その名称を不具合情報に追加する。
例えば、図2の文書IDが「00002」の例において、「端子」が注目部品の場合、不具合情報抽出プログラム12は、機器・部品階層関係辞書15を参照して、親部品候補として「バッテリ」及び「スパークプラグ」を取得し、その後、文書IDが「00002」の事故報告書16のテキスト内で親部品候補の「バッテリ」及び「スパークプラグ」という文字列を探索する。この結果、不具合情報抽出プログラム12は、かかるテキスト内で「バッテリ」という文字列を検出するため、そのときの注目部品である「端子」の親部品を「バッテリ」と推定する。なお、対応する事故報告書16のテキストを探索する際には、通常、注目部品の単語よりも前の範囲を探索するが、当該単語よりも後の範囲や、対応する事故報告書のテキスト全体を探索するようにしてもよい。
一方で、図2における文書IDが「00001」の事故報告書16の場合、「シリンダ」は「エンジン」の一部品であるが、例えば、故障診断プログラム13により実行される故障診断処理において、故障原因候補として「シリンダ」の親部品である「エンジン」を省略して「シリンダ内圧縮圧力が低下」と表示したとしてもユーザは故障原因や故障箇所を確実に特定することができる。逆に、この例で「エンジンのシリンダ」のように「エンジン」が補完されると、却って冗長だと感じられる。
これは、「端子」が様々部品の一部として存在しているため、どの部品の「端子」であるかが故障原因特定の重要な情報となるのに対して、「シリンダ」は「エンジン」にしか存在しない部品であるため、「シリンダ」という表記だけで故障原因や故障箇所を特定できることが理由である。このように不具合情報に上位部品(親部品)の名称が欠落している場合に、その上位部品の名称を不具合情報に補う必要があるか否かは、その部品の性質に依存する。
そこで本実施の形態の場合、不具合情報抽出プログラム12には、上述した親部品推定機能に基づく処理に先駆けて、まず、注目部品の親部品を推定する必要があるか否かを判断する部品曖昧性判定機能も搭載されている。部品曖昧性判定機能は、注目部品の親部品が複数存在するか否かに基づいて、注目部品に曖昧性があるか否かを判定する機能である。
この場合、不具合情報抽出プログラム12は、機器・部品階層関係辞書15を参照して、注目部品の親部品が複数存在する場合には、その注目部品に曖昧性があると判断する。例えば、図5の例の場合、部品IDが「0006」及び「0007」の行を参照すると、両方とも故障機器・部品が「端子」であり、それぞれの親部品は異なっている。このため不具合情報抽出プログラム12は、注目部品が「端子」である場合、その注目部品に曖昧性があると判断することになる。
そして不具合情報抽出プログラム12は、注目部品に曖昧性があると判断した場合にのみ、その親部品を上述の親部品推定機能により推定し、推定した親部品の名称を不具合情報テーブル14におけるその注目部品の不具合情報の故障機器・部品欄14Cに追加する。
他方、例えば図3の不具合情報テーブル14における文書IDが「00003」の事故報告書16について抽出された「エンジン/圧縮圧力が低下」という不具合情報(事例IDが「0000005」の不具合情報)は、文書IDが「00001」の事故報告書16について抽出された「シリンダ/圧縮圧力が低下」という不具合情報(事例IDが「0000002」の不具合情報)と同一の不具合事象を表す不具合情報であり、「エンジンのシリンダ」という表現から「シリンダ」という部品の名称が省略された表現となっている。
このように不具合情報では、1つの機器・部品にしか存在しない下位の機器・部品については記載が省略されていることも多い。このような場合においても、コンピュータ装置が、事象IDが「0000002」の「シリンダ/圧縮圧力が低下」という不具合と、事象IDが「0000001」の「エンジン/圧縮圧力が低下」という不具合と、事象IDが「0000007」の「エンジン,シリンダ/圧縮圧力が低下」という不具合とを同一の不具合事象として集約できるようにすることが必要である。
そこで本実施の形態の場合、不具合情報抽出プログラム12には、図3における事象IDが「0000002」の不具合と、事象IDが「0000005」の不具合と、事象IDが「0000007」の不具合とを同一の不具合事象を表す不具合情報として取り扱えるように、故障機器・部品の親子関係の系列を要約する部品系列正規化機能が搭載されている。
この部品系列正規化機能は、「シリンダ/圧縮圧力が低下」や、「エンジン/圧縮圧力が低下」及び「エンジン,シリンダ/圧縮圧力が低下」といった異なる表現ではあるものの同一の不具合事象を表す不具合情報を「エンジン/圧縮圧力が低下」のように同じ親子関係の系列内の1つの故障機器・部品の不具合事象に集約する機能である。以下においては、このように同一の不具合事象が発生した同じ親子関係の系列に属する複数の故障機器・部品の不具合情報を、当該系列内の1つの故障機器・部品の不具合事象にそれぞれ集約(修正)することを「部品系列正規化」又は「部品系列を正規化する」と呼び、このような部品系列正規化を行う処理を「部品系列正規化処理」と呼ぶものとする。
なお不具合情報抽出プログラム12は、図3における事象IDが「0000008」の不具合情報と、事象IDが「0000010」の不具合情報とのように、不具合事象が同じ「汚れ」であっても、その不具合事象が発生した故障機器・部品が異なる親子関係の系列に属する場合には、これらの不具合情報の集約(修正)は不要であると判定し、これらについては部品系列正規化処理を実行しない。
以上のような親部品推定機能、部品曖昧性判定機能及び部品系列正規化機能を含む本実施の形態の不具合情報抽出機能を実現するための手段として、不具合情報抽出プログラム12は、図1に示すように、故障機器・部品抽出サブプログラム20、不具合事象抽出サブプログラム21、機器・事象対応付けサブプログラム22及び故障機器・部品変更サブプログラム23を備えて構成されている。これら故障機器・部品抽出サブプログラム20、不具合事象抽出サブプログラム21、機器・事象対応付けサブプログラム22及び故障機器・部品変更サブプログラム23の具体的な処理内容について後述する。
(2-2)本実施の形態の不具合情報抽出機能に関する各種処理
次に、かかる本実施の形態の不具合情報抽出機能に関連して実行される各種処理の具体的な処理内容について説明する。なお、以下においては、各種処理の処理主体を「サブプログラム」として説明するが、実際には、その「サブプログラム」に基づいてCPUがその処理を実行することは言うまでもない。
(2-2-1)不具合情報抽出処理
図6は、かかる不具合情報抽出機能に関連して不具合情報抽出プログラム12の故障機器・部品抽出サブプログラム20、不具合事象抽出サブプログラム21、機器・事象対応付けサブプログラム22及び故障機器・部品変更サブプログラム23により順次実行される一連の処理(以下、これを不具合情報抽出処理と呼ぶ)の流れを示す。
この不具合情報抽出処理は、定期的又はユーザ等の指示に応じて不定期に開始される。そして、この不具合情報抽出処理が開始されると、まず、故障機器・部品抽出サブプログラム20が、事故報告書データベース10に登録されたすべての事故報告書16について、その事故報告書16のテキストから故障機器・部品の名称をすべて抽出する(S1)。
テキストからの故障機器・部品の名称の抽出は、例えば、事故報告書16のテキスト内に名称が存在する可能性のあるすべての機器・部品の名称が登録された辞書を予め準備し、この辞書と、事故報告書16のテキストとを順次文字列照合することによって行うことができる。また例えば、特開2010-092352号公報に開示されているような系列ラベリング技術を用いることによっても行うことができる。抽出した故障機器・部品の名称は、名寄せ処理により表現を統一した上で主記憶装置3(図1)に一時的に格納しておく。
続いて、不具合事象抽出サブプログラム21が、事故報告書データベース10に登録されたすべての事故報告書16について、その事故報告書16のテキストから不具合事象をすべて抽出する(S2)。テキストからの不具合事象の抽出は、ステップS1について上述したテキストからの故障機器・部品の名称の抽出と同様に行うことができる。このとき抽出された不具合事象は、名寄せ処理により表現を統一した上で主記憶装置3に一時的に格納しておく。
次いで、機器・事象対応付けサブプログラム22が、ステップS1で名称が抽出された各故障機器・部品と、ステップS2で抽出された各不具合事象とをそれぞれ対応付けて、不具合情報として不具合情報テーブル14に登録する(S3)。
ただし、事故報告書16中に出現する機器・部品のすべてが故障機器・部品であるとは限らない。例えば、「部品Aを調査したが異常がなかったため」といった記載もあり得る。このため機器・事象対応付けサブプログラム22は、故障機器・部品と不具合事象とを対応付けることによって、故障機器・部品及び不具合事象のペアを生成する。このときの対応付けは、単純に距離が近いペアを対応付けるといった方法を適用することができる。この場合、部品が前に出現することが多いため、出現順序を利用しても良い。また構文解析技術、係り受け解析技術を利用してもよい。
そして機器・事象対応付けサブプログラム22は、このような処理により生成した故障機器・部品の名称及び不具合事象のペアについて、その故障機器・部品の名称を図3の故障機器・部品欄14C、不具合事象を不具合事象欄14D、その事象に付与した事象IDを事象ID欄14B、その故障機器・部品の名称及びその不具合事象を抽出した事故報告書16の文書IDを文書ID欄14Aにそれぞれ格納するようにして、そのペアを不具合情報として不具合情報テーブル14に登録する。
この後、故障機器・部品変更サブプログラム23が、不具合情報テーブル14に登録されている各不具合情報の修正を必要に応じて行う故障機器・部品情報変更処理を実行する(S4)。具体的に、故障機器・部品変更サブプログラム23は、事故報告書データベース10に格納されている対応する事故報告書16と、機器・部品階層関係辞書15とを参照して、情報が不足している不具合情報については不足している情報を追加し、複数の不具合情報間で同一の不具合事象に対する表記・表現に揺れがある場合には上述の部品系列正規化処理を実行する。
そしてステップS4の処理が完了すると、この不具合情報抽出処理が終了する。
(2-2-2)故障機器・部品情報変更処理
図7は、図6について上述した不具合情報抽出処理のステップS4において故障機器・部品変更サブプログラム23により実行される一連の処理(以下、これを故障機器・部品情報変更処理と呼ぶ)の流れを示す。
故障機器・部品変更サブプログラム23は、不具合情報抽出処理がステップS4に進むとこの図7に示す故障機器・部品情報変更処理を開始し、まず、不具合情報テーブル14に登録されたすべての不具合情報についてステップS11以降の処理を実行し終えたか否かを判定する(S10)。
そして故障機器・部品変更サブプログラム23は、ステップS10の判定で否定結果を得ると、不具合情報テーブル14に登録されている不具合情報の中から1つの不具合情報(不具合情報テーブル14の1行分の情報)を読み出すことにより取得する(S11)。
続いて、故障機器・部品変更サブプログラム23は、ステップS11で取得した不具合情報から故障機器・部品の名称を取得し、その故障機器・部品を注目部品に設定する(S12)。
次いで、故障機器・部品変更サブプログラム23は、そのときの注目部品に曖昧性があるか否かを判断する(S13)。上述のように機器・部品の曖昧性の判断は、機器・部品階層関係辞書15(図5)を参照して、注目部品の親部品が複数存在するか否かを確認することにより行う。例えば、注目部品が「端子」である場合には、「スパークプラグ」及び「バッテリ」という2種類の親部品が存在するため、曖昧性があると判断する。
なお、以上の説明では、データや処理結果が理想的な場合を例に、親部品の種類が2種類以上であれば曖昧性があるとしたが、実際上は、図7のステップS1において故障機器・部品の名称を完全に名寄せすることは難しい。また機器・部品階層関係辞書15が自動作成されたものである場合、作成された機器・部品階層関係辞書15に誤りが含まれる可能性もある。このような状況を考慮した場合、予め2より大きい数値の閾値を設定しておき、注目部品の親部品の数がその閾値を超えた場合に、故障機器・部品変更サブプログラム23がその注目部品に曖昧性があると判断するようにしてもよい。
また注目部品の曖昧性を完全に親部品の種類数に依存するのではなく、注目部品の親部品として機器・部品階層関係辞書15から抽出された機器・部品同士の類似性を考慮して、注目部品の曖昧性を判断するようにしてもよい。例えば、図5の例では、「原動機」が「エンジン」に名寄せされることを想定しているが、名寄せに失敗して「ピストン」の親部品として「エンジン」及び「原動機」の2種類の部品が機器・部品階層関係辞書15から抽出される場合もあり得る。このような場合、例えば、特開2012-18570号公報に開示されているような技術を用いて「エンジン」という単語と、「原動機」という単語の類似度をスコアとして算出し、算出したスコアに基づいてこれら「エンジン」及び「原動機」が同じものを指しているか否かを判定し、その判定結果に基づいて注目部品の曖昧性を判断するようにすればよい。
故障機器・部品変更サブプログラム23は、ステップS13の判断で否定結果を得た場合にはステップS10に戻る。これに対して故障機器・部品変更サブプログラム23は、ステップS13の判断で肯定結果を得た場合には、注目部品の親部品を推定する(S14)。具体的に、故障機器・部品変更サブプログラム23は、注目部品の上述した親部品候補を機器・部品階層関係辞書15から取得し、対応する事故報告書16のテキスト内でその親部品候補の名称を探索し、この名称を検出できたときにはその親部品候補を注目部品の親部品を推定する。
例えば、図3の事象IDが「0000004」の不具合情報を処理している場合、「端子」の親部品候補として「スパークプラグ」及び「バッテリ」の2種類が親部品候補として抽出され、これらの名称を図2における文書IDが「00002」の事故報告書16のテキスト内で探索した場合に「バッテリ」が検出されるため、この「バッテリ」が注目部品(ここでは「端子」)の親部品と推定されることになる。
そして故障機器・部品変更サブプログラム23は、上述のようにして推定した親部品の名称を不具合情報テーブル14における対応する故障機器・部品欄14C(図3)に追記する。例えば、上述の例の場合、故障機器・部品変更サブプログラム23は、図3における事象IDが「0000004」の故障機器・部品欄14Cを「端子」から図8のように「バッテリ,端子」に書き換える。
この後、故障機器・部品変更サブプログラム23は、ステップS10に戻る。そして故障機器・部品変更サブプログラム23は、さらにこの後、ステップS11で選択する不具合情報を未処理の他の不具合情報に順次切り替えながら、ステップS10において肯定結果を得るまでステップS11以降の処理を上述と同様に繰り返す。
そして故障機器・部品変更サブプログラム23は、やがて不具合情報テーブル14に登録されたすべての不具合情報についてステップS11~ステップS14の処理を実行し終えることによりステップS10で肯定結果を得ると、不具合情報テーブル14に登録されているすべての不具合情報を、不具合事象ごとにグルーピングする(S15)。このグルーピングにより、例えば図8の例では、不具合情報テーブル14に登録されている不具合情報が、不具合事象がそれぞれ「オイル交換忘れ」、「圧縮圧力が低下」、「経年劣化」、「腐食」、「汚れ」又は「振動」である6つのグループ(以下、これらを不具合情報グループと呼ぶ)に分けられることになる。
続いて、故障機器・部品変更サブプログラム23は、ステップS15で生成したすべての不具合情報グループに対して、ステップS18の部品系列正規化処理を実行し終えたか否かを判断する(S16)。
そして故障機器・部品変更サブプログラム23は、この判断で否定結果を得ると、不具合情報グループのうち、ステップS18の処理を未処理の不具合情報グループを1つ選択し(S17)、選択した不具合情報グループに対して上述した部品系列正規化処理を実行する(S18)。
さらに故障機器・部品変更サブプログラム23は、ステップS16に戻り、この後、ステップS17で選択する不具合情報グループをステップS18の部品系列正規化処理が未処理の他の不具合情報グループに順次切り替えながら、ステップS16~ステップS18の処理を繰り返す。
そして故障機器・部品変更サブプログラム23は、やがてステップS15で生成したすべての不具合情報グループについてステップS18の処理を実行し終えることによりステップS16で肯定結果を得ると、この故障機器・部品情報変更処理を終了して不具合情報抽出処理(図6)のステップS4に戻る。
(2-2-3)部品系列正規化処理
図9は、図7について上述した故障機器・部品情報変更処理のステップS18において故障機器・部品変更サブプログラム23により実行される部品系列正規化処理の具体的な処理内容を示す。故障機器・部品変更サブプログラム23は、この図9に示す処理手順に従って、同一の不具合が発生した同じ親子関係の系列に属する複数の故障機器・部品の不具合情報を、当該系列内の1つの故障機器・部品の不具合事象にそれぞれ集約(修正)する部品系列正規化処理を実行する。
実際上、故障機器・部品変更サブプログラム23は、故障機器・部品情報変更処理(図7)のステップS18に進むと、この図9に示す部品系列正規化処理を開始し、まず、初期状態の図10に示すような正規化処理テーブル24を生成する(S20)。
この正規化処理テーブル24は、この部品系列正規化処理を実行する際に利用するテーブルであり、図10に示すように、部品ID欄24A、故障機器・部品欄24B、不具合フラグ欄24C、葉ノードフラグ欄24D及び分岐数欄24Eを備えて構成される。
そして故障機器・部品欄24Bには、機器・部品階層関係辞書15(図5)に掲載されているすべての機器・部品の名称が格納され、部品ID欄24Aには、その機器・部品の部品IDが格納される。また不具合フラグ欄24Cには、後述する不具合フラグが格納され、葉ノードフラグ欄24Dには、後述する葉ノードフラグが格納される。これら不具合フラグ及び葉ノードフラグは、初期時には「0」に設定される。さらに分岐数欄24Eには、対応する機器・部品について算出された後述の分岐数が格納される。各機器・部品の分岐数も、初期時には「0」に設定される。
続いて、故障機器・部品変更サブプログラム23は、そのとき対象としている不具合情報グループの各不具合情報について、正規化処理テーブル14の各行のうちのその不具合情報に対応する行(その不具合情報の故障機器・部品の名称が故障機器・部品欄14Cに格納された行)の不具合フラグ欄24Cに格納されている不具合フラグをオンに設定(不具合フラグの値を「1」に設定)する(S21)。
例えば、図8の例において、不具合事象が「圧縮圧力が低下」である不具合情報グループを対象としている場合(以下、この例を「例1」と呼ぶ)、その不具合情報グループに属する事象IDが「0000002」の不具合情報、事象IDが「0000005」の不具合情報及び事象IDが「0000007」の不具合情報にそれぞれ対応する機器・部品の不具合フラグがオンに設定される。
また図8の例において、不具合事象が「汚れ」である不具合情報グループを対象としている場合(以下、この例を「例2」と呼ぶ)、その不具合情報グループに属する事象IDが「0000008」の不具合情報及び事象IDが「0000010」の不具合情報にそれぞれ対応する機器・部品の不具合フラグがオンに設定される。
次いで、故障機器・部品変更サブプログラム23は、機器・部品階層関係辞書15(図5)を参照して、図4のツリー構造で葉ノードとなるすべての機器・部品を抽出し、正規化処理テーブル24におけるこれらの機器・部品にそれぞれ対応する行の葉ノードフラグ欄24Dに格納されている葉ノードフラグをオンに設定(葉ノードフラグを「1」に設定)する(S22)。ここで、「葉ノード」とは、ツリー構造において子ノードを持たないノードを指す。図4の例では、「シリンダ」、「ピストン」、「端子」及び「電解液」が葉ノードであるため、正規化処理テーブル24におけるこれらの機器・部品に対応する葉ノードフラグがそれぞれ「1」に設定される。
この後、故障機器・部品変更サブプログラム23は、各機器・部品の分岐数をそれぞれ決定し、決定した分岐数を正規化処理テーブル24における対応する分岐数欄24Eにそれぞれ格納する後述の分岐数決定処理を実行する(S23)。
さらに故障機器・部品変更サブプログラム23は、ステップS23で決定した各機器・部品の分岐数に従って、そのとき対象としている不具合情報グループに属する各不具合情報の故障機器・部品を正規化(部品系列正規化)する(S24)。
具体的に、故障機器・部品変更サブプログラム23は、そのとき対象としている不具合情報グループ内の任意の2個の不具合情報にそれぞれ含まれる故障機器・部品を取得し、図4のツリー構造の中からこれらの故障機器・部品を含む最小の部分木を抽出する。そして故障機器・部品情報変更サブプログラム23は、このようにして抽出した部分木の最も上位階層の故障機器・部品であるルートノードの分岐数(そのルートノードの分岐数)が1であれば、これらの故障機器・部品を正規化の対象とし、かかる2個の不具合情報における故障機器・部品をその部分木上で最もルールノードに近いノードに修正する。また故障機器・部品変更サブプログラム23は、かかる部分木のルートノードの分岐数が2以上であれば、これらの故障機器・部品を正規化の対象外とし、かかる2個の不具合情報における故障機器・部品の修正を行わない。
そして故障機器・部品変更サブプログラム23は、このステップS24の処理を終了すると、この部品系列正規化処理を終了して故障機器・部品情報変更処理(図7)のステップS18に戻る。
なお部品系列正規化処理(図9)のステップS23において故障機器・部品変更サブプログラム23により実行される分岐数決定処理の具体的な処理内容を図11に示す。
故障機器・部品変更サブプログラム23は、部品系列正規化処理のステップS23に進むと、この図11に示す分岐数決定処理を開始し、まず、機器・部品階層関係辞書15(図5)を参照して、当該機器・部品階層関係辞書15に基づくツリー構造(図4)のルートノードを注目ノードに設定し、その注目ノードが葉ノードであるか否かを判断する(S30)。例えば、図4及び図5の例では、「自動車」がこのときの注目ノードに設定される。
そして故障機器・部品変更サブプログラム23は、この判断で否定結果を得ると、その注目ノードのすべての子ノードについて、この分岐数決定処理を再帰呼出しする(その子ノードを注目ノードとしてこの分岐数決定処理をそれぞれ実行する)ことにより、これら子ノードの分岐数をそれぞれ算出する(S31)。
続いて、故障機器・部品変更サブプログラム23は、ステップS31の算出結果に基づいて、そのときの注目ノードの分岐数を算出する(S32)。具体的に、故障機器・部品変更サブプログラム23は、ステップS31で取得した各子ノードの分岐数の合計を算出し、算出した合計値が0よりも大きい場合には、その合計値をその注目ノードの分岐数とする。また故障機器・部品変更サブプログラム23は、算出した合計値が「0」の場合には、正規化処理テーブル24(図10)におけるその注目ノードの不具合フラグの値を取得し、その値が「1」のときにはその注目ノードの分岐数を「1」とし、その値が「0」のときにはその注目ノードの分岐数と「0」とする。そして故障機器・部品変更サブプログラム23は、この後、そのときの注目ノードに対するこの分岐数決定処理を終了して呼出し元の処理に戻る。
これに対して、故障機器・部品変更サブプログラム23は、ステップS30の判断で肯定結果を得ると、正規化処理テーブル24からそのときの注目ノードの不具合フラグを取得し、取得した不具合フラグの値に応じてその注目ノードの分岐数を決定する(S33)。具体的に、故障機器・部品変更サブプログラム23は、そのとき取得した注目ノードの不具合フラグの値が「1」のときには注目ノードの分岐数を「1」とし、その不具合フラグの値が「0」のときは注目ノードの分岐数を「0」とする。そして故障機器・部品変更サブプログラム23は、この後、そのときの注目ノードに対するこの分岐数決定処理を終了して呼出し元の処理に戻る。
以上のような図9及び図11の処理によって、上述した「例1」及び「例2」は以下のように処理される。
まず「例1」の場合、図9のステップS21及びステップS22により正規化処理テーブル24が図12(A)のように更新され、その後、図11のステップS30において最初に「自動車」が注目ノードに設定される。そして「自動車」は葉ノードではないため、図11のステップS31において「自動車」の子ノードである「エンジン」及び「バッテリ」に対して分岐数決定処理の再帰呼出しが行われる(図4参照)。
この場合、「エンジン」も葉ノードではないため、「エンジン」の子ノードである「シリンダ」、「ピストン」及び「スパークプラグ」に対してさらに分岐数決定処理の再帰呼出しが行われる(図4参照)。そして「シリンダ」は葉ノードであるため、図12(A)の正規化処理テーブル24における「シリンダ」の不具合フラグの値がオンに設定されているか否かを確認する。「例1」では、「シリンダ」の不具合フラグはオフ(不具合フラグの値が「0」)であるため、「シリンダ」の分岐数は「1」となる。同様にして、「ピストン」及び「スパークプラグ」の分岐数はいずれも「0」として算出される。この結果、「エンジン」の分岐数は「1」として算出される。
そして図4のツリー構造において、「エンジン」、「シリンダ」及び「エンジンのシリンダ」を含む最小の部分木のルートノードは「エンジン」であり、「エンジン」の分岐数が「1」であるため、「エンジン」、「シリンダ」及び「エンジンのシリンダ」は正規化の対象となり、最も上位の「エンジン」に集約される。そして、この集約に応じて、図8の不具合情報テーブル14が図13のように更新される。この図13に示すように、「例1」の場合は、事象IDがそれぞれ「0000002」、「0000005」及び「0000007」の不具合情報については、故障機器・部品が「エンジン」に集約されて、これらを故障診断の際に同じ不具合事象としてカウントできる状態となっている。なお、例では「エンジン」に集約したが、「エンジン」、「シリンダ」及び「エンジンのシリンダ」の出現頻度を比較し、最も頻度が高い、すなわち良く使用される表現に統一しても良い。
また「例2」の場合、図9のステップS21及びステップS22により正規化処理テーブル24が図12(B)のように更新され、その後、図11のステップS20において最初に「自動車」が注目ノードに設定される。この後、「例1」と同様の処理が行われるが、この「例2」の場合には葉ノードである「シリンダ」の不具合フラグがオンに設定されていないため、「シリンダ」の分岐数が「0」として算出される。同様に「ピストン」の分岐数は「1」に設定される。また「スパークプラグ」は葉ノードではないため、さらに「端子」について分岐数決定処理の再帰呼出しが行われる(図4参照)。このとき「端子」は葉ノードであり、その不具合フラグのオフであるため、「端子」の分岐数は「0」として算出される。また「スパークフラグ」は、子ノードの分岐数の合計が「0」であり、対応する不具合フラグがオフであるため、分岐数が「1」として算出される。また「エンジン」の分岐数は「2」として算出される。
そして図4のツリー構造において、「ピストン」及び「スパークプラグ」を含む最小の部分木のルートノードは「エンジン」であり、「エンジン」の分岐数は「2」であるため、「ピストン」及び「スパークプラグ」は正規化の対象とならず、これら「ピストン」及び「スパークプラグ」は集約されない。このため「例2」の場合には、事象IDが「0000008」及び「0000010」の不具合情報が更新されず、図8のままとなる。
(3)故障診断処理
次に、故障診断プログラム13(図1)により実行される故障診断処理について説明する。故障診断プログラム13は、入出力装置4(図1)を介したユーザからの所定の操作入力に応じて図14に示すような検索画面30を入出力装置4に表示する。
この検索画面30は、そのとき発生している不具合事象の原因候補を検索するための画面であり、発生事象入力欄31、診断ボタン32及び原因候補提示領域33を備えて構成される。そして、ユーザは、検索画面30を用いて不具合事象の原因候補を検索する場合、入出力装置4を用いて「エンジンに振動がある」などのように故障機器・部品及びその不具合事象を自然文形式で発生事象入力欄31に入力し、その後、診断ボタン32をクリックする。
故障診断プログラム13は、かかる診断ボタン32がクリックされると、発生事象入力欄31に入力された自然文に対して形態素解析などを含む既存の自然言語解析処理を施すことにより、そのとき発生している不具合事象や、故障機器・部品の名称を抽出する。図14の例では、不具合事象として「振動」、故障機器・部品の名称として「エンジン」が抽出される。
そして故障診断プログラム13は、抽出したこれら不具合事象や故障機器・部品の名称をキーワードとして、これらキーワードを含む事故報告書16を事故報告書データベース10(図1)上で検索する。図2の例の場合、かかる事故報告書16として、文書IDが「00005」の事故報告書16と、文書IDが「00006」の事故報告書16とが少なくともヒットする。
また故障診断プログラム13は、このときヒットした事故報告書16の不具合情報を不具合情報テーブル14(図3)から取得する。例えば、図3の例の場合、少なくとも事象IDがそれぞれ「0000008」~「0000011」である4つの不具合情報が取得される。
続いて、故障診断プログラム13は、取得したこれらの不具合情報の中から発生事象入力欄31に入力された不具合事象と同じ不具合事象の不具合情報を除去する。従って、図3及び図14の例では、図3の少なくとも事象IDがそれぞれ「0000009」及び「0000011」である2つの不具合情報が除去され、少なくとも事象IDがそれぞれ「0000008」及び「0000010」である2つの不具合情報が残る。
さらに故障診断プログラム13は、残った不具合情報について、機器・部品及び不具合事象が同じ不具合情報の件数を機器・部品及び不具合事象の組合せごとにそれぞれ集計し、件数が多い機器・部品及び不具合事象の組合せの順番で、予め定められた数だけ、対応する機器・部品及び不具合事象の組合せに応じたメッセージを原因候補として原因候補提示領域33に表示する。また故障診断プログラム13は、原因候補提示領域33に表示した原因候補ごとに、それぞれ不具合情報テーブル14に登録されている機器・部品及び不具合事象の組合せが同じ不具合情報の件数(過去に発生した同じ内容の不具合の回数に相当)を、その組合せに対応させて原因候補提示領域33にそれぞれ表示する。
上述の例では、機器・部品及び不具合事象の組合せとして、少なくとも「ピストン」及び「汚れ」の組合せに対応する「ピストンの汚れを確認して下さい」というメッセージ(原因候補)及び過去に発生した同じ内容の不具合の回数と、「スパークプラグ」及び「汚れ」の組合せに対応する「スパークプラグの汚れを確認して下さい」というメッセージ及び過去に発生した同じ内容の不具合の回数とが原因候補提示領域33に表示される。
(4)本実施の形態の効果
以上のように本実施の形態の故障診断装置1では、事故報告書データベース10に蓄積された各事故報告書16からそれぞれ不具合情報を取得し、取得した不具合情報のうちの故障機器・部品の親部品の情報が不足している不具合情報に対しては、当該親部品を推定してその親部品の名称をその不具合情報に追加する。従って、本故障診断装置1によれば、不具合情報に不足した情報を補完することができ、かくして事故報告書データベース10に蓄積された各事故報告書16から必要十分な不具合情報をそれぞれ抽出することができる。
また本実施の形態の故障診断装置1は、このような故障機器・部品の親部品を推定してその名称を追加する処理を実行するか否かを、不具合情報ごとに、その故障機器・部品の曖昧性に基づいて判断するため、冗長な情報(親部品の名称)が不具合情報に追加されるのを未然に防止することができる。
さらに本実施の形態の故障診断装置1は、同一の不具合事象が発生した同じ親子関係の系列に属する複数の故障機器・部品の不具合情報を、同一の表現からなる故障機器・部品の不具合事象にそれぞれ修正するため、故障診断時における不具合情報の集約を精度良く行うことができる。
従って、本実施の形態の故障診断装置1によれば、各事故報告書16からそれぞれ抽出される不具合情報のうち、同一の故障機器・部品の同一の不具合事象の表記・表現を集約することができ、故障診断時における集約処理において同一の不具合事象の不具合情報が異なる不具合事象の不具合情報として取り扱われることを未然に防止することができる。また本故障診断装置1によれば、かかる故障診断結果として提示される原因候補の内容に情報(故障機器・部品の親部品の情報)の過不足が発生することを防止することができる。よって、本実施の形態によれば、故障診断性能の低下を抑制しながら、適切な診断結果を提示し得る使い勝手の良い高性能の故障診断装置を実現することができる。
(5)他の実施の形態
なお上述の実施の形態においては、不具合情報抽出プログラム12及び故障診断プログラム13を同じ1つのコンピュータ装置に実装するようにした場合について述べたが、本発明はこれに限らず、不具合情報抽出プログラム12と、故障診断プログラム13とをそれぞれ別個のコンピュータ装置に実装して本実施の形態の故障診断装置1を2つのコンピュータ装置から構築されるシステムとして構成するようにしてもよい。
また上述の実施の形態においては、過去の不具合の事例が記載されたテキストから不具合事象を抽出する不具合事象抽出部と、当該不具合事象が発生した故障機器・部品をテキストから抽出する故障機器・部品抽出部と、故障機器・部品抽出部により抽出された故障機器・部品、及び、不具合事象抽出部により抽出された不具合事象を対応付ける機器・事象対応付け部と、故障機器・部品抽出部により抽出された故障機器・部品について、テキスト内で記載が省略されている当該故障機器・部品の親部品を推定し、推定した当該親部品の情報を不具合情報に追加するようにして不具合情報を補完する故障機器・部品変更部とをすべてソフトウェア構成とするようにした場合について述べたが、本発明はこれに限らず、これら不具合事象抽出部、故障機器・部品抽出部、機器・事象対応付け部及び故障機器・部品変更部の一部又は全部をハードウェア構成とするようにしてもよい。