SUM

SUM関数は、ベクトル式を入力として取り、合計をFLOAT64形式のベクトルとして返します。

用途

SUMは、文またはドキュメントの表現を計算するために、主に自然言語処理(NLP)で使用されます。すべての単語の埋込みを合計することが一般的です。結果のベクトルはテキスト全体を表し、モデルでは単語のみでなく文を使用できます。

次の図は、2D空間での単語埋込みのベクトル表現を示しています。S1「The astronomer observed the stars (天文学者による星の観測)」およびS2「The stargazer watched the celestial bodies (占星術師による天体の観測)」を見ると、各文の各構成語に対応するベクトルの合計(図のS1およびS2)が、たとえば、コサイン類似度に関して非常に近いことがわかります。これは、2つの文が意味において非常に似ていることを意味します。



ベクトル式を使用したSUMの結果は、NULL以外のすべての入力に対して連続してベクトル加算操作を実行することと同じです。返されるベクトルは、入力と同じ数の次元を持ち、FLOAT64形式になります。式の次元数が柔軟である場合、すべての入力は各集計グループ内で同じ次元数である必要があります。

ベクトル式を入力として使用するSUM関数は、単一セットの集計またはGROUP BY句で使用できます。ROLLUPの使用もサポートされています。SUM関数は、集計操作の入力としてベクトル式を受け入れますが、現在、分析操作には適用できません。

NULLベクトルは無視され、合計ベクトルの計算時にはカウントされません。集計グループ内のすべての入力がNULLの場合、そのグループの結果はNULLになります。結果がFLOAT64の最大値をオーバーフローすると、入力ベクトル型の形式に関係なくエラーが発生します。

ベクトル入力では、DISTINCTCUBEおよびGROUPING SETSの使用はサポートされていません。また、BINARYおよびSPARSEベクトルを入力として指定することはできません。

SUM関数の完全な定義および実装については、『Oracle Database SQL言語リファレンス』を参照してください。

CREATE TABLE sum_t (v VECTOR, k1 NUMBER, k2 VARCHAR2(100));
INSERT INTO sum_t VALUES ('[2, 4, 6]', 2, 'even');
INSERT INTO sum_t VALUES ('[8, 10, 12]', 2, 'even');
INSERT INTO sum_t VALUES ('[1, 3, 5]', 3, 'odd');
INSERT INTO sum_t VALUES ('[7, 9, 11]', 3, 'odd');


SELECT SUM(v) v_sum FROM sum_t;

V_SUM
---------------------------------------------------
[1.8E+001,2.6E+001,3.4E+001]


SELECT SUM(v) v_sum, k1 FROM sum_t GROUP BY k1;

V_SUM                                    K1
---------------------------------------  ----------
[1.0E+001,1.4E+001,1.8E+001]             2
[8.0E+000,1.2E+001,1.6E+001]             3


SELECT SUM(v) v_sum FROM sum_t GROUP BY ROLLUP(k1, k2);

V_SUM
---------------------------------------------------
[1.0E+001,1.4E+001,1.8E+001]
[1.0E+001,1.4E+001,1.8E+001]
[8.0E+000,1.2E+001,1.6E+001]
[8.0E+000,1.2E+001,1.6E+001]
[1.8E+001,2.6E+001,3.4E+001]
CREATE TABLE sum_diff_dim_t (v VECTOR, k1 NUMBER, k2 VARCHAR2(100));
INSERT INTO sum_diff_dim_t VALUES ('[2, 4, 6]', 2, 'even');
INSERT INTO sum_diff_dim_t VALUES ('[8, 10, 12]', 2, 'even');
INSERT INTO sum_diff_dim_t VALUES ('[1, 3, 5, 7]', 3, 'odd');
INSERT INTO sum_diff_dim_t VALUES ('[9, 11, 13, 15]', 3, 'odd');


SELECT SUM(v) v_sum, k2 FROM sum_diff_dim_t GROUP BY k2;

V_SUM                                    K2
---------------------------------------  ----------
[1.0E+001,1.4E+001,1.8E+001]             even
[1.0E+001,1.4E+001,1.8E+001,2.2E+001]    odd


SELECT SUM(v) v_sum FROM sum_diff_dim_t;

ERROR:
ORA-51808: SUM(vector) requires all vectors to have the same dimension count.
Encountered (3, 4).