プライマリ・コンテンツに移動
Oracle® Textリファレンス
12cリリース1 (12.1)
B71316-03
目次へ移動
目次
索引へ移動
索引

前
次

7 CTX_CLSパッケージ

この章の内容は以下のとおりです。

7.1 CTX_CLSパッケージのプロシージャについて

CTX_CLS PL/SQLパッケージには、ドキュメント・カテゴリを定義するルールを生成するプロシージャがあり、ドキュメントの分類を実行できます。

次のプロシージャは、CTX_CLS PL/SQLパッケージの中にあります。

名前 説明

TRAIN

ドキュメントのカテゴリを定義するルールを生成します。出力は、入力されたトレーニング・ドキュメント・セットに基づいて行われます。

CLUSTERING

ドキュメント・コレクションのクラスタを生成します。

関連項目:

ドキュメントの分類の詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

7.2 TRAIN

このプロシージャを使用して、ドキュメントのカテゴリを選択する問合せルールを生成します。分類済のドキュメントで構成されたトレーニング・セットを指定する必要があります。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索引が移入されている必要があります。

関連項目:

ドキュメントの分類の詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

問合せと互換性のある構文

次の構文は、問合せと互換性のあるルールを生成し、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
);
index_name

ドキュメント・トレーニング・セットに関連付けられたCONTEXT索引の名前を指定します。

docid

ドキュメント表内のドキュメントID列の名前を指定します。この列のドキュメントIDは一意である必要があり、この列は、NUMBERデータ型であることが必要です。この列の値は、符号なし32ビット整数で格納され、0から4294967295の範囲内であることが必要です。

cattab

カテゴリ表の名前を指定します。この表のREADまたはSELECT権限が必要です。(READ権限の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

catdocid

カテゴリ表内のドキュメントID列の名前を指定します。この表のドキュメントIDは、ドキュメント表にも存在している必要があります。この列は、NUMBERである必要があります。この列の値は、符号なし32ビット整数で格納され、0から4294967295の範囲内であることが必要です。

catid

カテゴリ表内のカテゴリID列の名前を指定します。この列は、NUMBERである必要があります。この列の値は、符号なし32ビット整数で格納され、0から4294967295の範囲内であることが必要です。

restab

結果表の名前を指定します。この表に対するINSERT権限が必要です。

rescatid

結果表内のカテゴリID列の名前を指定します。この列は、NUMBERである必要があります。この列の値は、符号なし32ビット整数で格納され、0から4294967295の範囲内であることが必要です。

resquery

結果表内の問合せ列の名前を指定します。この列は、VARACHAR2CHAR, CLOBNVARCHAR2またはNCHARであることが必要です。

この列に生成された問合せは、次のようにANDまたはNOT演算子を使用して問合せ語句を接続します。

'T1 & T2 ~ T3'

問合せ語句はテーマ・トークンとしても使用でき、次のようにABOUT演算子で接続されます。

'about(T1) & about(T2) ~ about(T3)'

生成されたルールは、フィールド・セクションに対するWITHIN問合せもサポートします。

resconfid

結果表内の信頼度列の名前を指定します。この列には、トレーニング・データから推測した確率が含まれます。この確率は、ドキュメントが問合せに十分答えているかどうかを示します。

プリファレンス

プリファレンスの名前を指定します。分類型および属性については、「Oracle Text索引付けの要素」「分類型」を参照してください。

サポート・ベクター・マシン(SVM)ルールの構文

サポート・ベクター・マシン(SVM)のルール・プリファレンスは、バイナリ形式でルールを生成します。ご使用のアプリケーションで高度な分類精度が必要な場合、この構文を使用します。

次の構文は、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 );
index_name

テキスト索引の名前を指定します。

docid

ドキュメント表内のdocid列の名前を指定します。

cattab

カテゴリ表の名前を指定します。

catdocid

カテゴリ表内のdocid列の名前を指定します。

catid

カテゴリ表内のカテゴリID列の名前を指定します。

restab

結果表の名前を指定します。

結果表の形式は、次のとおりです。

列名 データ型 説明

CAT_ID

NUMBER

カテゴリのID。

TYPE

NUMBER(3) NOT NULL

実際のルールまたはcatidの場合は0、そうでない場合は1。

RULE

BLOB

戻されたルール。

プリファレンス

ユーザー・プリファレンスの名前を指定します。分類型および属性については、「Oracle Text索引付けの要素」「分類型」を参照してください。

CTX_CLS.TRAINプロシージャは、管理型分類で使用されます。拡張された例は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

7.3 CLUSTERING

このプロシージャを使用して、ドキュメントのコレクションをクラスタ化します。クラスタとは、内容が類似しているドキュメントのグループです。

クラスタ化の結果セットは、ドキュメントの割当ておよびクラスタの説明で構成されます。

  • ドキュメントの割当ての結果セットは、各ドキュメントが生成されたすべてのリーフ・クラスタに対してどれほど関連しているかを示します。

  • クラスタの説明の結果セットには、クラスタのトピックに関する情報が含まれます。この結果セットではクラスタが識別されており、クラスタの説明テキスト、クラスタ・ラベルの提案およびクラスタの品質スコアが含まれています。

クラスタの出力は階層構造です。ドキュメントとの関連性について、リーフ・クラスタにのみスコアが割り当てられます。多数のクラスタが作成されるほど、計算時間も長くかかります。生成されるクラスタの上限は、KMEAN_CLUSTERINGクラスタ型のCLUSTER_NUM属性で指定します(この章の「クラスタ型」を参照してください)。

このプロシージャには、表結果セットを持つものと、インメモリー結果セットを持つものの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
);
index_name

コレクション表のCONTEXT索引の名前を指定します。

docid

コレクション表内のドキュメントID列の名前を指定します。

doctab_name

ドキュメント割当て表の名前を指定します。このプロシージャにより、次の構造の表が作成されます。

doc_assign(
   docid number,
   clusterid number,
   score number
);
説明

DOCID

ドキュメントを識別するドキュメントID。

CLUSTERID

このドキュメントに関連付けられたリーフ・クラスタのID。CLUSTERIDが-1の場合、そのクラスタには「その他」のドキュメント(他のクラスタ・カテゴリに割り当てられないドキュメントなど)が含まれます。

SCORE

ドキュメントとクラスタ間で関連付けられたスコア。

これよりも多くの列が必要な場合は、このプロシージャをコールする前に表を作成します。

clstab_name

クラスタ説明表の名前を指定します。このプロシージャにより、次の構造の表が作成されます。

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)は親クラスタがないことを意味します。

これよりも多くの列が必要な場合は、このプロシージャをコールする前に表を作成します。

pref_name

プリファレンスの名前を指定します。

構文: インメモリーの結果セット

パフォーマンスを向上させるために、結果セットはインメモリー構造に格納します。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 
          );
index_name

コレクション表のCONTEXT索引の名前を指定します。

docid

コレクション表内のドキュメントID列を指定します。

dids

インメモリーdocid_tabの名前を指定します。

TYPE docid_tab IS TABLE OF number INDEX BY BINARY_INTEGER;
doctab_name

ドキュメント割当てインメモリー表の名前を指定します。この表は、次のように定義されます。

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

ドキュメントとクラスタ間で関連付けられたスコア。

cls_tab

クラスタ説明インメモリー表の名前を指定します。

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)は親クラスタがないことを意味します。

pref_name

プリファレンスの名前を指定します。分類型および属性については、「Oracle Text索引付けの要素」「クラスタ型」を参照してください。

関連項目:

クラスタ化の使用例は、『Oracle Textアプリケーション開発者ガイド』を参照してください。