Embeddings batchencoder - CyrilB1531/lodestar GitHub Wiki

Home › Embeddings › Tokenization

BatchEncoder

Strings in, a padded rectangular batch with an attention mask out — what a model actually wants.

public sealed class BatchEncoder

Constructor — BatchEncoder(ISubwordTokenizer tokenizer, EncodingOptions? options = null). The template's special tokens are resolved against the tokenizer's vocabulary here, so a mismatch is refused at construction rather than encoded into something the model misreads. It throws ArgumentNullException when tokenizer is null, and ArgumentException when the vocabulary lacks one of the template's tokens, the template or one of its members is null, BatchSize or MaxLength is below 1, Truncation is not a declared strategy, or MaxLength leaves no room for the template's tokens.

Properties — Options is the EncodingOptions it was built with.

Example — two texts of different lengths, padded to one rectangle.

using Lodestar.Embeddings.Tokenization;

var vocab = new Dictionary<string, int>(StringComparer.Ordinal)
{
    ["[UNK]"] = 0, ["token"] = 1, ["##ize"] = 2, ["text"] = 3,
    ["[CLS]"] = 4, ["[SEP]"] = 5, ["[PAD]"] = 6,
};
var tokenizer = new WordPieceTokenizer(
    vocab, unkToken: "[UNK]", continuationPrefix: "##", maxCharsPerWord: 100, lowercase: true);

var encoder = new BatchEncoder(tokenizer, new EncodingOptions
{
    Template = SpecialTokenTemplate.Bert,
    MaxLength = 8,
});

EncodedBatch batch = encoder.EncodeBatch(["text", "tokenize text"]);

int rows = batch.Count;             // => 2
int width = batch.SequenceLength;   // => 5

Remarks — the batch is as wide as its longest sequence, and the shorter ones are padded to match. That is what makes it a rectangle a model can consume, and it is why EncodedBatch.Lengths exists: the padding has to be ignored downstream, and the attention mask is how the model is told to.

Asking for a template the vocabulary cannot satisfy throws at construction:

The tokenizer's vocabulary has no token '[CLS]', which the special-token template requires.

That is deliberate. The alternative — encoding without the token, or with the unknown token in its place — produces a batch the model accepts and misinterprets, which is the failure that costs a day.

Applies to — net10.0, netstandard2.0.

See also — EncodingOptions, SpecialTokenTemplate, EncodedBatch.

Members

Member What it does
BatchEncoder.Encode One string to ids, template applied.
BatchEncoder.EncodeBatch Many strings to one padded rectangle.
BatchEncoder.EncodeAll Every text as its own row of ids, unpadded.
BatchEncoder.Pad A window of encoded rows, laid out as one rectangle.