この章では、PL/SQLパッケージCTX_CLS
の使用方法について説明します。このパッケージを使用すると、ドキュメントの分類を実行できます。
この章で説明するプロシージャは、次のとおりです。
名前 | 説明 |
---|---|
TRAIN |
ドキュメントのカテゴリを定義するルールを生成します。出力は、入力されたトレーニング・ドキュメント・セットに基づいて行われます。 |
CLUSTERING |
ドキュメント・コレクションのクラスタを生成します。 |
このプロシージャを使用して、ドキュメントのカテゴリを選択する問合せルールを生成します。分類済のドキュメントで構成されたトレーニング・セットを指定する必要があります。Oracle Textがサポートしているすべてのドキュメント形式を使用でき、各ドキュメントが1つ以上のカテゴリに属している必要があります。このプロシージャは、カテゴリを定義する問合せを生成し、結果を表に書き込みます。
ドキュメント表とカテゴリ表の準備も必要です。カテゴリ表には、2つ以上のカテゴリが含まれている必要があります。
たとえば、ドキュメント表とカテゴリ表を次のように定義できます。
create table trainingdoc(
docid number primary key, text varchar2(4000));
create table category (
docid trainingdoc(docid), categoryid number);
必要な分類アルゴリズムに合せ、2つの構文のいずれかを使用できます。問合せと互換性を持つ構文は、RULE_CLASSIFIER
プリファレンスを使用し、問合せ文字列としてルールを生成します。サポート・ベクター・マシン構文は、SVM_CLASSIFER
プリファレンスを使用し、バイナリ形式でルールを生成します。SVM_CLASSIFIER
を使用すると、精度の高い分類が得られますが、ルールはバイナリ形式で生成されるため、RULE_CLASSIFIER
によって生成される問合せ文字列のようには確認できません。RULE_CLASSIFIER
およびSVM_CLASSIFIER
の学習に影響を与えるのは、ドキュメント表とカテゴリ表の両方に使用されているドキュメントIDのみです。
CTX_CLS.TRAIN
プロシージャでは、関連付けられたCONTEXT索引がドキュメント表に存在している必要があります。最適な結果を得るために、このプロシージャの実行前に索引を同期化してください。SVM_CLASSIFIER
構文では、移入されていないCONTEXT索引を使用できますが、問合せと互換性のある構文では、CONTEXT索引が移入されている必要があります。
問合せと互換性のある構文
次の構文は、問合せと互換性のあるルールを生成し、RULE_CLASSIFIERプリファレンスとともに使用されます。複数のキーワードによって異なるカテゴリがそれぞれ分けられている場合、この構文とプリファレンスを使用します。ルールを問合せ文字列として生成する利点は、生成したルールを容易に確認できることです。バイナリ形式であるSVMルールの生成と、この点が異なります。
CTX_CLS.TRAIN(
index_name in varchar2, docid in varchar2, cattab in varchar2, catdocid in varchar2, catid in varchar2, restab in varchar2, rescatid in varchar2, resquery in varchar2, resconfid in varchar2, preference in varchar2 DEFAULT NULL
);
ドキュメント・トレーニング・セットに関連付けられたCONTEXT索引の名前を指定します。
ドキュメント表内のドキュメントID列の名前を指定します。この列のドキュメントIDは一意である必要があり、この列は、NUMBER
データ型であることが必要です。この列の値は、符号なし32ビット整数で格納され、0〜4294967295の範囲内であることが必要です。
カテゴリ表の名前を指定します。この表に対するSELECT
権限が必要です。
カテゴリ表内のドキュメントID列の名前を指定します。この表のドキュメントIDは、ドキュメント表にも存在している必要があります。この列はNUMBER
データ型であることが必要です。この列の値は、符号なし32ビット整数で格納され、0〜4294967295の範囲内であることが必要です。
カテゴリ表内のカテゴリID列の名前を指定します。この列はNUMBER
データ型であることが必要です。この列の値は、符号なし32ビット整数で格納され、0〜4294967295の範囲内であることが必要です。
結果表の名前を指定します。この表に対するINSERT
権限が必要です。
結果表内のカテゴリID列の名前を指定します。この列はNUMBER
データ型であることが必要です。この列の値は、符号なし32ビット整数で格納され、0〜4294967295の範囲内であることが必要です。
結果表内の問合せ列の名前を指定します。この列は、VARACHAR2
、CHAR
CLOB
、NVARCHAR2
またはNCHAR
であることが必要です。
この列に生成された問合せは、次のようにAND
またはNOT
演算子を使用して問合せ語句を接続します。
'T1 & T2 ~ T3'
問合せ語句はテーマ・トークンとしても使用でき、次のようにABOUT
演算子で接続されます。
'about(T1) & about(T2) ~ about(T3)'
生成されたルールは、フィールド・セクションに対するWITHIN
問合せもサポートします。
結果表内の信頼度列の名前を指定します。この列には、トレーニング・データから推測した確率が含まれます。この確率は、ドキュメントが問合せに十分答えているかどうかを示します。
プリファレンスの名前を指定します。分類型および属性については、第2章「Oracle Text索引付けの要素」の「分類型」を参照してください。
サポート・ベクター・マシン・ルールの構文
次の構文は、SVM_CLASSIFIERプリファレンスを持つサポート・ベクター・マシン(SVM)ルールを生成します。このプリファレンスは、ルールをバイナリ形式で生成します。ご使用のアプリケーションで高度な分類精度が必要な場合、この構文を使用します。
CTX_CLS.TRAIN( index_name in varchar2, docid in varchar2, cattab in varchar2, catdocid in varchar2, catid in varchar2, restab in varchar2, preference in varchar2 );
テキスト索引の名前を指定します。
ドキュメント表内のdocid
列の名前を指定します。
カテゴリ表の名前を指定します。
カテゴリ表内のdocid
列の名前を指定します。
カテゴリ表内のカテゴリID列の名前を指定します。
結果表の名前を指定します。
結果表の形式は、次のとおりです。
列名 | データ型 | 説明 |
---|---|---|
CAT_ID |
NUMBER | カテゴリのID。 |
TYPE |
NUMBER(3) NOT NULL | 実際のルールまたはcatidの場合は0、そうでない場合は1。 |
RULE |
BLOB | 戻されたルール。 |
ユーザー・プリファレンスの名前を指定します。分類型および属性については、第2章「Oracle Text索引付けの要素」の「分類型」を参照してください。
例
CTX_CLS.TRAIN
プロシージャは、管理型分類で使用されます。拡張された例は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
このプロシージャを使用して、ドキュメントのコレクションをクラスタ化します。クラスタとは、内容が類似しているドキュメントのグループです。
クラスタ化の結果セットは、ドキュメントの割当ておよびクラスタの説明で構成されます。
ドキュメントの割当ての結果セットは、各ドキュメントが生成されたすべてのリーフ・クラスタに対してどれほど関連しているかを示します。
クラスタの説明の結果セットには、クラスタのトピックに関する情報が含まれます。この結果セットではクラスタが識別されており、クラスタの説明テキスト、クラスタ・ラベルの提案およびクラスタの品質スコアが含まれています。
クラスタの出力は階層構造です。ドキュメントとの関連性について、リーフ・クラスタにのみスコアが割り当てられます。多数のクラスタが作成されるほど、計算時間も長くかかります。生成されるクラスタの上限は、KMEAN_CLUSTERING
クラスタ型のCLUSTER_NUM
属性で指定します(「クラスタ型」を参照してください)。
このプロシージャには、表結果セットを持つものと、メモリー内結果セットを持つものの2つのバージョンが存在します。
クラスタ化は、非管理型分類とも呼ばれます。
関連項目: クラスタ化および関連するプリファレンスの詳細は、第2章「Oracle Text索引付けの要素」の「クラスタ型」、および『Oracle Textアプリケーション開発者ガイド』を参照してください。 |
構文: 表結果セット
ctx_cls.clustering ( index_name IN VARCHAR2, docid IN VARCHAR2, doctab_name IN VARCHAR2, clstab_name IN VARCHAR2, pref_name IN VARCHAR2 DEFAULT NULL );
コレクション表のCONTEXT索引の名前を指定します。
コレクション表内のドキュメントID列の名前を指定します。
ドキュメント割当て表の名前を指定します。このプロシージャにより、次の構造の表が作成されます。
doc_assign( docid number, clusterid number, score number );
列 | 説明 |
---|---|
DOCID |
ドキュメントを識別するドキュメントID。 |
CLUSTERID |
このドキュメントに関連付けられたリーフ・クラスタのID。CLUSTERID が-1の場合、そのクラスタには「その他」のドキュメント(他のクラスタ・カテゴリに割り当てられないドキュメントなど)が含まれます。 |
SCORE |
ドキュメントとクラスタ間で関連付けられたスコア。 |
これよりも多くの列が必要な場合は、このプロシージャをコールする前に表を作成します。
クラスタ説明表の名前を指定します。このプロシージャにより、次の構造の表が作成されます。
cluster_desc( clusterid NUMBER, descript VARCHAR2(4000), label VARCHAR2(200), sze NUMBER, quality_score NUMBER, parent NUMBER );
列 | 説明 |
---|---|
CLUSTERID |
クラスタを識別するクラスタID。CLUSTERID が-1の場合、そのクラスタには「その他」のドキュメント(他のクラスタ・カテゴリに割り当てられないドキュメントなど)が含まれます。 |
DESCRIPT |
クラスタを説明する文字列。 |
LABEL |
クラスタに対して提案されたラベル。 |
SZE |
現在このパラメータには値はありません。 |
QUALITY_SCORE |
クラスタの品質スコア。数値が大きいほど一貫性が高いことを示します。 |
PARENT |
親クラスタID。ゼロ(0)は親クラスタがないことを意味します。 |
これよりも多くの列が必要な場合は、このプロシージャをコールする前に表を作成します。
プリファレンスの名前を指定します。
構文: メモリー内の結果セット
パフォーマンスを向上させるために、結果セットはメモリー内構造に格納します。CTX_CLS
パッケージでは、ドキュメント割当て用およびクラスタ説明用に2つのメモリー内表が定義されています。
CTX_CLS.CLUSTERING( index_name IN VARCHAR2, docid IN VARCHAR2, dids IN DOCID_TAB, doctab_name IN OUT NOCOPY DOC_TAB, clstab_name IN OUT NOCOPY CLUSTER_TAB, pref_name IN VARCHAR2 DEFAULT NULL );
コレクション表のCONTEXT索引の名前を指定します。
コレクション表内のドキュメントID列を指定します。
メモリー内docid_tab
の名前を指定します。
TYPE docid_tab IS TABLE OF number INDEX BY BINARY_INTEGER;
ドキュメント割当てメモリー内表の名前を指定します。この表は、次のように定義されます。
TYPE doc_rec IS RECORD ( docid NUMBER, clusterid NUMBER, score NUMBER ) TYPE doc_tab IS TABLE OF doc_rec INDEX BY BINARY_INTEGER;
列 | 説明 |
---|---|
DOCID |
ドキュメントを識別するドキュメントID。 |
CLUSTERID |
このドキュメントに関連付けられたリーフ・クラスタのID。CLUSTERID が-1の場合、そのクラスタには「その他」のドキュメント(他のクラスタ・カテゴリに割り当てられないドキュメントなど)が含まれます。 |
SCORE |
ドキュメントとクラスタ間で関連付けられたスコア。 |
クラスタ説明メモリー内表の名前を指定します。
TYPE cluster_rec IS RECORD( clusterid NUMBER, descript VARCHAR2(4000), label VARCHAR2(200), sze NUMBER, quality_score NUMBER, parent NUMBER ); TYPE cluster_tab IS TABLE OF cluster_rec INDEX BY BINARY_INTEGER;
列 | 説明 |
---|---|
CLUSTERID |
クラスタを識別するクラスタID。CLUSTERID が-1の場合、そのクラスタには「その他」のドキュメント(他のクラスタ・カテゴリに割り当てられないドキュメントなど)が含まれます。 |
DESCRIPT |
クラスタを説明する文字列。 |
LABEL |
クラスタに対して提案されたラベル。 |
SZE |
現在このパラメータには値はありません。 |
QUALITY_SCORE |
クラスタの品質スコア。数値が大きいほど一貫性が高いことを示します。 |
PARENT |
親クラスタID。ゼロ(0)は親クラスタがないことを意味します。 |
プリファレンスの名前を指定します。分類型および属性については、第2章「Oracle Text索引付けの要素」の「クラスタ型」を参照してください。
例