Функция sub в regex может принимать функцию в качестве аргумента repl.
📄 Из документации:
If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.
То есть для каждого совпадения будет вызвана функция для вычисления замены вместо замены на одну и ту же строку для всех совпадений.
Иными словами, для замены разных совпадений на разные строки не потребуется запускать re.sub() много раз для каждой строки замены. Достаточно определить функцию, которая вернёт строку для каждого из совпадений.
Описание слишком запутанное🤔, давайте лучше рассмотрим на простом примере:
Создаем карту замены. То есть какие строки на какие требуется менять.
remap = {
'раз': '1',
'два': '2',
'три': '3',
'четыре': '4',
'пять': '5',
}
Пишем функцию поиска строки для замены. Единственным аргументом будет объект re.Match.
Используя данные этого объекта мы вычисляем замену on-the-fly!
def get_str(match: re.Match):
word = match.group(1)
return remap.get(word.lower()) or word
Пример текста.
text = '''Раз Два Три Четыре Пять
Вместе будем мы считать
Пять Четыре Три Два Раз
Мы считать научим вас
'''
Теперь запускаем re.sub и вместо строки замены (repl) подаём имя функции.
(Данный паттерн ищет отдельные слова в тексте)
>>> print(re.sub(r'(\w+)', get_str, text))
1 2 3 4 5
Вместе будем мы считать
5 4 3 2 1
Мы считать научим вас
Думаю, достаточно наглядно 🤓
#libs#regex
🔥 Сенсей Карпаты выложил новый репозиторий - полный пайплайн обучения LLM с нуля
В проекте есть всё, чтобы собрать свой ChatGPT-клон за $100 и 4 часа:
> • токенизатор (написан на Rust)
> • pretraining
> • SFT (supervised fine-tuning)
> • RL (reinforcement learning)
> • оценка модели (eval)
Всего 8 000 строк кода, без лишних зависимостей - идеальный учебный пример, чтобы понять, как реально устроено обучение больших языковых моделей.
💡 Это проект из его нового грядущего курса LLM101n, и отличная возможность прокачать свои ML-навыки на практике.
Можно арендовать GPU в облаке и запустить всё самому - код уже готов к запуску.
Если запустить обучение модели nanochat на облачном GPU-сервере (например, 8×H100), то примерно через 12 часов обучения (стоимость ~300–400 $) модель достигает уровня GPT-2 по качеству на тестовых наборах (CORE-score).
А если тренировать около 40 часов (затраты ~1000 $), решает простые задачи по математике и коду, набирая:
- 40+ на MMLU
- 70+ на ARC-Easy
- 20+ на GSM8K
🧠 Это бесплатная практика топ уровня от мастера, которую не стоит упускать.
🟠GitHub:https://github.com/karpathy/nanochat
🟠Технические детали:https://github.com/karpathy/nanochat/discussions/1
@ai_machinelearning_big_data
#LLM#nanochat#MachineLearning#DeepLearning#AI#GPT
🔥 Nanochat D32 : микромодель Карпаты за $1000, которая реально работает
Карпаты написал, что завершил обучение Nanochat D32, обученной за 33 часа при бюджете $1000 (вместо $100).
Результаты - удивительно хорошие для такой «крошки»:
- 📈CORE score: 0.31 (выше, чем у GPT-2 — ~0.26)
- 🧮GSM8K: с 8% до 20%
- 🚀 Рост виден на всех этапах - pretraining, SFT и RL
Карпати пишет:
> «Не ждите от микромоделей чудес. Они обходятся $100–$1000, а не миллиарды долларов, как у крупных лабораторий.
> Разговаривать с моделью - как с ребёнком из детсада: они милые, ошибаются, путаются, галлюцинируют, но это весело.»
💡Факты:
- Nanochat тренируется с нуля
- Самая маленькая модель Nanochat содержит примерно в тысячу раз меньше параметров, чем GPT-3.
- Обнолвенный скрипт run1000.sh уже доступен в репозитории
📎 Подробности и отчёт:
https://github.com/karpathy/nanochat/discussions/8
Карпати уже тестирует веб-чат с моделью (ссылку не публикует, чтобы не обвалили сервер).
Дальше -оптимизация и возможно, переход к следующему уровню масштабирования.
#AI#LLM#Nanochat#Karpathy#AIresearch#OpenSourceAI
🧠 Карпаты показал, как добавить новую функцию в мини-LLM nanochat d32, сравнив её «мозг» с мозгом пчелы.
Он обучил модель считать, сколько раз буква r встречается в слове strawberry, и использовал этот пример, чтобы показать, как можно наделять маленькие языковые модели новыми навыками через синтетические задачи.
Сначала генерируются диалоги:
«Сколько букв r в слове strawberry?»
и правильные ответы.
После этого модель проходит дообучение (SFT) или обучение с подкреплением (RL), чтобы закрепить навык.
Карпаты объясняет, что для маленьких моделей важно продумывать всё до мелочей, как разнообразить запросы, как устроена токенизация и даже где ставить пробелы.
Он показывает, что рассуждения лучше разбивать на несколько шагов, тогда модель легче понимает задачу.
Nanochat решает задачу двумя способами:
— логически, рассуждая пошагово;
— через встроенный Python-интерпретатор, выполняя вычисления прямо внутри чата.
Идея в том, что даже крошечные LLM можно «научить думать», если правильно подготовить примеры и синтетические данные.
📘 Разбор: github.com/karpathy/nanochat/discussions/164
@ai_machinelearning_big_data
#AI#Karpathy#Nanochat#LLM#SFT#RL#MachineLearning#OpenSource