7 CTX_CLSパッケージ

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

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

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

次のプロシージャは、CTX_CLS PL/SQLパッケージで実行します。

名前 説明

TRAIN

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

CLUSTERING

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

SA_TRAIN_MODEL センチメント分類子をトレーニングします。
SA_DROP_MODEL 既存のセンチメント分類子を削除します。

ノート:

CTX_CLSパッケージのAPIは、スキーマまたは所有者名を接頭辞として使用する識別子をサポートしていません。

関連項目:

ドキュメントの分類の詳細は、『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索引が移入されている必要があります。

ノート:

データベースをダウングレードする場合、TRAINを使用してOracle Database 12c リリース2 (12.2)に作成したモデルをすべて削除する必要があります。これらのモデルは以前のリリースと互換性がありません。ダウングレードする前にモデルを削除しない場合、次のエラーが発生します: ORA-40350: ダウングレードできないモデルが1つ以上存在します

関連項目:

ドキュメントの分類の詳細は、『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

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

preference

プリファレンスの名前を指定します。分類型および属性については、「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

戻されたルール。

preference

ユーザー・プリファレンスの名前を指定します。分類型および属性については、「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アプリケーション開発者ガイド』を参照してください。

7.4 SA_TRAIN_MODEL

このプロシージャを使用して、センチメント分類子をトレーニングします。センチメント分類子をトレーニングするには、分類済のドキュメントで構成されたトレーニング・セットを指定する必要があります。Oracle Textがサポートしているすべてのドキュメント形式を使用でき、各ドキュメントが1つ以上のカテゴリに属している必要があります。

Oracle Textは、最初にトレーニングセット表およびそれにより提供されるカテゴリをチェックします。トレーニング・セット・ドキュメントから抽出された機能は、センチメント分類子のトレーニングに使用されます。ルール表は、センチメント分類子のトレーニングの終了後に生成されるルールを使用して、作成および移入されます。センチメント分類子は、これらのルールを使用してセンチメント分析を実行します。CTXRULE索引がルール表にも作成されます。

ノート:

データベースをダウングレードする場合、SA_TRAIN_MODELを使用してOracle Database 12c リリース2 (12.2)に作成したモデルをすべて削除する必要があります。これらのモデルは以前のリリースと互換性がありません。ダウングレードする前にモデルを削除しない場合、次のエラーが発生します: ORA-40350: ダウングレードできないモデルが1つ以上存在します

構文

SA_TRAIN_MODEL(
    clsfier_name IN VARCHAR2,
    index_name IN VARCHAR2,
    docid IN VARCHAR2,
    cattab IN VARCHAR2,
    cat_docid IN VARCHAR2,
    catid IN VARCHAR2,
    pref_name IN VARCHAR2
);

clsfier_name

トレーニングするセンチメント分類子の名前を指定します。センチメント分類子の名前の最大長は、24バイトです。

index_name

ドキュメント・トレーニング・セットに関連付けられたテキスト索引の名前を指定します。これは、CONTEXT索引で、センチメント分類子のトレーニングの前にトレーニング・データに作成する必要があります。

docid

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

cattab

トレーニング・セット・ドキュメントで使用するルール・ラベルを含むカテゴリ表の名前を指定します。この表には、センチメント分類子のトレーニングのためにdocidからcatidへのマッピングが含まれる必要があります。

catdocid

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

catid
カテゴリ表内のカテゴリID列の名前を指定します。この列は、NUMBERである必要があります。この列の値は、0(ゼロ)、1または2のいずれかです。0(ゼロ)はニュートラル、1はポジティブ、および2はネガティブを意味します。
pref_name
センチメント分類子のトレーニングで使用するセンチメント分類子プリファレンス、タイプSENTIMENT_CLASSIFIERの名前を指定します。名前を指定しない場合、デフォルトのセンチメント分類子、CTXSYS.DEFAULT_SENT_CLASSIFIERを使用します。

関連項目:

SA_TRAIN_MODELプロシージャの使用例は、『Oracle Textアプリケーション開発者ガイド』を参照してください

7.5 SA_DROP_MODEL

このプロシージャを使用して、既存のセンチメント分類子を削除します。

構文

SA_DROP_MODEL(
   clsfier_name IN VARCHAR2
);
clsfier_name

削除するセンチメント分類子の名前を指定します。