明示的セマンティック分析とは

Oracle Database 12cリリース2には、特徴抽出のために教師なしアルゴリズムとして、明示的セマンティック分析(ESA)が導入されました。Oracle Database 18c以降では、ESAは分類の教師ありアルゴリズムとして拡張されています。

特徴抽出アルゴリズムとしてのESAは、潜在的な特徴を検出するのではなく、既存のナレッジ・ベースで示される明示的な特徴を使用します。特徴抽出アルゴリズムとしてのESAは、主にテキスト・ドキュメントの意味的な類似性の計算と明示的なトピックのモデリングに使用されます。分類アルゴリズムとしてのESAは、主にテキスト・ドキュメントを分類するために使用されます。ESAの特徴抽出と分類の両方のバージョンは、数値と分類型の入力データにも適用できます。

ESAへの入力は属性ベクターのセットです。すべての属性ベクターが概念に関連付けらます。概念とは、特徴抽出の場合は特徴のこと、分類の場合はターゲット・クラスのことです。特徴抽出の場合、1つの属性ベクターのみを任意の特徴に関連付けできます。分類では、指定されたターゲット・クラスに関連付けられた複数個の属性ベクターをトレーニング・セットに含めることができます。こうした1つのターゲット・クラスに関連する複数の行は、ESAアルゴリズムによって1つの行に集計されます。

ESAの出力は、最も重要な属性と概念の相関が含まれるスパース属性概念マトリックスです。相関の強度は各属性と概念ペアの重みの値によって取得されます。属性と概念のマトリックスは、各属性の最も重要な概念をリストする逆インデックスとして格納されます。

ノート:

特徴抽出の場合、ESAアルゴリズムは元の特徴空間を投影せず、次元数が減少することはありません。ESAアルゴリズムは制限されたまたは有益でない属性セットの機能を除外します。

ESAで処理される分類タスクの範囲は、Naive Bayesやサポート・ベクター・マシンなどの分類アルゴリズムとは異なります。ESAは、個別クラスの数が何十万にもおよぶ大規模な分類を実行できます。大規模な分類には、いくつかのクラスが相当数のトレーニング・サンプルを保持していて、それ以外のクラスがトレーニング・データセット内で疎表現される膨大なトレーニング・データ・セットが必要になります。

ESAトピック空間にドキュメントを投影すると、高次元のスパース・ベクターが作成されますが、他の機械学習アルゴリズムへの入力としては適していません。Oracle Database 23c以降、この問題に対処するために埋込みが追加されました。自然言語処理では、埋込みとは、語、句またはドキュメントが実数のベクターにマップされる、一連の言語モデリングおよび機能学習手法を指します。これには、多次元空間から、かなり小さい次元の連続ベクター空間への数学的変換が必要になります。埋込みは通常、コンテキスト・データを収集するために既存のナレッジ・ベース上に作成されます。この方法は、ESAコンテキストを他の機械学習アルゴリズムで使用できるように維持しながら、高次元のスパース・ベクターを低次元の高密度ベクターにマップするために使用されます。出力はdoc2vec (ドキュメントのベクター化表現)マッピングで、"bag of words"アプローチのかわりに使用できます。ESA埋込みにより、ESAモデルを利用して、テキストまたはその他のESA入力の埋込みを生成できます。これには、単一の語の埋込みが含まれますが、これに限定されません。

一連の点の次元を下げるために、ランダム投影アルゴリズムのスパース・バージョンが使用されます。ランダム投影では、点の間の距離が大まかに保持されるように、元のデータが適切な低次元空間に投影されます。他のアプローチと比較すると、ランダム投影法は、その能力、容易性および低誤差率に定評があります。多くの自然言語タスクでは、ランダム投影法が適用されます。

次の例では、ESA埋込みを定義するコード・スニペットを示します。この例を使用すれば、ESA埋込みを使用して密な予測を作成できます。mining_build_textビューは、dmsh.sqlスクリプトのmining_dataビューから作成されます。テキスト・ポリシーが作成され、変換が設定されてから、CREATE_MODEL2プロシージャを使用してモデルが作成されます。

BEGIN DBMS_DATA_MINING.DROP_MODEL('ESA_text_sample_dense');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
  xformlist dbms_data_mining_transform.TRANSFORM_LIST;

  v_setlst DBMS_DATA_MINING.SETTING_LIST;

BEGIN
  v_setlst('PREP_AUTO')               := 'ON';
  v_setlst('ALGO_NAME')               := 'ALGO_EXPLICIT_SEMANTIC_ANALYS';
  v_setlst('ODMS_TEXT_POLICY_NAME')   := 'DMDEMO_ESA_POLICY';
  v_setlst('ESAS_MIN_ITEMS')          := '5';
  v_setlst('ODMS_TEXT_MIN_DOCUMENTS') := '2';
  v_setlst('ESAS_EMBEDDINGS')         := 'ESAS_EMBEDDINGS_ENABLE';
  v_setlst('ESAS_EMBEDDING_SIZE')     := '1024';

  dbms_data_mining_transform.SET_TRANSFORM(
    xformlist, 'comments', null, 'comments', 'comments',
      'TEXT(POLICY_NAME:DMDEMO_ESA_POLICY)(TOKEN_TYPE:STEM)');

  DBMS_DATA_MINING.CREATE_MODEL2(
    model_name          => 'ESA_text_sample_dense',
    mining_function     => 'FEATURE_EXTRACTION',
    data_query          => 'SELECT * FROM mining_build_text',
    case_id_column_name => 'cust_id',
    set_list            => v_setlst,
    xform_list          => xformlist);
END;
/