7 CTX_CLSパッケージ
この章の内容は以下のとおりです。
7.1 CTX_CLSパッケージのプロシージャについて
CTX_CLS
PL/SQLパッケージには、ドキュメント・カテゴリを定義するルールを生成するプロシージャがあり、ドキュメントの分類を実行できます。
次のプロシージャは、CTX_CLS
PL/SQLパッケージで実行します。
名前 | 説明 |
---|---|
ドキュメントのカテゴリを定義するルールを生成します。出力は、入力されたトレーニング・ドキュメント・セットに基づいて行われます。 |
|
ドキュメント・コレクションのクラスタを生成します。 |
|
SA_TRAIN_MODEL | センチメント分類子をトレーニングします。 |
SA_DROP_MODEL | 既存のセンチメント分類子を削除します。 |
ノート:
CTX_CLS
パッケージのAPIは、スキーマまたは所有者名を接頭辞として使用する識別子をサポートしていません。
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
-
結果表内の問合せ列の名前を指定します。この列は、
VARACHAR2
、CHAR,
CLOB
、NVARCHAR2
または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,
catdocid 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
を使用します。