File size: 1,558 Bytes
7ed86c3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | """Pack OGA sentences into char-arm model batches, token-aligned.
char arm: tagger.dataset.encode_sentence (raw FORM encoding) -> Stoicheia (word-pooled).
Skips exactly the tokens tagger.dataset.encode_word() rejects (no Greek letters).
NOTE: this release drops the lemma-arm packing helpers (LemmaVocabMap, tag_sentences,
pack_lemma_rows, batch_lemma) that fed a LemmaDiff-grc encoder — LemmaDiff-grc is a separate,
unpublished side-repo. See parser/model.py's module docstring for the rationale.
"""
from __future__ import annotations
import numpy as np
import torch
from tagger.dataset import encode_sentence, batch_rows as char_batch_rows, pack_rows as char_pack_rows
def n_encodable(sent):
return sum(1 for t in sent.tokens if encode_sentence_word_ok(t.form))
def encode_sentence_word_ok(form):
from tagger.dataset import encode_word
return encode_word(form) is not None
# ---------------------------------------------------------------- char arm (reuse tagger's)
def pack_char_rows(sents, T=2048, W=384):
encs = [encode_sentence(s) for s in sents]
pairs = [(i, e) for i, e in enumerate(encs) if e is not None]
rows, trunc = char_pack_rows([e for _, e in pairs], T, W)
return rows, pairs, trunc
def batch_char(rows, T, W, device):
b = char_batch_rows(rows, T, W)
return {k: (v.to(device) if torch.is_tensor(v) else v) for k, v in b.items()}, b["slots"]
# lemma-arm packing helpers (LemmaVocabMap, tag_sentences, pack_lemma_rows, batch_lemma) removed
# for this release — see module docstring above.
|