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
の最大値をオーバーフローすると、入力ベクトル型の形式に関係なくエラーが発生します。
ベクトル入力では、DISTINCT
、CUBE
および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).
親トピック: 集計関数