-
Notifications
You must be signed in to change notification settings - Fork 0
Embeddings pooler meanpoolandnormalizebatch
Mean-pools then L2-normalizes every sequence of a padded batch.
public static float[][] MeanPoolAndNormalizeBatch(ReadOnlySpan<float> tokenEmbeddings, int batchSize, int seqLen, int dim, ReadOnlySpan<long> attentionMask)Parameters — tokenEmbeddings is row-major [batchSize × seqLen × dim] and attentionMask is row-major
[batchSize × seqLen]. batchSize is the number of sequences, seqLen the padded length of
every one, dim the embedding dimension.
Returns — float[][], one unit-length vector per sequence, in batch order.
Exceptions — ArgumentException when the spans do not match the shape the other arguments declare.
Example — a whole forward pass turned into sentence embeddings.
using Lodestar.Embeddings.Pooling;
float[] tokens = { 3f, 4f, 99f, 99f, 0f, 5f, 0f, 5f }; // 2 sequences, 2 positions, dim 2
long[] mask = { 1L, 0L, 1L, 1L };
float[][] embeddings = Pooler.MeanPoolAndNormalizeBatch(tokens, batchSize: 2, seqLen: 2, dim: 2, mask);
float first = embeddings[0][0]; // => 0.6
float second = embeddings[1][1]; // => 1Remarks — What sentence-transformers' encode does to one forward pass, and the call an ONNX batch should
land in. Each sequence is pooled against its own slice of the mask and normalized on its own, so
neither the padding nor the length of a neighbour reaches a vector.
The second sequence here is the degenerate-looking case that is not: both its positions are real
and identical, so the mean is (0, 5) and normalizing gives (0, 1) — length discarded,
direction kept, which is the entire purpose.
The batched counterpart of MeanPoolAndNormalize.
Applies to — net10.0, netstandard2.0.
See also — Pooler.MeanPoolAndNormalize,
Pooler.MeanPoolBatch, Pooler.
- 0001-target-framework
- 0002-unicode-comparison-unit
- 0003-provenance-and-licensing
- 0004-levenshtein-myers-backlog
- 0005-hamming-jellyfish-divergence
- 0006-ratcliff-autojunk
- 0007-metaphone-scope
- 0008-italian-enza-nltk-divergence
- 0009-sample-consumes-a-local-feed
- 0010-stop-word-list-provenance
- 0011-persistence-format
- 0012-per-package-versioning
- 0013-sentencepiece-parity-scope
- 0014-precompiled-normalizer
- 0015-sonar-rules-in-the-build
- 0016-metrics-package-placement
- 0017-bpe-parity-scope
- 0018-multiclass-roc-auc-parallelism-is-opt-in
- 0019-the-net-analysers-run-in-the-build-too
- 0020-normalize-is-a-projection-not-a-parameter
- 0021-multioutput-is-a-method-not-an-enum
- 0022-added-token-matching-flags
- 0023-byte-level-decode-substitutes
- 0024-weighted-median-averages-within-scikit-learns-epsilon
- 0025-quickselect-replaces-a-full-sort-for-the-median
- 0026-r2-and-explainedvariance-split-their-undefined-cases-differently
- 0027-r2-and-explainedvariance-vectorize-only-a-single-output
- 0028-log1p-is-kahans-identity-not-math-log-1-plus-x
- 0029-balanced-accuracy-adjusted-is-left-to-ieee-754-at-the-edge
- 0030-cohen-kappa-keeps-scikit-learns-expected-matrix-orientation
- 0031-nosamplecorrect-mirrors-numpys-float64-upcast
- 0032-fbeta-substitutes-tp-predicted-and-support-algebraically
- 0033-compensated-sum-is-neumaiers-variant
- 0034-dropout-is-refused-for-want-of-a-user
- 0035-a-null-pre-split-is-removed-with-invert-not-isolated
- 0036-a-member-may-ship-without-an-oracle-if-it-says-so
- 0037-the-guards-run-before-the-commit
- 0038-the-gate-confronts-an-exception-tag-with-the-page-that-documents-it
- 0039-mutual-information-returns-zero-on-an-empty-input
- 0040-a-curve-is-a-sealed-class-per-curve
- 0041-one-sample-file-per-public-class
- 0042-phonetic-encoders-refuse-a-null-word
- 0043-the-equality-table-is-sized-to-the-pattern
- 0044-compression-belongs-to-the-caller
- 0045-a-console-call-carries-its-reason-on-the-line
- 0046-check-adr-immutable-runs-in-ci-only
- 0047-one-gate-per-kernel-not-one-per-alphabet
- 0048-the-gate-depends-on-the-kernel-and-the-alphabet
- 0049-two-gates-per-kernel-tested-where-the-width-is-known
- 0050-the-sentencepiece-bpe-lineage-stays-a-bpe-model
- benchmark_latest
- decisions
- equivalence
- matplotlib
- migration
- nightly_run
- numpy
- pandas
- performance
- pytorch
- seaborn
- sklearn
- statsmodels