У тебя ошибка в терминах - работой с текстами занимаются языковые модели, а 'распознавание текста' это работа с изображением или звуком с целью преобразования его в текст.
С нуля этим заниматься будет очень сложно, нужны большие датасеты, причем большие - это порядка сотен миллионов или миллиардов токенов, причем размеры моделей могут быть не слишком большими. До эпохи трансформеров алгоритмы работы с текстом 'не понимали смысла'.
Лучшее что сейчас есть готовое это LLM на основе трансформера (GPT). Предобученных моделей огромное количество, из открытых и более менее рабочих -
opt (не доступна нормальная 175b и кажется только английский) и
bloomz (мультиязыковая, смотри таблицу разных размеров) но они значительно слабее chatgpt35 и никто не приблизился к chatgpt4. По ссылкам подробное описание, там есть информация как использовать примеры. К сожалению работа с языковыми моделями требует очень дорогое оборудование, а на процессоре они работают в сотни раз медленнее (код так написан, он оптимизирован для gpu).
Что значит слабее - это значит хоть знаний в этим модели влито огромное количество, но воспользоваться ими можно будет качественно только после fine tuning - дообучения на своих данных (примеры вопрос - ответ например, но не обязательно), главное тут то что количество данных для этого может быть очень маленьким (тысячи или даже сотни примеров). Есть алгоритмы
peft - которые вместо тюнинга самой модели, работают с весами токенов запроса, это не вносит новых знаний в модель но увеличивает качество ответа (этим пользуются во время проведения бенчмарков сравнения моделей, например prompt tuning), я слышал что для этих алгоритмов количество примеров может быть еще меньше - десятки.
p.s.
llama одна из лучших 'доступных' моделей (мультиязычная от 30b) но использование ее без разрешения facebook нелегально, и
ее можно даже не дообучать (но рекомендуется добавлять в запрос хотя бы один-два примера, сколько позволит мизерный размер контекста в 2к токенов), с ее качеством можно буквально анализировать смысл текста простыми вопросами.
llama.cpp - код по запуску (не обучению) gpt моделей, не только llama, на процессоре (есть слабая поддержка gpu) оптимизированно на столько хорошо, что медленее дорогих сборок с gpu в десяток раз (а десктопные могут работать сравнимо с топовыми cpu), например llama30b обрабатывает 250мс на токен запроса и 500мс на генерацию (65b - 1100мс на генерацию).
Из недостатков - слабая логика и плохая детекция конца ответа (может уйти в генерацию мусорного текста), требует определять логику завершения генерации 'снаружи', например часто достаточно выставить финишным текстом ### (управляющие символы, часто встречаются в галюцинациях и могут использоваться для оформления запроса)