JPH0793372A - 自然言語処理システムおよびbツリー作成方法 - Google Patents

自然言語処理システムおよびbツリー作成方法

Info

Publication number
JPH0793372A
JPH0793372A JP6055345A JP5534594A JPH0793372A JP H0793372 A JPH0793372 A JP H0793372A JP 6055345 A JP6055345 A JP 6055345A JP 5534594 A JP5534594 A JP 5534594A JP H0793372 A JPH0793372 A JP H0793372A
Authority
JP
Japan
Prior art keywords
tree
node
word
nodes
natural language
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6055345A
Other languages
English (en)
Inventor
Sherman Richard
リチャード・シャーマン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0793372A publication Critical patent/JPH0793372A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/216Parsing using statistical methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/237Lexical tools
    • G06F40/242Dictionaries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/237Lexical tools
    • G06F40/247Thesauruses; Synonyms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking

Abstract

(57)【要約】 【目的】ハッシングとBツリーのどちらの標準手法で
も、記憶スペースをそれほど非効率的に使用することな
く、計算機に記憶された自然言語に十分な速度でアクセ
スすること。 【構成】Bツリー21を使用して、自然言語データを、
たとえば音声認識システムまたは音声合成システムの一
部として記憶する。Bツリーは階層として配列され、各
ノードはその下のレベルの2つのノードを指示する。各
ノードはテスト値(単語)と、そのテスト値に関係する
データ(またはデータが維持されている記憶位置への参
照)を含む。データには、ツリーの最上位から開始し、
所望の単語をそのノード用のテスト値と比較することに
よってアクセスする。所望の単語とテスト値の相対アル
ファベット順に応じて、そのノードからの適切なブラン
チをたどる。所望の単語に対応するテスト値が見つかる
まで、ツリーを下降してこのプロセスを続ける。Bツリ
ーは、ツリーを下降するにつれて、自然言語におけるテ
スト値の発生頻度がほぼ単調に減少するように配列され
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、Bツリー構造を含む自
然言語処理システムに関する。
【0002】
【従来の技術】自動処理のために何らかの形式の単語辞
書を記憶しなければならないアプリケーションが多数あ
る。たとえば、音声応答システムでは、各単語をディジ
タル録音したものをその単語の項目とすることができ
る。したがって、このシステムを使用してテキストの一
節を音声化する場合、テキスト中で各単語が出てくるた
びに辞書が参照され、正しい発音が取り出される。
【0003】自動音声認識システムでもこれに相当する
状況が発生する。そのようなシステムの第1段で、入力
音声が単語に変換される。しかし、十分明確に発音され
ていないか、あるいは同音異義語に近い語または完全な
同音異義語が存在する(たとえば"too"と"two"、"guess
ed"と"guest")ために、単語を正確に識別できない場合
が多い。そのような状況では、辞書に保持された追加の
情報を使用する必要がある。たとえば、先行する単語ま
たは何らかの文法モデルに基づいて、候補の単語または
その文脈の相対頻度をテストする。したがって、この例
では、各辞書項目は、他の単語と比較したその単語の頻
度に関する情報を保持することができ、おそらく、通常
のテキストでその項目に通常先行する種類の単語に関す
る情報も保持することができる。たとえば、スペル・チ
ェッカや自動翻訳システムなどで、そのような辞書がや
はり重要となるアプリケーションが他にも多数存在す
る。
【0004】自然言語(すなわち、通常の意思疎通に使
用される言語)では、単語の数はゆうに数10万語に及
ぶ("walk"、"walks"、"walked"、"walking"などの語は
すべて個別の項目が必要である)。このため、計算機に
辞書をどのように記憶するかという技術的問題が発生す
る。前述のアプリケーションの多くは実時間で動作する
必要があるので、特に、個々の辞書項目へのアクセス時
間を最短にする必要がある。
【0005】データベース記憶に関してはかなりの数の
文献がある。たとえば、C.J.デート(Date)著"An
Introduction to Database Systems: Vol 1"、Addison
Wesley、1990年(第5版)、H.F.コルト(Kort
h)およびA.ジルバーシャルツ(Silberschartz)著"D
atabase System Concepts"、McGraw-Hill、1991年
(第2版)、N.ワース(Wirth)著"Algorithms + Dat
a Structures = Programs"、Prentice Hall、1976
年が挙げられる。最も一般的に使用されている2つのア
クセス方式は、(i)ハッシング技術および(ii)Bツ
リーである。ハッシングでは、レコード(本明細書で
は、レコードは辞書中の項目に対応する)の記憶位置
が、あるキー値の代数的または算術的マッピングによっ
て決定される。この手法は、キー値が仮想キー・スペー
ス中に均等に分布しているときに最も効果的である。た
とえば、従業員番号に基づいて記憶されている1組の従
業員レコードを考えてみる。最大割当て従業員番号まで
の未使用従業員番号が比較的少ない場合、従業員番号を
ハッシュすることによって決定されるメモリ位置に各従
業員レコードを記憶するのが簡単である。そうすれば、
データへのアクセスは極めて高速になる。これは、所与
の従業員番号について、対応する従業員レコードの記憶
位置が、使用しているハッシング技術に基づいてただち
に決定され、それに従ってデータがアクセスされるから
である。
【0006】しかし、ハッシング法は、可能な単語の利
用可能なスペース内での単語の分布が非常に密集するの
で、言語辞書に適用するのは困難である。たとえば、
(英語では)文字"x"で始まる単語よりも文字"s"で始
まる単語の方がはるかに多いが、標準のハッシング手法
では、両方の頭文字に同数のメモリ位置が割り当てられ
る可能性がある。このため、空メモリ位置または潜在的
衝突あるいはその両方が発生し、記憶スペースの使用が
非常に非効率的になることは明らかである。そのような
状況でハッシング手法を改善する技術が幾つかあるが、
修正は複雑であり、柔軟性をかなり犠牲にしないかぎり
記憶スペースは節約されない。
【0007】第2の手法は、階層データ構造(「ツリ
ー」)であるBツリーを使用するものである。階層の最
上位は「ルート・ノード」であり、第1のテスト値を含
む。所望の識別子がテスト値より(たとえば数値で)上
にある場合は、階層の第1ブランチをたどるが、所望の
識別子がテスト値よりも下にある場合は、第2のブラン
チをたどる。これら2つのブランチは、階層内の1つ下
レベルの1対のノードに至る。これらのノードはやはり
それぞれテスト値を含む。このレベルでは各ノードから
1対のブランチが下に延び、したがってツリー全体は4
つのブランチに分かれる。このプロセスはさらに、階層
の最下位まで続く。Bツリーのノードを使用して情報自
体を記憶し、またはそのノードに関連データベースへの
ポインタを含め(この場合、Bツリーはインデックスと
して効果的に機能する)、あるいはその両方を行うこと
ができる。階層の最下層(「リーフ・ノード」)だけに
そのような情報またはポインタを含むBツリーもある
が、各ノードに特定のテスト値に適した情報またはポイ
ンタを記憶しているBツリーもある。
【0008】図1に、自然言語辞書に関連するBツリー
1の例を示す。ツリーの最上位にあるルート・ノード2
は"MERINGUE"である。見つけようとする単語が、アルフ
ァベットで"MERINGUE"の前にある場合は、ノード4("E
NTITY")へのブランチをたどり、"MERINGUE"の前にない
場合は、ノード6("SESSIONS")へのブランチをたど
る。見つけようとする単語が実際には"MERINGUE"自体で
ある場合、ノード2は必要な辞書項目、または該項目が
記憶されている場所を指すポインタを含み、それ以上階
層にアクセスする必要はない。したがって、各ノード
は、そのノードが含むテスト値の情報またはポインタ
(あるいはその両方)を記憶する。図1では階層の多数
の中間層を省略してあるが、1つのブランチについて階
層の下位の2つの層を示してある。ノード14および1
6(それぞれ"FORMATIVE"および"FORMATIVENESS")は、
ツリーの最下位にあり、それより下にはブランチはな
い。
【0009】Bツリーの重要な特性は、平衡をとる必要
があることである(実際に、「Bツリー」は「平衡ツリ
ー(balanced tree)」の省略形とみなされることが多
い)。すなわち、階層内の各ノードについて、2つの従
属ブランチはほぼ等しい数の下位レベル・ノードを表
す。したがって、図1では、ノード2の"MERINGUE"の前
に辞書項目の半分が存在し、この単語の後に残りの半分
が存在する。同様に、"ENTITY"および"SESSIONS"はそれ
ぞれ、辞書の4分の1の点および4分の3の点を表す。
これによって、ツリーは、ルート・ノードから階層の最
下位にあるノードまでの距離の点で一様な深さを有し、
Bツリー内で任意の単語を見つけるために行う必要があ
る比較の平均数を減らすのに役立つ。ツリーにノードを
追加し、ツリーからノード削除する際にBツリーを平衡
状態に維持するために利用可能な標準アルゴリズムがあ
る(前記文献を参照)。
【0010】前述のBツリーは、各ノードが2つのブラ
ンチの間の選択肢を表す単一のテスト値を含むので2進
式であるが、他の形式のBツリーも可能である。たとえ
ば、3進Bツリーでは、各ノードが、(階層の次のレベ
ルで3つの異なるノードに至る)3つの可能なブランチ
の間の選択肢を表す2つのテスト値を含む。そのような
3進Bツリーでも、所与のノードからの各ブランチが、
同数の下位レベル・ノードを表すようにすることによっ
て平衡が保たれる。より高いベースに移行すると、Bツ
リーの深さが減少し、各ノードにおける処理要件が増大
する。
【0011】しかし、従来のBツリーを使用して自然言
語辞書にアクセスする際には、Bツリー内の異なる単語
のアクセス頻度が大きく変化するので問題が生じる。頻
繁にアクセスする必要がある"THE"などの非常に一般的
な単語は、おそらく全単語リスト内のその位置に応じて
階層の最下位に配置することができる。これに対し、め
ったに使用されない単語(たとえば、図1の"MERINGU
E")は、階層の上位にあれば迅速にアクセスされる。
【0012】他の形式のBツリーを使用して自然言語テ
キストの一節中の単語の頻度を数える方法は、カーニガ
ン(Kernighan)およびリッチー(Ritchie)著"The C P
rogramming Language"、Prentice Hall、1988年
(第2版)、pp.139−140に記載されている。
この例では、Bツリー構造が、テキスト中で単語に出会
う順序によって決定される。この著者等が認識している
ように、そのような単純な方法では、ツリーの平衡が大
きく崩れる恐れがある。提案されているアルゴリズム
は、大部分のテキストには適していない。
【0013】
【発明が解決しようとする課題】したがって、本発明の
目的は、ハッシングとBツリーのどちらの標準手法で
も、記憶スペースをそれほど非効率的に使用せずには、
計算機に記憶された自然言語に十分な速度でアクセスす
ることはできないので、技術的な問題があり、これを解
決することにある。
【0014】
【課題を解決するための手段】本発明は、各ノードが少
なくとも1つのテスト語を含み、テスト語に関連するデ
ータを記憶または参照し、かつ(階層の最下位のものを
除く)各ノードが、階層の1つ下のレベルにある複数の
ノードを参照する、ノードの階層から形成されたBツリ
ーを含み、Bツリーのブランチを下降する際に、ノード
内のテスト語の自然言語における発生頻度がほぼ単調に
減少するように、ノードが配列されることを特徴とす
る、自然言語処理システムを提供する。
【0015】そのようなBツリーは、従来の平衡ツリー
よりも平均アクセス時間がはるかに短いことが分かっ
た。これは、"the"などの極めて一般的な単語が、ツリ
ーの最上位に配置され、したがって非常に迅速にアクセ
スできるからである。従来の平衡ツリーに比べて、ツリ
ー中のレベルの数は一部のブランチでは増加するが、こ
れらのブランチの最下位にある単語は非常にまれにしか
発生しないので、それらが平均アクセス時間に与える影
響は比較的小さい。
【0016】好ましい実施例では、Bツリーは2進構造
をもち、各ノードが単一のテスト値を含む。2進Bツリ
ーは最大数の層をもつので、複数の層にアクセスする必
要性を減らす見込みが最も大きい。それにもかかわら
ず、同じ原則をより高いベースに使用できないという理
由はない。たとえば、ルート・ノードが2つの最も一般
的な単語を含み、3つのブランチが階層の次の層へと下
降する、3進Bツリーを生成することができる。
【0017】また、第1のノードが、階層の1つ下のレ
ベルにある第2のノードを参照する、自然言語での発生
頻度がほぼ等しい第1のノードと第2のノードの対で
は、第1のノードと第2のノードの相対位置をツリーの
平衡化が最適になるように配列することが好ましい。そ
のような従来のBツリー平衡化は、頻度順を崩さない場
合にかぎり使用される。
【0018】そのようなアプリケーションでは、ノード
中の各テスト語が二次Bツリーを参照し、二次Bツリー
も頻度順に並べると共に、前記テスト語を含むバイグラ
ムの自然言語における発生頻度に関する情報を記憶する
と好都合である。そのようなアプリケーションの典型的
な例は、音声認識である。音声認識では、バイグラムの
相対頻度を使用して、異なる個々の単語のそれぞれの確
率を区別することができる。一次ツリーと二次ツリーを
使用する方法は、非常に大規模な二次元マトリクス配列
にこの情報を記憶するよりも、スペースの点でははるか
に効率的である。さらに、二次Bツリーも頻度順に並べ
られるので、高速アクセスの利益が得られる。システム
は、二次Bツリー中の各ノードがさらに別のBツリーを
参照する場合、トリグラムや、さらに上位の組合せさえ
も含むように容易に拡張することができる(実際、音声
認識では、トリグラム・ベースのシステムが最適である
ことが立証されている)。
【0019】二次Bツリーを含むシステムでは、二次B
ツリーが、各テスト語を、同じテスト語を含む一次Bツ
リー中のノードへの参照の形で記憶することが好まし
い。これによって、長い単語を2回記憶する必要がなく
なり、さらに、単語のシーケンス全体について確率を連
鎖することも可能になる。
【0020】本発明はまた、各ノードがテスト語を含
み、そのテスト語に関連するデータを記憶または参照す
ると共に、(階層中のそのブランチの最下位のものを除
く)各ノードが、1つ下のレベルにある複数のノードを
参照する、ノードの階層を備えたBツリーを、自然言語
処理システムで使用するために作成する方法であって、
Bツリー内で探索語を見つけ、そのテスト語が探索語と
一致するノードが見つかった場合は、そのノード用のデ
ータを修正し、探索語が見つからない場合は、Bツリー
の最下位に、そのテスト語用の探索語を有する新しいノ
ードを追加するステップと、一度に1レベルずつ上昇す
ることによって、ツリー中の一致したノードまたは新た
に追加されたノードから戻り、各レベルで、所定の基準
に従って現ノードを上昇元のノードと比較し、所定の基
準が満たされる場合、前記現ノードを含むツリーのブラ
ンチを再配列するステップとを備え、前記所定の基準
が、現ノードのテスト語の自然言語における発生頻度が
上昇元のノードのテスト語の該発生頻度よりも低いか否
かを含むことを特徴とする方法を提供する。
【0021】したがって、Bツリーを構築するためのこ
の方法は、Bツリーの標準の形成方法に似ているが、ノ
ードは、従来と異なり、平衡に留意して配列するのでは
なく、頻度基準に従って配列される。その結果、自然言
語データの確率分布のために、ノードへの平均アクセス
時間が大幅に短縮される。構築中の任意の所与の時間
に、Bツリーはそれまでの入力テキスト中の単語の頻度
を反映する。すなわち、この構築プロセス中にBツリー
に新しい単語が追加されるときでさえ、高速アクセスの
利益が得られる。
【0022】このような方法は、頻度順Bツリーを作成
する唯一の方法ではないことに留意されたい。従来のB
ツリーを使用して単語の発生を数えることも可能であ
り、相対頻度が決定された後に、これらの頻度を反映す
るツリー配列が確立される。しかし、そのような代替方
法では、前述のツリー形成時に高速アクセスの利益が得
られない。
【0023】現ノードのテスト語と上昇元ノードのテス
ト語の自然言語における発生頻度がほぼ等しい場合、前
記所定の基準はさらに、現ノードから派生する異なるブ
ランチの相対深さの違いを含むことが好ましい。これ
は、前述のような従来の意味での平衡化に対応し、ツリ
ーの頻度順が損なわれない場合に実行される。
【0024】
【実施例】図1の従来の平衡Bツリーは、データ項目に
ランダムにアクセスする場合に最適な構造である。しか
し、この条件は自然言語データにはあてはまらない。な
ぜなら、自然言語データでは、分布が極めてゆがんでお
り、少数の単語は非常に頻繁にアクセスされるが、多数
の単語はめったにアクセスされない。自然言語データの
頻度分布を図2に示す。この分布は、P(wi)=0.1
/i(「Zipfの法則」として知られる)という式で近似
することができる。前式で、iは、頻度による単語wi
ランクを表し、p(wi)は単語wiの確率である(この
式は、約12000語より後は合計が1を越えるので、
近似としてしか扱えない。これよりも正確な式がMandel
brotによって提供されている)。そのようなゆがんだデ
ータに対する従来のBツリー構造の性能はもはや最適で
はない。
【0025】そのような状況で、Bツリーの構造を大幅
に修正すると、全アクセス時間または予想アクセス時間
を最短にできることが分かった。新しい配列を図3に示
す。この図は、それぞれ1つの単語を表す1組のノード
を示している。階層中のノードの位置は、従来の平衡化
基準ではなく、相対頻度に基づいて決定される。
【0026】すなわち、図3でルート・ノードは"THE"
である。"THE"は英語では最も頻繁に発生する単語であ
る。ただし、アルファベット順で中間に位置するわけで
はないことは明らかである。"THE"より下位のレベル
に、アルファベット順で"THE"より前にある最も一般的
な単語"OF"と、"THE"より後にある最も一般的な単語"T
O"がある。この構造は、階層をさらに下降していき、最
もまれにしか使用されない単語が最も下位に配置される
(図示せず)。それぞれのブランチの深さが均一ではな
いことに留意されたい。これは、ツリーを平衡化しない
ことの直接的な結果である。また、頻度順が任意の所与
のブランチ内でしか通用しないので、ブランチ間の比較
ができない点にも留意されたい。たとえば、"AND"は、
実際には"TO"よりも一般的であるが、アルファベット順
でツリーの異なるブランチに配置されているので、階層
中のより下位のレベルに位置している。
【0027】図4は、図3に示したBツリーの形成を示
すフローチャートである。このプロセスを実施するため
のC言語プログラムを付録Aに掲げる。図4の方法で
は、テキストの一節中の各単語のカウントを示すBツリ
ーが作成される。これは、前述の書"The C Programming
Language"の例で実行されているのと同じタスクである
が、結果として得られるBツリーの構造は著しく異な
る。
【0028】図4を詳細に参照すると、テキストまたは
その他の単語ソースが走査されるとき、新しい単語がプ
ロセスに順次提示される(ステップ102)。付録Aの
コードでは、これは関数"1x_add"の呼出しを表す。この
関数の引数は、ノードを有効に表し、初期にはツリーの
最上位のルート・ノードにセットされる構造である"p"
と、見つけようとする単語文字列"word"と、"word"の頻
度を増分する量"frq"である(通常、"frq"は1に等しく
なるが、2つの頻度リストをマージするなどの状況が容
易に考えられる。この場合、一般性を付加すると好都合
である)。残りの引数"wordptr"については後で論じ
る。
【0029】lx_addの第1のステップ(104)は、ツ
リーの終わりに達したかどうか検査する(すなわち、"p
=null"をテストする)ことである。終わりに達している
場合、単語および頻度に関する適切な情報を含む新しい
ノードを作成する必要がある(ステップ106)。1x_a
ddでは、これは、関数lx_new(リストせず)を呼び出
し、続いて、新たに追加したノードに対応するpの値を
返すことによって表される。
【0030】ツリーの終わりに達していない場合、"wor
d"を現探索ノードのテスト値と比較する(ステップ10
7)。lx_addでは、これは、"cmp"の値を取り出すこと
に対応する。"cmp"は、"word"が、pで表されるノードの
テスト値よりもアルファベット順で前にある場合は正で
あり、"word"がこのテスト値よりもアルファベット順で
後にある場合は負であり、"word"がこのテスト値と正確
に一致する場合はゼロである(cmpの計算については後
で詳しく論じる)。一致(cmp=0)する場合(ステップ
108)、そのノード用の頻度カウンタ(すなわちp->f
req)が、追加の単語発生数であるfrqだけ増分される
(ステップ112)。この場合も、更新されたノードを
表すpの値が返される。
【0031】一致が見つからない場合、探索は、lx_add
を繰り返し呼び出すことによって、ツリーの次のレベル
に下降する(ステップ110)。ルーチンは、そのノー
ドのテスト値に対する、追加される単語の相対的アルフ
ァベット順に従って、どのブランチを選択するか("p->
left"または"p->right")を決定する。すなわち、cmpが
正である場合は左のブランチが選択され、cmpが負の場
合は右のブランチが選択される。pからの従属ノードを
表す構成要素p->leftおよびp->right自体は、ノードを
表す構造である。次の繰返し(1x_addの新たな反復)で
p->leftまたはp->rightのうち選択された方がpの新しい
値になり、新しい現ノードを表す。(ステップ110か
らの繰返しループに対応する)lx_addの反復呼出しは、
いずれかのノードが一致するか、あるいはツリーの最下
位に達し、新しいノードが追加されるまで継続する。
【0032】ここまで、lx_addは基本的に、たとえば、
カーニガンおよびリッチーの参考文献に記載の技法や、
従来の平衡Bツリーに使用されている技法などの従来技
術に従って、ツリー中の現位置を見つけ、それに応じて
ノードを増分または作成していることに留意されたい。
このプロセスが周知の方法と異なるのは、増分または作
成されたコードから戻る際である。リターン処理の際
に、lx_addを反復するたびにツリーのより上位のレベル
に戻り(ステップ122)、それがルート・ノードに達
するまで繰り返される。ツリーを上昇する各ステップご
とに、現ノードの頻度(p->freq)と、戻り元のノード
の頻度(p->left->freqまたはp->right->freqのどちら
か該当する方)を比較することによって、頻度順のテス
トが行われる(ステップ114)。現ノードのカウント
がすぐ下のレベルの戻り元のノードよりも低い場合、こ
れらのノードは再配列する必要がある(ステップ11
6)。
【0033】再配列プロセスを図5に示す。これらの図
は、ツリーのノード形成部分を示している(ツリーは、
図に示したノードから上位または下位あるいはその両方
に伸びることができる)。各ノード210は、テスト値
212("WORD1"など)および関連する頻度214と、
すぐ下のレベルのブランチ・ノードへのポインタを含む
(これらのポインタは、異なるノードを接続する線によ
って図示してある)。テスト値"WORD1"、"WORD2"など
は、アルファベット順に従って番号が付けてある。図5
のa)で、ツリーのWORD2を含む部分が頻度順に従って
いないことは明らかである。WORD2は、それが最初の繰
返しである場合は、増分されたばかりの単語であるため
に、その頻度が変化している可能性があり、また、先行
する繰返しでのWORD1またはWORD3に関する頻度順序変更
の結果、頻度が変化している可能性もある。lx_addにつ
いては、pは現在WORD1およびp->leftを指しており、qは
WORD2を指している。
【0034】ノードの再配列は、図5のb)に2本の線
で示したリンクを削除し、点線で示した2つのリンクを
追加するだけで、比較的簡単に行われる。すなわち、WO
RD2からの右ブランチはWORD3からWORD4に移動し、WORD4
からの左ブランチはWORD2からWORD3に移動する。その結
果得られる構造を図5のc)に示す。これは、次の繰返
しに戻されるWORD2(q)に対応する構造である。この順序
変更の実施に使用される機構は、実際には、従来のBツ
リー平衡化で使用される機構によく似ている。重要な違
いは、順序変更自体を実際にどう実行するかではなく、
いつ順序変更するかを決定するのに使用する基準であ
る。
【0035】図4の方法は、各ノード更新ごとにBツリ
ーへのアクセスが必要なので、作成されるBツリーが頻
度順になるという利益がある。この状況での頻度順Bツ
リーの利点を示すものとして、ワークステーション上で
図4の方法を実施したところ、5000万語を走査し、
最終的に50万語の語彙を含むBツリーを作成するのに
10分かかったが、同じハードウェア上で従来技術を使
用すると、10時間かかった。頻度順Bツリーを使用し
た他の場合にも、これにひけを取らない時間の節約が達
成できる。
【0036】図4の方法の他の特徴は、2つのノードの
頻度が等しい場合、その相対位置が従来の平衡基準に基
づいて決定される(ステップ118、120)ことであ
る。これはツリーの下位レベルで発生することが多い。
というのは、そこには、めったに発生しない(たとえ
ば、通常、入力テキストで1回または2回しか発生しな
い)単語が多数あるからである。これに対し、ツリーの
最上位での頻度は、Zipfの法則に従って比較的間隔が離
れている。したがって、この確率分布の結果は、実際に
は、Bツリーの各ブランチごとに、それより上位では平
衡化が行われず、それより下位ではブランチがほぼ完全
に平衡化される(言うまでもなく、ブランチ全体は頻度
順になっている)レベルが存在する傾向がある。
【0037】頻度が等しい場合の従来の平衡化を図6に
示す。この図は、WORD1、WORD2などを含むツリーのブラ
ンチの最下位を示している(この場合も、番号はアルフ
ァベット順に対応している)。各ノードは、テスト値2
12および頻度FREQ214のみならず、深さ値DEPTH2
16も記憶している。この場合、深さは、ツリーの最上
位からではなく、ツリーの最下位から測定されることに
留意されたい。ノードの深さは常に、そのノードより下
位のノードの最大深さより1つ大きい(すなわち、WORD
4の深さは、WORD6ではなく、WORD2より1つ大きい)。
【0038】頻度が等しいノードで平衡化を実行するコ
ードは、lx_addの終わりにある。コードのこの部分は、
関係するノードがすでに頻度順である場合にしか関係し
ない(そうでない場合は、再配列が実行され、リターン
が発生する)。関数"lx_set_depth"が呼び出され、単
に、左従属ノードと右従属ノードの深さの違いを返す。
図6のa)のブランチの場合、この関数は、WORD7の深
さからWORD4の深さを差し引き、"balance"に値2を返
す。これは1より大きいので、左のブランチは深すぎる
(深さの違いが1しかない場合、再平衡化で利益が得ら
れないことに留意されたい。深さが大きいブランチがス
ワップされるだけだからである)。再平衡化は、ツリー
が依然として頻度順である場合にだけ実行される。これ
には、WORD4とWORD6が等しい頻度をもつことが必要とさ
れる。図6のa)、b)およびc)の場合がそうであ
り、再平衡化動作が図6のb)およびc)に示すように
従来の方法で実行される(ステップは、図5のステップ
に類似している)。
【0039】頻度順であれ平衡化であれ、ノードを再配
列するたびに、当該ノードの深さ情報を更新する必要が
あることは明らかである。この更新はルーチンlx_set_d
epthによって実行される。このルーチンは、(新しい配
列での)そのツリーの1つ下のレベルのノードの深さを
照合し、それに従って当該ノードの深さを設定する(こ
の例のlx_set_depthの戻り値は無視することができ
る)。ツリーの最下位に新しいノードを追加する場合、
定義によりその深さは1となる。
【0040】図4の方法は、自然言語データ用の頻度順
Bツリーを作成する。次に、Bツリー構造を複製し、ノ
ードを使用して情報を直接記憶するか、あるいは他の情
報(たとえば、電子発音ライブラリ)への参照を含める
ことができる。希望する用途に応じて、Bツリー中のノ
ードの実際の頻度を記憶する必要がなくなる(記憶する
ことが好ましいのは、Bツリー構造を追加の頻度情報で
更新することを予定している場合だけである)。
【0041】頻度順Bツリーを自然言語データの記憶に
使用する特定の例に音声認識システムがある。冒頭で述
べたように、同音異義語、または音声学的に明確に定義
されていないその他の単語を区別する1つの方法は、複
数の候補の相対頻度を検討することである。すなわ
ち、"to"、"too"、または"two"に対応する音声が検出さ
れた場合、"to"は、3つのうちで最も一般的な単語なの
で、最も可能性の高い解釈となる。そのようなアプリケ
ーションでは、Bツリーに複数の単語の相対頻度に関す
る情報を記憶する必要がある(言うまでもなく、図4の
方法によってそのようなBツリーが直接作成される)。
【0042】単一の単語の確率を調べるよりも精巧な方
法は、単語のグループ、通常は単語の対または3つ組
(「バイグラム」または「トリグラム」として知られ
る)の相対頻度を考慮するものである。すなわち、音
声"to"、"two"、または"too"の次に単語"the"が続く場
合、"to"との識別が実際上確認され、後続の単語が"muc
h"である場合は、"too"が可能性の高い候補になる。た
だし、"to"の可能性も残る(この場合も、"two"は実際
上除去される)。このような単語の組合せの条件付き確
率に対応する単語の組合せの頻度に関する情報を記憶す
るには、多次元Bツリーが必要である。
【0043】そのような多次元Bツリーを提供する1つ
の方法を図7に示す。主頻度順Bツリーまたは一次頻度
順Bツリー中の各ノード210は、別のBツリー250
を参照する追加の項目SUCPTRを含む。追加項目SUCPTR
は、ノード210で表される単語であるWORD1に続く単
語の発生を記憶するために使用される。この二次Bツリ
ー250も頻度順にすることができる。ただし、その分
布は、WORD1が先行単語であることを条件とするので、
その配列は主Bツリーの配列とは異なる。たとえば、WO
RD1が"too"である場合、"much"や"little"などの単語
は、主Bツリーに比べてBツリー250では相対的に上
位にくるが、"the"はずっと下位にくる。
【0044】Bツリー250中のノードが、単語自体の
実際の値を含む必要はない。その代わりに、これらのノ
ードに、主Bツリー中の単語の位置を指すポインタを含
めることができる。これを図8に示す。図8では、ノー
ド310は、それによって表される単語を含む主Bツリ
ー中のノードを指すポインタWORDPTR312を含む。ノ
ード310中に実際のWORD1を記憶するためのフィール
ド318はもはや必要でなくなり、希望なら省略するこ
とができる。そのような配列は、必要とされる記憶スペ
ースが少なくてすむという利点があり、さらに、項目を
互いに有効に連鎖するので、毎回主Bツリーの経路ノー
ドを介する必要なしに、単語のシーケンスの条件付き確
率を得ることができる。
【0045】前述の方式を、トリグラムを処理するよう
に拡張することができる。その場合、Bツリー250中
の各項目は、2つの指定された単語で始まるトリグラム
中の3番目の単語の分布を含む、さらに別のBツリーを
参照する。この方式は、さらに高い次元に拡張すること
ができる。ただし、そのような高い次元構造の言語学的
効用は急激に減少する。このような方式には多数の明ら
かな変形がある。たとえば、Bツリー250に後続の単
語ではなく先行の単語を含め、あるいは主Bツリーに2
つの従属Bツリー、すなわち先行の単語から成る従属B
ツリーと後続の単語から成る従属Bツリーを設けること
もできる。
【0046】従属ツリーへの項目の追加は、関連する主
Bツリー・ノードを作成または増分した直後(すなわ
ち、図4のステップ106または112)に、あるいは
主Bツリーへの更新を完了した後に、別個のプロセス
で、必要なノード再配列と共に実行することができる。
lx_addのコードおよび図4に示した方法は、多次元Bツ
リーを直接作成しない。ただし、lx_addは、"wordptr"
引数を用いて、Bツリーに文字列ではなく(図8のWORD
PTRに等しい)ポインタを追加する手段を含んでいる。
さらに、cmpについてのテストに関して、Bツリーは、"
data"が(図8のフィールド316に対応する)実際の
単語値を含むノード構造中の構成要素となり、"name"が
(図8のフィールド312に対応する)ポインタとなる
ように作成される。主Bツリーで、"name"は単にそれ自
体(さらに正確には、それを含むノードの始め)を指す
が、二次Bツリーでは、"name"は、そのノード用の文字
列を実際に含む主Bツリー中の対応する項目を指す。そ
のような特徴により、lx_addは容易に、二次Bツリーま
たは他の従属Bツリーと共に使用できるようになる。
【0047】lx_addを使用すると、厳格な頻度順による
Bツリーが作成される。状況によっては、ツリーが過度
に不平衡になる恐れがある場合、そのような順序付けを
わずかにずらすと、効率がわずかに向上する可能性があ
る。したがって、従来の平衡化を採用するか否かについ
てのテストを、たとえば、当該ノードの頻度の相対的な
違いが非常に小さな割合であることに基づくものにする
ことができる。しかし、実際には、自然言語データの実
際の確率分布が与えられているものとすると、厳格な頻
度順(すなわち、ツリーを下降する際に頻度がまったく
増加しない)に基づいて極めて満足のいく結果が得られ
ている。そして、そのような方法は明らかに、最も実施
が容易である。
【0048】上述のBツリーは、各ノードが単一のテス
ト値だけを含むので、すべて2進式であったが、より高
いベースのBツリーを頻度順にしていけない理由はな
い。すなわち、たとえば、3進Bツリーでは、最上位ノ
ードがテスト値"of"および"the"を含み、3つの従属ノ
ードがそれぞれ、"and"と"in"、"on"と"that"、ならび
に"to"と"this"を含むことができる。この場合の頻度順
は、2進Bツリーの場合と同じ高速アクセスの利点をも
つ。同様に、ここに示した例はすべて英語のBツリーに
関係するものであるが、この方法を、単語が同様にゆが
んだ確率分布をもつ(これは、すべての自然言語に当て
はまる)他の言語にも適用できることは明らかである。
また、特定の専門領域(たとえば、医学)の単語の頻度
を反映するようにBツリーをカスタマイズすることも可
能である。
【0049】以上は以下の(1)〜(7)の記載とな
る。 (1)各ノードが少なくとも1つのテスト語を含み、テ
スト語に関連するデータを記憶または参照し、かつ(階
層の最下位のものを除く)各ノードが、階層の1つ下の
レベルにある複数のノードを参照する、ノード(22、
24、26)の階層から形成されたBツリー(21)を
含み、ノードが、Bツリーのブランチを下降する際に、
ノード中のテスト語の自然言語における発生頻度がほぼ
単調に減少するようにノードが配列されることを特徴と
する、自然言語処理システム。 (2)Bツリーが2進構造を有し、各ノードが単一のテ
スト値を含むことを特徴とする、(1)に記載の自然言
語処理システム。 (3)第1のノードが階層の1つ下のレベルにある第2
のノードを参照する、自然言語における発生頻度がほぼ
等しい第1および第2のノードの対について、第1ノー
ドと第2ノードの相対位置が、ツリーの平衡化が最適に
なるように配列されることを特徴とする、(1)または
(2)に記載の自然言語処理システム。 (4)ノード中の各テスト語について、二次Bツリー
(250)が参照され、二次Bツリーも頻度順であり、
前記テスト語を含むバイグラムの自然言語における発生
頻度に関する情報を記憶することを特徴とする、(1)
〜(4)に記載の自然言語処理システム。 (5)二次Bツリーが、各テスト語を、同じテスト語を
含む一次Bツリー中のノードへのバック参照の形で記憶
することを特徴とする、(4)に記載の自然言語処理シ
ステム。 (6)各ノードが1つのテスト語を含み、そのテスト語
に関連するデータを記憶または参照し、かつ(階層にお
けるそのブランチの最下位のものを除く)各ノードが1
つ下のレベルにある複数のノードを参照する、ノードの
階層を備えたBツリーを、自然言語処理システムで使用
するために作成する方法であって、Bツリー中で探索語
を見つけ、そのテスト語が探索語と一致するノードが見
つかった場合は、そのノード用のデータを修正し、探索
語が見つからない場合は、テスト語用の探索語を有する
新しいノードをBツリーの最下位に追加するステップ
と、一度に1レベルずつ上昇することによって、ツリー
中の一致したノードまたは新たに追加されたノードから
戻り、各レベルで、所定の基準に従って現ノードを上昇
元ノードと比較し、所定の基準が満たされる場合、前記
現ノードを含むツリーのブランチを再配列するステップ
とを備え、前記所定の基準が、現ノードのテスト語の自
然言語における発生頻度が上昇元ノードのテスト語の該
発生頻度よりも低いか否かを含むことを特徴とする方
法。 (7)現ノードのテスト語と上昇元のノードのテスト語
の自然言語における発生頻度がほぼ等しい場合に、前記
所定の基準がさらに、現ノードから派生する異なるブラ
ンチの相対深さの違いを含むことを特徴とする、(6)
に記載の方法。
【0050】 付録A struct lx_item * lx_add(p,word,wordptr,frq) struct lx_item * p; char * word; struct lx_item * wordptr; long frq; { /********************************************************************/ /* 辞書に新しい項目を追加する。 */ /********************************************************************/ int cmp; long balance; struct lx_item *q, *q1; /*------------------------------------------------------------------*/ /* ツリーの終わりに達したかどうか検査する。達した場合は新しいリーフ */ /* を追加する。*/ /*------------------------------------------------------------------*/ if (p==NULL) { p = lx_new(word,wordptr,frq); return(p); } /*------------------------------------------------------------------*/ /* 探索項目とツリーの現ノードとの基本比較 */ /*------------------------------------------------------------------*/ if (p != p->name) /* 迂回法を使用する */ { cmp = strcmp(p->name->data,word); /* printf("%s:%s %d\n",word,p->data,cmp); */ } else /* フルノードが利用可能 */ { cmp = strcmp(p->data,word); /* printf("%s:%s %d\n",word,p->data,cmp); */ } /*------------------------------------------------------------------*/ /* 下向き経路:単語を探す。存在しない場合は挿入する。*/ /* 上向き経路:高頻度ノードが上位にくるようにノードをリセットする。*/ /*------------------------------------------------------------------*/ if (cmp == 0) /* 単語が見つかった。 */ { p->freq += frq; return(p); } /*------------------------------------------------------------------*/ /* 単語を現単語の左側に移動する必要があるか否かを検査する。*/ /*------------------------------------------------------------------*/ if (cmp > 0) /* データ>単語 */ { p->left = lx_add(p->left,word,wordptr,frq); q = p->left; if (p->freq < q-freq) /* 単語が頻度順から外れる */ { p->left = q->rite; q->rite = p; lx_set_depth(p); lx_set_depth(q); return(q); } } /*------------------------------------------------------------------*/ /* 単語を現単語の右側に移動する必要があるか否かを検査する。*/ /*------------------------------------------------------------------*/ else /* データ<単語 */ { p->rite = lx_add(p->rite,word,wordptr,frq); q = p->rite; if (p->freq < p->rite->freq) /* 単語が頻度順から外れる */ { p->rite = q->left; q->left = p; lx_set_depth(p); lx_set_depth(q); return(q); } } /*------------------------------------------------------------------*/ /* ツリーは平衡化されているか。 */ /*------------------------------------------------------------------*/ balance = lx_set_depth(p); if (balance < -1) /* 不平衡:右が深すぎる。*/ { q = p->rite; if (p->freq = q->freq) /* ツリーの頻度順をそのままにしておく。*/ { p->rite = q->left; q->left = p; lx_set_depth(p); lx_set_depth(q); return(q); } } if (balance > 1) /* 不平衡:左が深すぎる。*/ { q = p->left; if (p->freq <= q-freq) { p->left = q->rite; q->rite = p; lx_set_depth(p); lx_set_depth(q); return(q); } } /*------------------------------------------------------------------*/ /* ノードを呼出し側に戻す。 */ /*------------------------------------------------------------------*/ return(p); }
【図面の簡単な説明】
【図1】自然言語データを記憶するための従来技術の平
衡化Bツリーを示す図である。
【図2】自然言語データにおける単語の頻度分布を示す
グラフである。
【図3】本発明による頻度順Bツリーの概略図である。
【図4】図3のBツリーを作成するためのプログラムの
フローチャートである。
【図5】頻度順を維持するための、図3のBツリーの再
配列を示す図である。
【図6】平衡化動作を実行するための、従来のBツリー
再配列を示す図である。
【図7】二(またはそれより高い)次元Bツリーを使用
している場合のノード・エントリを示す図である。
【図8】二次元Bツリーで使用するのに適した修正ノー
ド・エントリを示す図である。

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】各ノードが少なくとも1つのテスト語を含
    み、テスト語に関連するデータを記憶または参照し、か
    つ(階層の最下位のものを除く)各ノードが、階層の1
    つ下のレベルにある複数のノードを参照する、ノード
    (22、24、26)の階層から形成されたBツリー
    (21)を含み、 ノードが、Bツリーのブランチを下降する際に、ノード
    中のテスト語の自然言語における発生頻度がほぼ単調に
    減少するようにノードが配列されることを特徴とする、
    自然言語処理システム。
  2. 【請求項2】Bツリーが2進構造を有し、各ノードが単
    一のテスト値を含むことを特徴とする、請求項1に記載
    の自然言語処理システム。
  3. 【請求項3】第1のノードが階層の1つ下のレベルにあ
    る第2のノードを参照する、自然言語における発生頻度
    がほぼ等しい第1および第2のノードの対について、第
    1ノードと第2ノードの相対位置が、ツリーの平衡化が
    最適になるように配列されることを特徴とする、請求項
    1または2に記載の自然言語処理システム。
  4. 【請求項4】ノード中の各テスト語について、二次Bツ
    リー(250)が参照され、二次Bツリーも頻度順であ
    り、前記テスト語を含むバイグラムの自然言語における
    発生頻度に関する情報を記憶することを特徴とする、前
    記いずれかの請求項に記載の自然言語処理システム。
  5. 【請求項5】二次Bツリーが、各テスト語を、同じテス
    ト語を含む一次Bツリー中のノードへのバック参照の形
    で記憶することを特徴とする、請求項4に記載の自然言
    語処理システム。
  6. 【請求項6】各ノードが1つのテスト語を含み、そのテ
    スト語に関連するデータを記憶または参照し、かつ(階
    層におけるそのブランチの最下位のものを除く)各ノー
    ドが1つ下のレベルにある複数のノードを参照する、ノ
    ードの階層を備えたBツリーを、自然言語処理システム
    で使用するために作成する方法であって、 Bツリー中で探索語を見つけ、そのテスト語が探索語と
    一致するノードが見つかった場合は、そのノード用のデ
    ータを修正し、探索語が見つからない場合は、テスト語
    用の探索語を有する新しいノードをBツリーの最下位に
    追加するステップと、 一度に1レベルずつ上昇することによって、ツリー中の
    一致したノードまたは新たに追加されたノードから戻
    り、各レベルで、所定の基準に従って現ノードを上昇元
    ノードと比較し、所定の基準が満たされる場合、前記現
    ノードを含むツリーのブランチを再配列するステップと
    を備え、 前記所定の基準が、現ノードのテスト語の自然言語にお
    ける発生頻度が上昇元ノードのテスト語の該発生頻度よ
    りも低いか否かを含むことを特徴とする方法。
  7. 【請求項7】現ノードのテスト語と上昇元のノードのテ
    スト語の自然言語における発生頻度がほぼ等しい場合
    に、前記所定の基準がさらに、現ノードから派生する異
    なるブランチの相対深さの違いを含むことを特徴とす
    る、請求項6に記載の方法。
JP6055345A 1993-04-21 1994-03-25 自然言語処理システムおよびbツリー作成方法 Pending JPH0793372A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9308240.2 1993-04-21
GB9308240A GB2277387A (en) 1993-04-21 1993-04-21 Natural language processing system

Publications (1)

Publication Number Publication Date
JPH0793372A true JPH0793372A (ja) 1995-04-07

Family

ID=10734217

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6055345A Pending JPH0793372A (ja) 1993-04-21 1994-03-25 自然言語処理システムおよびbツリー作成方法

Country Status (3)

Country Link
EP (1) EP0625758A1 (ja)
JP (1) JPH0793372A (ja)
GB (1) GB2277387A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9740685B2 (en) 2011-12-12 2017-08-22 International Business Machines Corporation Generation of natural language processing model for an information domain

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2372671C (en) * 1994-10-25 2007-01-02 British Telecommunications Public Limited Company Voice-operated services
FI118062B (fi) * 2003-04-30 2007-06-15 Nokia Corp Pienimuistinen päätöspuu

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4974191A (en) * 1987-07-31 1990-11-27 Syntellect Software Inc. Adaptive natural language computer interface system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9740685B2 (en) 2011-12-12 2017-08-22 International Business Machines Corporation Generation of natural language processing model for an information domain

Also Published As

Publication number Publication date
GB9308240D0 (en) 1993-06-02
GB2277387A (en) 1994-10-26
EP0625758A1 (en) 1994-11-23

Similar Documents

Publication Publication Date Title
EP1393206B1 (en) Data structure for information systems
US10055439B2 (en) Fast, scalable dictionary construction and maintenance
US7158996B2 (en) Method, system, and program for managing database operations with respect to a database table
US6321192B1 (en) Adaptive learning method and system that matches keywords using a parsed keyword data structure having a hash index based on an unicode value
CN1552032B (zh) 数据库
CN103282902B (zh) 字尾数组候选选择和索引数据结构
US6263333B1 (en) Method for searching non-tokenized text and tokenized text for matches against a keyword data structure
US5995962A (en) Sort system for merging database entries
US20050027692A1 (en) Method, system, and program for accessing data in a database table
JP2000501861A (ja) コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法
JPH02271468A (ja) データ処理方法
CN103365992A (zh) 一种基于一维线性空间实现Trie树的词典检索方法
US5553284A (en) Method for indexing and searching handwritten documents in a database
US5950184A (en) Indexing a database by finite-state transducer
Simmons et al. Indexing and dependency logic for answering English questions
WO2020037794A1 (zh) 一种英文地名的索引建立方法及其查询方法和装置
US20090234852A1 (en) Sub-linear approximate string match
US11151317B1 (en) Contextual spelling correction system
US5553283A (en) Stored mapping data with information for skipping branches while keeping count of suffix endings
CN101944086A (zh) 全字索引词典
JPH0793372A (ja) 自然言語処理システムおよびbツリー作成方法
Priya et al. Hybrid optimization algorithm using N gram based edit distance
Ilić et al. Comparison of data mining algorithms, inverted index search and suffix tree clustering search
US7676330B1 (en) Method for processing a particle using a sensor structure
CN113111655B (zh) 分离词典的构建方法、基于分离词典的分词方法及设备