warpvector 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +180 -0
- package/dist/index.d.mts +607 -0
- package/dist/index.d.ts +607 -0
- package/dist/index.js +1298 -0
- package/dist/index.mjs +1257 -0
- package/package.json +42 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 渡されたベクトルのL2ノルム(ユークリッド距離)を計算し、
|
|
3
|
+
* 長さが1になるように正規化(normalize)した新しい Float32Array を返します。
|
|
4
|
+
* コサイン類似度の計算前などに使用します。
|
|
5
|
+
*
|
|
6
|
+
* @param {number[] | Float32Array} vector - 正規化するベクトル
|
|
7
|
+
* @returns {Float32Array} 正規化された新しい Float32Array ベクトル。ゼロベクトルの場合はゼロベクトルのまま返します。
|
|
8
|
+
*/
|
|
9
|
+
declare function normalize(vector: number[] | Float32Array): Float32Array;
|
|
10
|
+
/**
|
|
11
|
+
* 球面線形補間 (Slerp)
|
|
12
|
+
* 高次元の埋め込み空間において、幾何学的な構造(コサイン類似度)を維持したまま
|
|
13
|
+
* 2つのベクトル間を滑らかに補間します。
|
|
14
|
+
*
|
|
15
|
+
* @param {number[] | Float32Array} v1 - 始点ベクトル
|
|
16
|
+
* @param {number[] | Float32Array} v2 - 終点ベクトル
|
|
17
|
+
* @param {number} t - 補間係数 (0.0 〜 1.0)
|
|
18
|
+
* @returns {Float32Array} 補間後の新しいベクトル
|
|
19
|
+
* @throws {Error} ベクトルの次元数が異なる場合、またはゼロベクトルが指定された場合にエラーをスローします。
|
|
20
|
+
*/
|
|
21
|
+
declare function slerp(v1: number[] | Float32Array, v2: number[] | Float32Array, t: number): Float32Array;
|
|
22
|
+
/**
|
|
23
|
+
* 内積 (Inner Product)
|
|
24
|
+
* 2つのベクトルの内積を計算します。
|
|
25
|
+
*
|
|
26
|
+
* @param {number[] | Float32Array} v1 - 1つ目のベクトル
|
|
27
|
+
* @param {number[] | Float32Array} v2 - 2つ目のベクトル
|
|
28
|
+
* @returns {number} 2つのベクトルの内積
|
|
29
|
+
* @throws {Error} ベクトルの次元数が異なる場合にエラーをスローします。
|
|
30
|
+
*/
|
|
31
|
+
declare function innerProduct(v1: number[] | Float32Array, v2: number[] | Float32Array): number;
|
|
32
|
+
/**
|
|
33
|
+
* コサイン類似度 (Cosine Similarity)
|
|
34
|
+
* 2つのベクトル間のコサイン類似度 (-1.0 〜 1.0) を計算します。
|
|
35
|
+
*
|
|
36
|
+
* @param {number[] | Float32Array} v1 - 1つ目のベクトル
|
|
37
|
+
* @param {number[] | Float32Array} v2 - 2つ目のベクトル
|
|
38
|
+
* @returns {number} コサイン類似度 (-1.0 〜 1.0)。ゼロベクトルを含む場合は 0 を返します。
|
|
39
|
+
* @throws {Error} ベクトルの次元数が異なる場合にエラーをスローします。
|
|
40
|
+
*/
|
|
41
|
+
declare function cosineSimilarity(v1: number[] | Float32Array, v2: number[] | Float32Array): number;
|
|
42
|
+
/**
|
|
43
|
+
* 直交射影による成分除去 (Orthogonal Rejection / Negative Prompting)
|
|
44
|
+
* baseVector から negativeVector の方向成分を完全に除去した新しいベクトルを返します。
|
|
45
|
+
* 数式: v' = v - (v・u / u・u) * u
|
|
46
|
+
*
|
|
47
|
+
* @param {number[] | Float32Array} baseVector - 元のベクトル (v)
|
|
48
|
+
* @param {number[] | Float32Array} negativeVector - 除去したい成分を持つベクトル (u)
|
|
49
|
+
* @returns {Float32Array} 成分が除去された新しいベクトル (v')
|
|
50
|
+
* @throws {Error} ベクトルの次元数が異なる場合にエラーをスローします。
|
|
51
|
+
*/
|
|
52
|
+
declare function reject(baseVector: number[] | Float32Array, negativeVector: number[] | Float32Array): Float32Array;
|
|
53
|
+
/**
|
|
54
|
+
* 活性化関数の種類を定義します。
|
|
55
|
+
* @typedef {"relu" | "sigmoid" | "tanh"} Activation
|
|
56
|
+
*/
|
|
57
|
+
type Activation = "relu" | "sigmoid" | "tanh";
|
|
58
|
+
/**
|
|
59
|
+
* ベクトルに対して非線形活性化関数を適用します (In-place処理)。
|
|
60
|
+
*
|
|
61
|
+
* @param {Float32Array} vector - 活性化関数を適用する対象のベクトル(直接変更されます)
|
|
62
|
+
* @param {Activation} [activation] - 適用する活性化関数の種類("relu", "sigmoid", "tanh")
|
|
63
|
+
* @returns {void}
|
|
64
|
+
*/
|
|
65
|
+
declare function applyActivationToVector(vector: Float32Array, activation?: Activation): void;
|
|
66
|
+
/**
|
|
67
|
+
* Softmax関数の計算
|
|
68
|
+
* 数値の配列からSoftmax確率分布を計算します(オーバーフロー防止対策済み)。
|
|
69
|
+
*
|
|
70
|
+
* @param {number[]} values - 入力となる数値の配列
|
|
71
|
+
* @returns {number[]} 確率の合計が1.0となるSoftmax関数適用後の配列
|
|
72
|
+
*/
|
|
73
|
+
declare function softmax(values: number[]): number[];
|
|
74
|
+
/**
|
|
75
|
+
* 2次元配列(行列)を指定した次元数で1次元のFloat32Arrayにフラット化します。
|
|
76
|
+
*
|
|
77
|
+
* @param {number[][]} matrix - 2次元配列の行列
|
|
78
|
+
* @param {number} rows - 期待される行数
|
|
79
|
+
* @param {number} cols - 期待される列数
|
|
80
|
+
* @param {string} contextName - エラーメッセージ用のコンテキスト名
|
|
81
|
+
* @returns {Float32Array} フラット化された1次元配列
|
|
82
|
+
* @throws {Error} 次元数が一致しない場合にエラーをスローします。
|
|
83
|
+
*/
|
|
84
|
+
declare function flattenMatrix(matrix: number[][], rows: number, cols: number, contextName?: string): Float32Array;
|
|
85
|
+
/**
|
|
86
|
+
* ベクトルの次元数を検証します。
|
|
87
|
+
*
|
|
88
|
+
* @param {number[] | Float32Array} vector - 検証するベクトル
|
|
89
|
+
* @param {number} expectedDimension - 期待される次元数
|
|
90
|
+
* @param {string} contextName - エラーメッセージ用のコンテキスト名
|
|
91
|
+
* @throws {Error} 次元数が一致しない場合にエラーをスローします。
|
|
92
|
+
*/
|
|
93
|
+
declare function assertDimension(vector: number[] | Float32Array, expectedDimension: number, contextName?: string): void;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 意図(コンテキスト)ごとの変換情報を定義するインターフェース
|
|
97
|
+
* @interface IntentWeights
|
|
98
|
+
*/
|
|
99
|
+
interface IntentWeights {
|
|
100
|
+
/**
|
|
101
|
+
* 空間を歪めるための変換行列 (W)
|
|
102
|
+
* 内部処理と互換性のため、number[][] と 1次元にフラット化された Float32Array の両方をサポートします。
|
|
103
|
+
* @type {number[][] | Float32Array}
|
|
104
|
+
*/
|
|
105
|
+
matrix: number[][] | Float32Array;
|
|
106
|
+
/**
|
|
107
|
+
* 空間を特定の方向へシフトさせるバイアスベクトル (b)
|
|
108
|
+
* @type {number[] | Float32Array}
|
|
109
|
+
*/
|
|
110
|
+
bias: number[] | Float32Array;
|
|
111
|
+
/**
|
|
112
|
+
* 自己アテンション型ブレンド(自動ルーティング)用の代表ベクトル (オプション)
|
|
113
|
+
* @type {number[] | Float32Array | undefined}
|
|
114
|
+
*/
|
|
115
|
+
routingVector?: number[] | Float32Array;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 意図に応じたベクトル空間の動的変形(アフィン変換)を行うアダプタークラス。
|
|
119
|
+
* パフォーマンスのために内部ではすべての配列を Float32Array として扱い、
|
|
120
|
+
* 大規模なバッチ処理には自動的にWASM/SIMDによる最適化を利用します。
|
|
121
|
+
*/
|
|
122
|
+
declare class IntentAdapter {
|
|
123
|
+
private readonly dimension;
|
|
124
|
+
private readonly matrices;
|
|
125
|
+
private readonly biases;
|
|
126
|
+
private readonly routingVectors;
|
|
127
|
+
/**
|
|
128
|
+
* IntentAdapter を初期化します。
|
|
129
|
+
* 行列とバイアスを Float32Array にコンパイルし、キャッシュ局所性と計算速度を最適化します。
|
|
130
|
+
*
|
|
131
|
+
* @constructor
|
|
132
|
+
* @param {Record<string, IntentWeights> | number} intentsOrDimension - 各インテント名と IntentWeights のマッピング、または次元数(空から始める場合)
|
|
133
|
+
* @throws {Error} インテントが一つも提供されておらず、次元数も不明な場合にエラーをスローします。
|
|
134
|
+
*/
|
|
135
|
+
constructor(intentsOrDimension: Record<string, IntentWeights> | number);
|
|
136
|
+
/**
|
|
137
|
+
* 実行時に新しい意図を動的に追加または更新します。
|
|
138
|
+
*
|
|
139
|
+
* @param {string} intentName - 追加する意図の名前
|
|
140
|
+
* @param {IntentWeights} weights - 意図の重み(行列とバイアス、任意でルーティングベクトル)
|
|
141
|
+
* @throws {Error} 行列やバイアスの次元数が現在の次元数と一致しない場合にエラーをスローします。
|
|
142
|
+
* @returns {void}
|
|
143
|
+
*/
|
|
144
|
+
addIntent(intentName: string, weights: IntentWeights): void;
|
|
145
|
+
/**
|
|
146
|
+
* 指定した意図を削除します。
|
|
147
|
+
*
|
|
148
|
+
* @param {string} intentName - 削除する意図の名前
|
|
149
|
+
* @returns {void}
|
|
150
|
+
*/
|
|
151
|
+
removeIntent(intentName: string): void;
|
|
152
|
+
/**
|
|
153
|
+
* 行列とバイアスを用いてベクトルにアフィン変換を適用する内部関数 (x' = W * x + b)
|
|
154
|
+
*
|
|
155
|
+
* @param {Float32Array} matrix - フラット化された変換行列
|
|
156
|
+
* @param {Float32Array} bias - バイアスベクトル
|
|
157
|
+
* @param {number[] | Float32Array} vector - 変換元の入力ベクトル
|
|
158
|
+
* @param {Float32Array} result - 計算結果を格納する配列 (出力先)
|
|
159
|
+
* @returns {void}
|
|
160
|
+
*/
|
|
161
|
+
private applyAffine;
|
|
162
|
+
/**
|
|
163
|
+
* 複数の意図を指定された重みでブレンドした一時的な行列とバイアスを計算します。
|
|
164
|
+
* W_blend = Σ(w_i * W_i), b_blend = Σ(w_i * b_i)
|
|
165
|
+
*
|
|
166
|
+
* @param {Record<string, number>} blendWeights - ブレンドする各意図の重みマップ
|
|
167
|
+
* @returns {{matrix: Float32Array, bias: Float32Array}} ブレンドされた合成行列とバイアス
|
|
168
|
+
* @throws {Error} 指定された意図が見つからない場合にエラーをスローします。
|
|
169
|
+
*/
|
|
170
|
+
private computeBlendedWeights;
|
|
171
|
+
/**
|
|
172
|
+
* 指定された意図(intent)に基づいて、ベースベクトルにアフィン変換を適用します。
|
|
173
|
+
* 数式: x' = W_I * x + b_I
|
|
174
|
+
*
|
|
175
|
+
* @param {number[] | Float32Array} baseVector - 変換元のベクトル
|
|
176
|
+
* @param {string} intent - 適用する意図(intent)の名前
|
|
177
|
+
* @param {Activation} [activation] - (オプション)変換後に適用する非線形活性化関数
|
|
178
|
+
* @returns {Float32Array} 変換後のベクトル
|
|
179
|
+
* @throws {Error} ベクトルの次元数が一致しない場合、または指定された意図が存在しない場合にエラーをスローします。
|
|
180
|
+
*/
|
|
181
|
+
tune(baseVector: number[] | Float32Array, intent: string, activation?: Activation): Float32Array;
|
|
182
|
+
/**
|
|
183
|
+
* 複数のベースベクトルに対して、指定された意図のアフィン変換をバッチ処理で適用します。
|
|
184
|
+
* メモリと条件が許せば、自動的にWASM/SIMDエンジンにオフロードして超高速処理を行います。
|
|
185
|
+
*
|
|
186
|
+
* @param {(number[] | Float32Array)[]} baseVectors - 変換元のベクトルの配列 (2次元配列)
|
|
187
|
+
* @param {string} intent - 適用する意図(intent)の名前
|
|
188
|
+
* @param {Activation} [activation] - (オプション)非線形活性化関数
|
|
189
|
+
* @returns {Float32Array[]} 変換後のベクトルの配列
|
|
190
|
+
* @throws {Error} 指定された意図が存在しない場合や入力ベクトルの次元が不正な場合にエラーをスローします。
|
|
191
|
+
*/
|
|
192
|
+
tuneBatch(baseVectors: (number[] | Float32Array)[], intent: string, activation?: Activation): Float32Array[];
|
|
193
|
+
/**
|
|
194
|
+
* 複数の意図を指定された重みでブレンドし、ベクトルにアフィン変換を適用します。
|
|
195
|
+
*
|
|
196
|
+
* @param {number[] | Float32Array} baseVector - 変換元のベクトル
|
|
197
|
+
* @param {Record<string, number>} blendWeights - 意図の名前と重みのマッピング (例: { riskAnalysis: 0.7, economicImpact: 0.3 })
|
|
198
|
+
* @param {Activation} [activation] - (オプション)非線形活性化関数
|
|
199
|
+
* @returns {Float32Array} 変換後のベクトル
|
|
200
|
+
* @throws {Error} 入力ベクトルの次元が不正な場合、または指定された意図が存在しない場合にエラーをスローします。
|
|
201
|
+
*/
|
|
202
|
+
tuneBlended(baseVector: number[] | Float32Array, blendWeights: Record<string, number>, activation?: Activation): Float32Array;
|
|
203
|
+
/**
|
|
204
|
+
* 複数の意図を指定された重みでブレンドし、複数のベクトルに一括で適用します。
|
|
205
|
+
* これもバッチ処理と同様に自動的にWASM最適化が有効になります。
|
|
206
|
+
*
|
|
207
|
+
* @param {(number[] | Float32Array)[]} baseVectors - 変換元のベクトルの配列
|
|
208
|
+
* @param {Record<string, number>} blendWeights - 意図の名前と重みのマッピング
|
|
209
|
+
* @param {Activation} [activation] - (オプション)非線形活性化関数
|
|
210
|
+
* @returns {Float32Array[]} 変換後のベクトルの配列
|
|
211
|
+
* @throws {Error} ベクトルの次元数が一致しない場合、または指定された意図が存在しない場合にエラーをスローします。
|
|
212
|
+
*/
|
|
213
|
+
tuneBatchBlended(baseVectors: (number[] | Float32Array)[], blendWeights: Record<string, number>, activation?: Activation): Float32Array[];
|
|
214
|
+
/**
|
|
215
|
+
* 自己アテンション型動的ブレンド (Auto-blending / Routing)
|
|
216
|
+
*
|
|
217
|
+
* クエリとして入力されたベースベクトル自体と、各意図の `routingVector`(代表ベクトル)の
|
|
218
|
+
* 類似度を比較し、Softmax関数により最適なブレンド比率を自動で算出・適用します。
|
|
219
|
+
*
|
|
220
|
+
* @param {number[] | Float32Array} baseVector - ユーザーからのクエリベクトルなど
|
|
221
|
+
* @param {Activation} [activation] - (オプション)非線形活性化関数
|
|
222
|
+
* @returns {Float32Array} 動的ブレンドによって変換されたベクトル
|
|
223
|
+
* @throws {Error} ベースベクトルの次元が異なる場合、またはルーティングベクトルが一つも存在しない場合にエラーをスローします。
|
|
224
|
+
*/
|
|
225
|
+
tuneAutoBlended(baseVector: number[] | Float32Array, activation?: Activation): Float32Array;
|
|
226
|
+
/**
|
|
227
|
+
* 学習済みの意図(IntentWeights)を軽量なバイナリ(Uint8Array)としてシリアライズします。
|
|
228
|
+
* これにより、JSONに比べてファイルサイズが劇的に小さくなり、ロードも高速になります。
|
|
229
|
+
*
|
|
230
|
+
* @param {string} intentName - エクスポートする意図の名前
|
|
231
|
+
* @returns {Uint8Array} シリアライズされたバイナリデータ
|
|
232
|
+
*/
|
|
233
|
+
exportIntentBinary(intentName: string): Uint8Array;
|
|
234
|
+
/**
|
|
235
|
+
* バイナリデータ(Uint8Array)から IntentWeights を復元し、
|
|
236
|
+
* そのままアダプターに新しい意図として追加します。
|
|
237
|
+
*
|
|
238
|
+
* @param {string} intentName - 追加する意図の名前
|
|
239
|
+
* @param {Uint8Array} binary - exportIntentBinary で生成されたバイナリデータ
|
|
240
|
+
*/
|
|
241
|
+
importIntentBinary(intentName: string, binary: Uint8Array): void;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* 低ランク適応(LoRA)の重みを定義するインターフェース
|
|
246
|
+
* @interface LoraIntentWeights
|
|
247
|
+
*/
|
|
248
|
+
interface LoraIntentWeights {
|
|
249
|
+
/**
|
|
250
|
+
* 行列A: 次元数を rank から dimension に拡張する行列
|
|
251
|
+
* @type {number[][]}
|
|
252
|
+
*/
|
|
253
|
+
matrixA: number[][];
|
|
254
|
+
/**
|
|
255
|
+
* 行列B: 次元数を dimension から rank に圧縮する行列
|
|
256
|
+
* @type {number[][]}
|
|
257
|
+
*/
|
|
258
|
+
matrixB: number[][];
|
|
259
|
+
/**
|
|
260
|
+
* バイアスベクトル
|
|
261
|
+
* @type {number[]}
|
|
262
|
+
*/
|
|
263
|
+
bias: number[];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* LoraIntentAdapter クラス
|
|
267
|
+
* 低ランク行列(A, B)を使用して高次元ベクトルのアフィン変換をメモリ効率良く行います。
|
|
268
|
+
*/
|
|
269
|
+
declare class LoraIntentAdapter {
|
|
270
|
+
private readonly dimension;
|
|
271
|
+
private readonly rank;
|
|
272
|
+
private readonly matricesA;
|
|
273
|
+
private readonly matricesB;
|
|
274
|
+
private readonly biases;
|
|
275
|
+
/**
|
|
276
|
+
* LoraIntentAdapter を初期化します。
|
|
277
|
+
* 非常に高い次元(例:1536次元など)の埋め込みベクトルに対して、
|
|
278
|
+
* フルマトリックスの代わりに低ランク行列(A, B)を使用することで
|
|
279
|
+
* メモリ使用量と計算量を劇的に削減します。
|
|
280
|
+
*
|
|
281
|
+
* @constructor
|
|
282
|
+
* @param {number} dimension - ベクトル空間の元の次元数(D)
|
|
283
|
+
* @param {number} rank - 低ランク適応における中間ランク数(r)
|
|
284
|
+
* @param {Record<string, LoraIntentWeights>} [intents] - 初期化時に追加するインテントのマップ
|
|
285
|
+
*/
|
|
286
|
+
constructor(dimension: number, rank: number, intents?: Record<string, LoraIntentWeights>);
|
|
287
|
+
/**
|
|
288
|
+
* 実行時に新しいLoRA意図を動的に追加または更新します。
|
|
289
|
+
*
|
|
290
|
+
* @param {string} intentName - 追加または更新する意図の名前
|
|
291
|
+
* @param {LoraIntentWeights} weights - LoRA意図の重み(行列A、行列B、バイアス)
|
|
292
|
+
* @throws {Error} 行列またはバイアスの次元数が一致しない場合にエラーをスローします。
|
|
293
|
+
* @returns {void}
|
|
294
|
+
*/
|
|
295
|
+
addIntent(intentName: string, weights: LoraIntentWeights): void;
|
|
296
|
+
/**
|
|
297
|
+
* 指定したLoRA意図を削除します。
|
|
298
|
+
*
|
|
299
|
+
* @param {string} intentName - 削除する意図の名前
|
|
300
|
+
* @returns {void}
|
|
301
|
+
*/
|
|
302
|
+
removeIntent(intentName: string): void;
|
|
303
|
+
/**
|
|
304
|
+
* LoRAアプローチを用いてベクトルにアフィン変換を適用します。
|
|
305
|
+
* 数式: x' = x + A(Bx) + b
|
|
306
|
+
*
|
|
307
|
+
* @param {number[] | Float32Array} baseVector - 変換元のベクトル
|
|
308
|
+
* @param {string} intent - 適用する意図の名前
|
|
309
|
+
* @returns {Float32Array} LoRA変換と残差結合が適用された新しいベクトル
|
|
310
|
+
* @throws {Error} ベクトルの次元数が一致しない、または指定された意図が存在しない場合にエラーをスローします。
|
|
311
|
+
*/
|
|
312
|
+
tune(baseVector: number[] | Float32Array, intent: string): Float32Array;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* 次元削減/拡張のための射影行列の重みを定義するインターフェース
|
|
317
|
+
* @interface ProjectionWeights
|
|
318
|
+
*/
|
|
319
|
+
interface ProjectionWeights {
|
|
320
|
+
/**
|
|
321
|
+
* 射影変換行列
|
|
322
|
+
* 行数が outDimension、列数が inDimension となります。
|
|
323
|
+
* @type {number[][]}
|
|
324
|
+
*/
|
|
325
|
+
matrix: number[][];
|
|
326
|
+
/**
|
|
327
|
+
* オプションのバイアスベクトル
|
|
328
|
+
* @type {number[] | Float32Array}
|
|
329
|
+
*/
|
|
330
|
+
bias?: number[] | Float32Array;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* ProjectionAdapter クラス
|
|
334
|
+
* PCAやSVDなどで事前計算された射影行列を用いて、ベクトルの次元削減(または拡張)を行います。
|
|
335
|
+
*/
|
|
336
|
+
declare class ProjectionAdapter {
|
|
337
|
+
private readonly inDimension;
|
|
338
|
+
private readonly outDimension;
|
|
339
|
+
private readonly matrices;
|
|
340
|
+
private readonly biases;
|
|
341
|
+
/**
|
|
342
|
+
* ProjectionAdapter を初期化します。
|
|
343
|
+
*
|
|
344
|
+
* @constructor
|
|
345
|
+
* @param {number} inDimension - 変換前の入力ベクトルの次元数
|
|
346
|
+
* @param {number} outDimension - 変換後の出力ベクトルの次元数
|
|
347
|
+
* @param {Record<string, ProjectionWeights>} [projections] - 初期化時に追加する射影設定のマップ
|
|
348
|
+
*/
|
|
349
|
+
constructor(inDimension: number, outDimension: number, projections?: Record<string, ProjectionWeights>);
|
|
350
|
+
/**
|
|
351
|
+
* 実行時に新しい射影設定を動的に追加または更新します。
|
|
352
|
+
*
|
|
353
|
+
* @param {string} name - 追加または更新する射影設定の名前
|
|
354
|
+
* @param {ProjectionWeights} weights - 射影変換行列のデータ
|
|
355
|
+
* @throws {Error} 行列のサイズが指定された次元数と一致しない場合にエラーをスローします。
|
|
356
|
+
* @returns {void}
|
|
357
|
+
*/
|
|
358
|
+
addProjection(name: string, weights: ProjectionWeights): void;
|
|
359
|
+
/**
|
|
360
|
+
* 指定した射影設定を削除します。
|
|
361
|
+
*
|
|
362
|
+
* @param {string} name - 削除する射影設定の名前
|
|
363
|
+
* @returns {void}
|
|
364
|
+
*/
|
|
365
|
+
removeProjection(name: string): void;
|
|
366
|
+
/**
|
|
367
|
+
* ベクトルに射影変換を適用し、次元を変更した新しいベクトルを返します。
|
|
368
|
+
* 数式: y = W * x
|
|
369
|
+
*
|
|
370
|
+
* @param {number[] | Float32Array} baseVector - 変換元の入力ベクトル
|
|
371
|
+
* @param {string} projectionName - 適用する射影設定の名前
|
|
372
|
+
* @returns {Float32Array} 射影変換適用後の新しいベクトル
|
|
373
|
+
* @throws {Error} ベクトルの次元数が inDimension と一致しない場合、または射影設定が存在しない場合にエラーをスローします。
|
|
374
|
+
*/
|
|
375
|
+
project(baseVector: number[] | Float32Array, projectionName: string): Float32Array;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* 基本的な学習オプションを定義するインターフェース。
|
|
380
|
+
* 勾配降下法における各種ハイパーパラメータを設定します。
|
|
381
|
+
*/
|
|
382
|
+
interface BaseTrainingOptions {
|
|
383
|
+
/** 学習率 (Learning Rate)。1ステップで重みをどれだけ更新するか。デフォルト: 0.01 */
|
|
384
|
+
learningRate?: number;
|
|
385
|
+
/** 学習のエポック数 (データセット全体を何回繰り返して学習するか)。デフォルト: 100 */
|
|
386
|
+
epochs?: number;
|
|
387
|
+
/** L2正則化の強さ。過学習を防ぐために使用します。デフォルト: 0.001 */
|
|
388
|
+
regularization?: number;
|
|
389
|
+
/** モーメンタム (Momentum)。前回の更新量をどれだけ引き継ぐか。デフォルト: 0.9 */
|
|
390
|
+
momentum?: number;
|
|
391
|
+
/** trueの場合、事前に数エポックのテストランを行い、最適な学習率を自動探索します。デフォルト: false */
|
|
392
|
+
autoTune?: boolean;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* 確率的勾配降下法 (SGD + Momentum) を用いた学習のための共通基底クラス。
|
|
396
|
+
*
|
|
397
|
+
* @template TExample 学習に用いるデータペアの型 (入力と理想の出力のペアなど)
|
|
398
|
+
* @template TResult 最終的に学習結果として出力される重み (行列やバイアス) の型
|
|
399
|
+
*/
|
|
400
|
+
declare abstract class BaseTrainer<TExample, TResult> {
|
|
401
|
+
/** 学習用サンプルの配列 */
|
|
402
|
+
protected examples: TExample[];
|
|
403
|
+
/** 入力ベクトル(ソース)の次元数 */
|
|
404
|
+
protected abstract get sourceDimension(): number;
|
|
405
|
+
/** 出力ベクトル(ターゲット)の次元数 */
|
|
406
|
+
protected abstract get targetDimension(): number;
|
|
407
|
+
/**
|
|
408
|
+
* サンプルデータから、学習アルゴリズムに渡すソースベクトルとターゲットベクトルを抽出します。
|
|
409
|
+
* @param {TExample} example 学習サンプルのデータ
|
|
410
|
+
* @returns {{ source: number[] | Float32Array; target: number[] | Float32Array }}
|
|
411
|
+
*/
|
|
412
|
+
protected abstract getInputs(example: TExample): {
|
|
413
|
+
source: number[] | Float32Array;
|
|
414
|
+
target: number[] | Float32Array;
|
|
415
|
+
};
|
|
416
|
+
/**
|
|
417
|
+
* 学習済みの1次元行列とバイアスを、最終的な結果の型 (TResult) に変換します。
|
|
418
|
+
* @param {Float32Array} flatMatrix 学習済みのフラット化された行列
|
|
419
|
+
* @param {Float32Array} bias 学習済みのバイアスベクトル
|
|
420
|
+
* @returns {TResult} 変換された重みデータ
|
|
421
|
+
*/
|
|
422
|
+
protected abstract toWeights(flatMatrix: Float32Array, bias: Float32Array): TResult;
|
|
423
|
+
/**
|
|
424
|
+
* 学習用のサンプルデータを追加します。
|
|
425
|
+
* 次元数がソース/ターゲットと一致しない場合はエラーとなります。
|
|
426
|
+
*
|
|
427
|
+
* @param {TExample} example 追加するサンプルデータ
|
|
428
|
+
* @throws {Error} 次元数が一致しない場合にスローされます。
|
|
429
|
+
*/
|
|
430
|
+
addExample(example: TExample): void;
|
|
431
|
+
/**
|
|
432
|
+
* 追加されたサンプルデータを用いて学習を実行します。
|
|
433
|
+
* 指定されたエポック数だけ SGD + Momentum によるパラメータ更新を行います。
|
|
434
|
+
* パフォーマンスのため、可能であれば内部で WebAssembly (WASM) を使用します。
|
|
435
|
+
*
|
|
436
|
+
* @param {BaseTrainingOptions} [options={}] 学習のハイパーパラメータオプション
|
|
437
|
+
* @returns {Promise<TResult>} 学習済みの重みを返します。
|
|
438
|
+
* @throws {Error} サンプルデータが追加されていない場合にスローされます。
|
|
439
|
+
*/
|
|
440
|
+
train(options?: BaseTrainingOptions): Promise<TResult>;
|
|
441
|
+
/**
|
|
442
|
+
* サンプルデータに対する短時間のテストランを行い、最も損失(Loss)が小さくなる最適な学習率を自動探索します。
|
|
443
|
+
* `options.autoTune` が true の場合に `train` メソッド内で自動的に呼び出されます。
|
|
444
|
+
*
|
|
445
|
+
* @param {BaseTrainingOptions} options 現在の学習オプション
|
|
446
|
+
* @returns {number} 探索された最適な学習率
|
|
447
|
+
*/
|
|
448
|
+
protected findBestLearningRate(options: BaseTrainingOptions): number;
|
|
449
|
+
/**
|
|
450
|
+
* SGD + Momentum アルゴリズムによる1ステップのパラメータ更新を実行します。
|
|
451
|
+
* In-place (破壊的) に `matrix` と `bias` を更新します。
|
|
452
|
+
*
|
|
453
|
+
* @param {Float32Array} matrix 現在の変換行列 (1次元フラット配列)
|
|
454
|
+
* @param {Float32Array} bias 現在のバイアスベクトル
|
|
455
|
+
* @param {Float32Array} vMatrix 行列のモメンタム (速度)
|
|
456
|
+
* @param {Float32Array} vBias バイアスのモメンタム (速度)
|
|
457
|
+
* @param {number[] | Float32Array} x 入力ベクトル (ソース)
|
|
458
|
+
* @param {number[] | Float32Array} y 理想の出力ベクトル (ターゲット)
|
|
459
|
+
* @param {number} lr 学習率
|
|
460
|
+
* @param {number} reg L2正則化係数
|
|
461
|
+
* @param {number} momentum モメンタム係数
|
|
462
|
+
*/
|
|
463
|
+
protected sgdMomentumStep(matrix: Float32Array, bias: Float32Array, vMatrix: Float32Array, vBias: Float32Array, x: number[] | Float32Array, y: number[] | Float32Array, lr: number, reg: number, momentum: number): void;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* 学習データのペア(ベースのクエリベクトルと、目標となる結果ベクトル)
|
|
468
|
+
* @interface TrainingExample
|
|
469
|
+
*/
|
|
470
|
+
interface TrainingExample {
|
|
471
|
+
/** 入力ベクトル(元の検索クエリなどの埋め込み表現) */
|
|
472
|
+
input: number[] | Float32Array;
|
|
473
|
+
/** 目標ベクトル(ユーザーが理想とする結果の埋め込み表現) */
|
|
474
|
+
target: number[] | Float32Array;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* 学習時の最適化オプション
|
|
478
|
+
*/
|
|
479
|
+
interface TrainingOptions extends BaseTrainingOptions {
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* サンプルデータから最適な `IntentWeights` (行列Wとバイアスb) を
|
|
483
|
+
* 確率的勾配降下法 (SGD + Momentum) により自動学習するトレーナークラス。
|
|
484
|
+
* 内部で Float32Array のフラット化を行い、極限のパフォーマンスを引き出します。
|
|
485
|
+
*
|
|
486
|
+
* @example
|
|
487
|
+
* const trainer = new IntentTrainer(1536);
|
|
488
|
+
* trainer.addExample({ input: [...], target: [...] });
|
|
489
|
+
* const weights = await trainer.train({ autoTune: true });
|
|
490
|
+
*/
|
|
491
|
+
declare class IntentTrainer extends BaseTrainer<TrainingExample, IntentWeights> {
|
|
492
|
+
private dimension;
|
|
493
|
+
/**
|
|
494
|
+
* IntentTrainer のインスタンスを作成します。
|
|
495
|
+
* @param {number} dimension ベクトルの次元数(入力・出力ともに同じ次元数となります)
|
|
496
|
+
*/
|
|
497
|
+
constructor(dimension: number);
|
|
498
|
+
protected get sourceDimension(): number;
|
|
499
|
+
protected get targetDimension(): number;
|
|
500
|
+
protected getInputs(example: TrainingExample): {
|
|
501
|
+
source: number[] | Float32Array;
|
|
502
|
+
target: number[] | Float32Array;
|
|
503
|
+
};
|
|
504
|
+
protected toWeights(flatMatrix: Float32Array, bias: Float32Array): IntentWeights;
|
|
505
|
+
/**
|
|
506
|
+
* オンライン学習 (フィードバックループ) 用のメソッド。
|
|
507
|
+
* ユーザーのクリックなどの 1 回のフィードバックからリアルタイムに重みを微調整します。
|
|
508
|
+
*
|
|
509
|
+
* @param {IntentWeights} currentWeights - 現在の重み
|
|
510
|
+
* @param {number[] | Float32Array} input - 検索されたクエリベクトル
|
|
511
|
+
* @param {number[] | Float32Array} target - クリックされた(理想の)ドキュメントのベクトル
|
|
512
|
+
* @param {number} learningRate - 1ステップの学習率 (デフォルト: 0.01)
|
|
513
|
+
* @param {number} regularization - L2正則化の強さ (デフォルト: 0.001)
|
|
514
|
+
* @returns {IntentWeights} 微調整された新しい重み
|
|
515
|
+
*/
|
|
516
|
+
updateOnline(currentWeights: IntentWeights, input: number[] | Float32Array, target: number[] | Float32Array, learningRate?: number, regularization?: number): Promise<IntentWeights>;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* 移行用の学習データペア(旧モデルのベクトル -> 新モデルのベクトル)
|
|
521
|
+
* @interface MigrationExample
|
|
522
|
+
*/
|
|
523
|
+
interface MigrationExample {
|
|
524
|
+
/** 移行元のベクトル (例: ada-002の出力) */
|
|
525
|
+
source: number[] | Float32Array;
|
|
526
|
+
/** 移行先のベクトル (例: text-embedding-3-smallの出力) */
|
|
527
|
+
target: number[] | Float32Array;
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* 学習時の最適化オプション
|
|
531
|
+
*/
|
|
532
|
+
interface MigrationOptions extends BaseTrainingOptions {
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* 異なる埋め込みモデル間(例:1536次元から512次元へ)の
|
|
536
|
+
* ベクトル空間を翻訳する行列 (ProjectionWeights) を自動学習するトレーナークラス。
|
|
537
|
+
*
|
|
538
|
+
* 次元数の異なるベクトル表現をマッピングするための射影行列を学習します。
|
|
539
|
+
*
|
|
540
|
+
* @example
|
|
541
|
+
* const trainer = new MigrationTrainer(1536, 512);
|
|
542
|
+
* trainer.addExample({ source: [...], target: [...] });
|
|
543
|
+
* const projectionWeights = await trainer.train({ epochs: 200 });
|
|
544
|
+
*/
|
|
545
|
+
declare class MigrationTrainer extends BaseTrainer<MigrationExample, ProjectionWeights> {
|
|
546
|
+
private _sourceDimension;
|
|
547
|
+
private _targetDimension;
|
|
548
|
+
/**
|
|
549
|
+
* @param {number} sourceDimension 移行元の次元数 (例: ada-002なら1536)
|
|
550
|
+
* @param {number} targetDimension 移行先の次元数 (例: text-embedding-3-smallなら512)
|
|
551
|
+
*/
|
|
552
|
+
constructor(sourceDimension: number, targetDimension: number);
|
|
553
|
+
protected get sourceDimension(): number;
|
|
554
|
+
protected get targetDimension(): number;
|
|
555
|
+
protected getInputs(example: MigrationExample): {
|
|
556
|
+
source: number[] | Float32Array;
|
|
557
|
+
target: number[] | Float32Array;
|
|
558
|
+
};
|
|
559
|
+
protected toWeights(flatMatrix: Float32Array, bias: Float32Array): ProjectionWeights;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* 外部のベクトルデータベース(pgvector, Pinecone, Redisなど)へ
|
|
564
|
+
* ワープ変換後のベクトルを保存・検索するためのアダプター/ユーティリティクラス
|
|
565
|
+
*/
|
|
566
|
+
declare class VectorDBAdapter {
|
|
567
|
+
/**
|
|
568
|
+
* PostgreSQL (pgvector) 用のクエリ文字列表現を生成します。
|
|
569
|
+
* INSERT や SELECT の際に使用できる形式です。
|
|
570
|
+
*
|
|
571
|
+
* @example
|
|
572
|
+
* const sql = `SELECT * FROM items ORDER BY embedding <-> '${VectorDBAdapter.toPgvector(warpedVector)}' LIMIT 5`;
|
|
573
|
+
*
|
|
574
|
+
* @param {number[] | Float32Array} vector ワープ変換後のベクトル
|
|
575
|
+
* @returns {string} `'[0.1, 0.2, 0.3]'` のような文字列表現
|
|
576
|
+
*/
|
|
577
|
+
static toPgvector(vector: number[] | Float32Array): string;
|
|
578
|
+
/**
|
|
579
|
+
* Pinecone 用のクエリオブジェクトを生成します。
|
|
580
|
+
* Pinecone クライアントに直接渡せる形式のオブジェクトを返します。
|
|
581
|
+
*
|
|
582
|
+
* @example
|
|
583
|
+
* const query = VectorDBAdapter.toPineconeQuery(warpedVector, 10, { genre: "comedy" });
|
|
584
|
+
* await index.query(query);
|
|
585
|
+
*
|
|
586
|
+
* @param {number[] | Float32Array} vector 検索クエリベクトル
|
|
587
|
+
* @param {number} topK 取得する件数 (デフォルト: 10)
|
|
588
|
+
* @param {Record<string, any>} [filter] メタデータフィルタ(オプション)
|
|
589
|
+
* @returns {Record<string, any>} Pineconeのqueryメソッド用オブジェクト
|
|
590
|
+
*/
|
|
591
|
+
static toPineconeQuery(vector: number[] | Float32Array, topK?: number, filter?: Record<string, any>): Record<string, any>;
|
|
592
|
+
/**
|
|
593
|
+
* Redis (RediSearch) のベクトルフィールド用に、
|
|
594
|
+
* Float32Array をバイナリ(Uint8Array)に変換します。
|
|
595
|
+
* Node.js環境では Buffer.from() を使って Buffer に変換して渡してください。
|
|
596
|
+
*
|
|
597
|
+
* @example
|
|
598
|
+
* const blob = Buffer.from(VectorDBAdapter.toRedis(warpedVector));
|
|
599
|
+
* await redis.call('FT.SEARCH', 'idx', '*=>[KNN 5 @embedding $BLOB]', 'PARAMS', '2', 'BLOB', blob, 'DIALECT', '2');
|
|
600
|
+
*
|
|
601
|
+
* @param {number[] | Float32Array} vector ワープ変換後のベクトル
|
|
602
|
+
* @returns {Uint8Array} バイナリデータ (Float32のバイト表現)
|
|
603
|
+
*/
|
|
604
|
+
static toRedis(vector: number[] | Float32Array): Uint8Array;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
export { type Activation, IntentAdapter, IntentTrainer, type IntentWeights, LoraIntentAdapter, type LoraIntentWeights, type MigrationExample, type MigrationOptions, MigrationTrainer, ProjectionAdapter, type ProjectionWeights, type TrainingExample, type TrainingOptions, VectorDBAdapter, applyActivationToVector, assertDimension, cosineSimilarity, flattenMatrix, innerProduct, normalize, reject, slerp, softmax };
|