Корректоры
Символьный корректор текста для постобработки результатов OCR.
CharLM
- class manuscript.correctors.CharLM(weights=None, vocab=None, lexicon=None, device=None, mask_threshold=0.05, apply_threshold=0.95, max_edits=2, min_word_len=4, max_len=32, **kwargs)[исходный код]
Базовые классы:
BaseModelСимвольная языковая модель-корректор на базе ONNX Runtime.
CharLM использует маскированную языковую модель на основе Transformer для исправления OCR-ошибок на уровне символов. Анализирует уверенность в символах и применяет исправления на основе выученных шаблонов замен.
- Параметры:
weights (str or Path, optional) – Путь или идентификатор для весов модели ONNX. Поддерживает: локальный путь, HTTP/HTTPS URL, GitHub release, Google Drive, имя пресета (
"prereform_charlm_g1"или"modern_charlm_g1"),None— автозагрузка пресета по умолчанию (prereform_charlm_g1)vocab (str or Path, optional) – Путь к JSON-файлу словаря. Если None, определяется из расположения весов.
lexicon (str, Path, or set, optional) – Список слов для валидации по словарю. Поддерживает: локальный путь, имя пресета (
"prereform_words"или"modern_words"), Python set,None— автозагрузка лексикона для пресета модели (prereform_words для prereform_charlm_g1, modern_words для modern_charlm_g1)device ({"cuda", "cpu"}, optional) – Вычислительное устройство. По умолчанию определяется автоматически.
mask_threshold (float, optional) – Порог уверенности, ниже которого символы рассматриваются для исправления. По умолчанию 0.05.
apply_threshold (float, optional) – Минимальная уверенность модели для применения исправления. По умолчанию 0.95.
max_edits (int, optional) – Максимальное количество правок на слово. По умолчанию 2.
min_word_len (int, optional) – Минимальная длина слова для попытки исправления. По умолчанию 4.
**kwargs – Дополнительные опции конфигурации.
max_len (int)
Примеры
>>> from manuscript.correctors import CharLM >>> corrector = CharLM() >>> corrected_page = corrector.predict(page)
Методы
__call__(*args, **kwargs)Вызов объекта как функции.
export(weights_path, vocab_path, output_path)Экспорт модели CharLM из PyTorch в формат ONNX.
predict(page)Применить символьное исправление к странице Page.
runtime_providers()Получить провайдеры выполнения ONNX Runtime в зависимости от устройства.
train([words_path, text_path, pairs_path, ...])Обучить символьную языковую модель CharLM.
- default_weights_name: Optional[str] = 'prereform_charlm_g1'
- pretrained_registry: Dict[str, str] = {'modern_charlm_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/modern_charlm_g1.onnx', 'prereform_charlm_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/prereform_charlm_g1.onnx'}
- vocab_registry = {'modern_charlm_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/modern_charlm_g1.json', 'prereform_charlm_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/prereform_charlm_g1.json'}
- lexicon_registry = {'modern_words': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/modern_words.txt', 'prereform_words': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/prereform_words.txt'}
- default_lexicon_for_model = {'modern_charlm_g1': 'modern_words', 'prereform_charlm_g1': 'prereform_words'}
- __init__(weights=None, vocab=None, lexicon=None, device=None, mask_threshold=0.05, apply_threshold=0.95, max_edits=2, min_word_len=4, max_len=32, **kwargs)[исходный код]
- predict(page)[исходный код]
Применить символьное исправление к странице Page.
- static train(words_path=None, text_path=None, pairs_path=None, charset_path=None, *, exp_dir='exp_charlm', max_words=1500000, max_pairs_edits=3, max_len=32, emb_size=192, n_layers=8, n_heads=6, ffn_size=1024, dropout=0.1, batch_size=256, accumulation_steps=2, use_amp=True, compile_model=False, epochs=50, lr=0.001, weight_decay=0.01, grad_clip=1.0, min_len=3, mask_prob=0.3, span_min=1, span_max=3, spans_min=1, spans_max=2, pairs_ratio=0.8, eval_ratio=0.01, seed=42, checkpoint=None, **extra_config)[исходный код]
Обучить символьную языковую модель CharLM.
- Параметры:
words_path (str or Path, optional) – Путь к файлу слов (одно слово на строку).
text_path (str or Path, optional) – Путь к текстовому файлу для n-граммового датасета.
pairs_path (str or Path, optional) – Путь к CSV-файлу с парами неправильный/правильный.
charset_path (str or Path) – Путь к файлу набора символов (допустимые символы).
exp_dir (str, optional) – Директория эксперимента. По умолчанию «exp_charlm».
max_words (int, optional) – Максимальное количество слов из файла. По умолчанию 1_500_000.
max_pairs_edits (int, optional) – Максимальное количество символьных правок в парах. По умолчанию 3.
max_len (int, optional) – Максимальная длина последовательности. По умолчанию 32.
emb_size (int, optional) – Размер эмбеддингов. По умолчанию 192.
n_layers (int, optional) – Количество слоёв трансформера. По умолчанию 8.
n_heads (int, optional) – Количество голов внимания. По умолчанию 6.
ffn_size (int, optional) – Размер feed-forward сети. По умолчанию 1024.
dropout (float, optional) – Коэффициент dropout. По умолчанию 0.1.
batch_size (int, optional) – Размер батча. По умолчанию 256.
accumulation_steps (int, optional) – Шаги накопления градиента. По умолчанию 2.
use_amp (bool, optional) – Использовать автоматическую смешанную точность (AMP). По умолчанию True.
compile_model (bool, optional) – Использовать torch.compile для ускорения обучения. По умолчанию False.
epochs (int, optional) – Количество эпох. По умолчанию 50.
lr (float, optional) – Скорость обучения. По умолчанию 1e-3.
weight_decay (float, optional) – Затухание весов. По умолчанию 0.01.
grad_clip (float, optional) – Отсечение градиента. По умолчанию 1.0.
min_len (int, optional) – Минимальная длина слова. По умолчанию 3.
mask_prob (float, optional) – Вероятность использования span masking. По умолчанию 0.3.
span_min (int, optional) – Минимальная длина span для маскирования. По умолчанию 1.
span_max (int, optional) – Максимальная длина span для маскирования. По умолчанию 3.
spans_min (int, optional) – Минимальное количество span. По умолчанию 1.
spans_max (int, optional) – Максимальное количество span. По умолчанию 2.
pairs_ratio (float, optional) – Соотношение OCR-пар в смешанном датасете (0.8 = 80% пар, 20% n-грамм). По умолчанию 0.8.
eval_ratio (float, optional) – Доля валидационного набора. По умолчанию 0.01.
seed (int, optional) – Случайное зерно. По умолчанию 42.
checkpoint (str, optional) – Путь к чекпоинту для продолжения обучения.
**extra_config – Дополнительные опции конфигурации.
- Результат:
Путь к финальному чекпоинту.
- Тип результата:
- static export(weights_path, vocab_path, output_path, max_len=32, emb_size=192, n_layers=8, n_heads=6, ffn_size=1024, opset_version=14, simplify=True)[исходный код]
Экспорт модели CharLM из PyTorch в формат ONNX.
- Параметры:
weights_path (str or Path) – Путь к чекпоинту PyTorch (.pt файл).
vocab_path (str or Path) – Путь к JSON-файлу словаря.
output_path (str or Path) – Путь для сохранения модели ONNX.
max_len (int, optional) – Максимальная длина последовательности. По умолчанию 32.
emb_size (int, optional) – Размер эмбеддингов. По умолчанию 192.
n_layers (int, optional) – Количество слоёв трансформера. По умолчанию 8.
n_heads (int, optional) – Количество голов внимания. По умолчанию 6.
ffn_size (int, optional) – Размер feed-forward сети. По умолчанию 1024.
opset_version (int, optional) – Версия opset ONNX. По умолчанию 14.
simplify (bool, optional) – Применить упрощение ONNX. По умолчанию True.
- Тип результата:
Обзор
CharLM — это символьный корректор на основе маскированной языковой модели, использующий архитектуру Transformer для исправления OCR-ошибок. Анализирует контекст на уровне символов и применяет исправления на основе выученных паттернов.
Ключевые возможности:
Исправление на символьном уровне на основе Transformer
Настраиваемые пороги уверенности
Поддержка пользовательских словарей и лексиконов
Инференс через ONNX Runtime для быстрого исправления
Опциональная фильтрация лексиконом для сохранения известных слов
Доступные пресеты
Доступны следующие предобученные модели:
Имя пресета |
Описание |
|---|---|
|
Дореформенный русский текст (по умолчанию) |
|
Современный русский текст |
Быстрый пример
Используйте create_page_from_text для быстрой проверки исправления текста:
from manuscript.utils import create_page_from_text
from manuscript.correctors import CharLM
# Create page from text with potential OCR errors
page = create_page_from_text(["Привѣтъ міръ", "Тестовая строка"])
# Apply correction (using default prereform model)
corrector = CharLM()
corrected = corrector.predict(page)
# Extract corrected text
for line in corrected.blocks[0].lines:
text = " ".join(w.text for w in line.words)
print(text)
Базовое использование
from manuscript import Pipeline
from manuscript.correctors import CharLM
# Create corrector with default preset
corrector = CharLM()
# Create corrector with specific preset
corrector = CharLM(weights="modern_charlm_g1")
# Use in pipeline
pipeline = Pipeline(corrector=corrector)
result = pipeline.predict("document.jpg")
Расширенная конфигурация
from manuscript.correctors import CharLM
# Fine-tune correction behavior
corrector = CharLM(
weights="prereform_charlm_g1",
mask_threshold=0.05, # Characters with confidence below this are corrected
apply_threshold=0.95, # Model must be this confident to apply correction
max_edits=2, # Maximum edits per word
min_word_len=4, # Minimum word length to attempt correction
device="cuda" # Use GPU for inference
)
Использование пользовательского лексикона
Вы можете предоставить лексикон (список слов) для предотвращения исправления известных слов:
from manuscript.correctors import CharLM
# From preset
corrector = CharLM(
weights="prereform_charlm_g1",
lexicon="prereform_words" # Use preset lexicon
)
# From file
corrector = CharLM(
weights="prereform_charlm_g1",
lexicon="path/to/words.txt"
)
# From set
my_words = {"слово1", "слово2", "слово3"}
corrector = CharLM(
weights="prereform_charlm_g1",
lexicon=my_words
)
Обучение пользовательской модели
Вы можете обучить CharLM на своих данных:
from manuscript.correctors import CharLM
# Train with OCR pairs dataset
checkpoint_path = CharLM.train(
pairs_path="ocr_pairs.csv", # CSV with incorrect,correct columns
charset_path="charset.txt", # Allowed characters
exp_dir="my_charlm_exp",
epochs=50,
batch_size=256,
)
# Train with word list (self-supervised)
checkpoint_path = CharLM.train(
words_path="words.txt", # One word per line
charset_path="charset.txt",
exp_dir="my_charlm_exp",
)
Экспорт в ONNX
from manuscript.correctors import CharLM
# Export trained model to ONNX
CharLM.export(
weights_path="exp/checkpoints/charlm_epoch_50.pt",
vocab_path="exp/vocab.json",
output_path="my_model.onnx",
)