GETA (第2版) は, 汎用連想計算エンジン GETA (平成12年2月, 第1版) をベースに大幅な機能拡張を行ったものである. 以下に, GETA (第2版)で追加された主な機能について列挙し簡単な説明を付す. 各機能の詳細については対応するドキュメントを参照されたい.
以上.
GETA (第2版) は(疎な)行列を効率的に扱うためのライブラリ libwam, 計量の差し替えが可能な連想エンジン libae, 文書クラスタリングライブラリ libae, ユーティリティーライブラリ libgetamu および支援ツール群から構成される. libwam は, 行列のデータを扱う libxr, 行列の行や列のインデクスを管理する libcw, 行列に附属するのその他の属性値を管理する libci から構成される. また, libwam が扱う行列のインスタンスを WAM と呼ぶ.
WAM には, libci により, それらを識別するためのハンドルと呼ばれる名前が付けられる. libci は, WAM ごとに属性データベース(以後, CI)を管理しており, 標準的な属性とその値以外に, 任意の属性とその値の組をユーザが付与することができる.
WAM の要素は, 数学で扱う行列の様に整数でインデクシングされる. libwam ではこのインデクシングに使う整数を ID と呼ぶ (C言語での型名は symbol_t であることに注意せよ). 全ての ID にはその外部表現としての名前(name)が付けられる. ID と name の対応表 (以後, CW) は WAM ごとに固有であり, さらに行と列で異なる表が用いられる. この対応表は libcw が管理している. libcw により name と ID の相互変換を行うためには, WAM および行, 列のいずれの CW を使用するのかを指定しなければならない. そのため, C 言語インタフェースでは, 行の CW を WAM_ROW で, 列の CW を WAM_COL で指定する (これは, libwam での指定法である, 後述).
WAM の要素は0以上の整数である(実装では, 圧縮モードで 0..227-1, 非圧縮モードで 0..231-1 まで使用可能). libxr は疎な(その要素の多くが 0 である)行列を扱うことを仮定しており, WAM の全ての行ベクタおよび列ベクタを圧縮した形式でファイルに保管している. この圧縮形式のデータ(以後, XR)には, 行 XR と列 XRとがあり, XR にアクセスする際には WAM および行, 列のいずれの XR を使用するのかを 指定しなければならない. この指定には CW と同様に, 行 XR の指定に WAM_ROW を, 列 XR の指定に WAM_COL を用いる(これは, libwam での指定法である, 後述). libxr では, 行(列)ベクタの要素のうちその値が 0 でない要素のみを, その列(行)インデクスの ID と値の組 (C言語では xr_elem 型) の配列 (C言語では附属情報を加えた xr_vec 型として宣言) を作成し, それを XR に保持している. libxr により XR にアクセスする場合, 直接的にはこの値が 0 である要素を含まない配列へのアクセスのみが可能である. WAM の行数, 列数, 全要素の和などの, 何種類かのサマリ情報も 予じめ計算されて XR に保管されており, これらの情報については libxr に, より低いコストでアクセスすることが可能である. これ以外の WAM へのアクセス方法, 例えば, ID を直接インデクスとして用いることができる(疎な)ベクタや行列, 行と列の ID 指定してのある 1 要素への直接のアクセスなどは, libxr では提供されない.
この様に, 1 つの WAM について, 2つの CW および 2 つの XR が存在する. 実装ではこれらは別々のファイルに格納されており, 都合, 1 つの WAM は 4 ファイルで構成されることになる(CI は全 WAM に共通で用いられる 1 インスタンスのみが存在するのでここでは触れない). 一つのプログラムで扱うファイル識別子の数が多くなるということは, ユーザ(プログラマ)にとって負担となり得る. libwam は libcw, libxr への統一インタフェースであり, ユーザはハンドルを指定して WAM をオープンするだけで, WAM を構成する 4 つのファイルにアクセスすることができるため, ファイル識別子を管理する負担を大幅に軽減することができる. なお, libwam で WAM に対する操作を行う際には, オープンした WAM のデスクリプタ以外に 行, 列のいずれの CW や XR にアクセスするのかを指定する必要があり, WAM_ROW を行, WAM_COL が列の指定に使用される.
通常, WAM は libwam (libcw, libxr) が高速にアクセスすることができる様に, バイナリ形式で格納されており, さらに, バイナリ形式以外にテキスト形式の外部表現が規定されている. 外部表現ではインデクスとして ID ではなく name が用いられる(name には改行および NUL バイトを含まない任意の文字列が使用可能である). WAM の外部表現は perl などのレポート作成言語で容易に生成可能であり, またホスト環境にも影響されにくく移植性が高い. この様な理由から, WAM の元データを作成するツールなどで libwam 以外の手段により WAM を操作する必要がある場合には, 外部表現を扱うことが推奨される. また, 人間可読であるため(気合いさえあれば)作成した WAM のデバッグにも有効である.
libae は計量の差し替えが可能な連想エンジンである. libae は検索式 q として与えられた行(列) IDqのリストから, 第 ID 要素が 0 でない全ての列(行) ベクタ d の IDdを集め, IDdのリストを返す. リストの各要素には d と q との類似度が付される. さらに, その上位から指定した個数だけを集めることが可能であり, 連想検索など上位いくつかの結果だけが必要な場合に, 必要最低限のメモリで連想計算を実行することができる. q の要素には必須, 不要の属性を与えることができ, 連想検索などで利用する際に, 必須語, 除外語などの指定が高速に処理可能である. また, 類似度の計算式はユーザが容易に変更することが可能である(C 言語が分からなくても良い).
libcs は, WAM にエンコードされたデータをクラスタリングするためのライブラリである. これにより, 例えば, キーワード検索の結果(文書集合)をクラスタリングし 検索結果を幾つかの意味的なまとまり(クラスタ)に分類することで これは検索結果の概観を作成したり, 単語の集合をクラスタリングることでシソーラス (単語の意味的な階層)のようなものを自動的に作る, などといったことが可能になる.