Токени, підрахунок і частота
Модуль 1Урок 2 з 56Безкоштовний модуль
Перед тим як зрозуміти «що означає», модель мусить побачити «що взагалі буває». Як дитина в новій мові спочатку тисячі разів чує «і», «на», «це», так і LLM спершу рахує token — шматочки тексту. «Кіт» може бути одним token, «коти» — двома («кот» + «и»), «бігав» — теж розбитим. Модель не читає речення очима; вона бачить потік token і статистику: хто скільки разів зʼявився.
Підрахунок як перший інстинкт
У короткому тексті «кіт кіт пес яблуко кіт пес» слово «кіт» зустрічається 3 рази, «пес» — 2, «яблуко» — 1. Це не просто цифри в блокноті: часті token стають «звичними» (службові слова, розділові знаки), рідкі — «особливими» (терміни, імена). З лічильників народжуються ймовірності, ваги й embedding — усе починається з питання «скільки разів я це бачив?».
from collections import Counter
text = "кіт кіт пес яблуко кіт пес"
tokens = text.split()
freq = Counter(tokens)
print(freq)
# Counter({'кіт': 3, 'пес': 2, 'яблуко': 1})
for word, count in freq.most_common():
print(word, "->", count, "разів")Натисніть «Запустити» — вивід зʼявиться тут
Підказка
Додайте в рядок «кота» й подивіться, чи лічильник вважає його тим самим token, що «кіт».
Приклад
Допишіть у той самий рядок «пес гнав кота» і запустіть ще раз. «Пес» стане 3, «кіт» лишиться 3, зʼявляться «гнав» і «кота» по одному разу. Зверніть увагу на останнє: для лічильника «кіт» і «кота» — два різні token, бо він порівнює рядки, а не значення.
Розподіл частот і закон Ципфа
Якщо відсортувати всі token за частотою й намалювати стовпчики, вийде характерна картина: кілька велетнів зліва («і», «в», «на», «що») і довгий хвіст рідких слів. Це закон Ципфа — у природній мові мало слів домінують, а більшість трапляється по разу. Модель вчиться з обох кінців: часті token дають каркас речень, рідкі — конкретний зміст і факти.
Від лічильника до ймовірності
Лічильник — ще не ймовірність. «Кіт» тричі в корпусі з шести token означає 3/6, тобто 0,5. Це перетворення робиться в курсі стільки разів, що варто зробити його руками один раз: поділіть кожен лічильник на загальну кількість token, і сума всіх часток дасть одиницю. Далі цю саму величину видає softmax, тільки не з лічильників, а з logits.
Вправа
PythonНапишіть функцію token_probabilities(tokens), яка з списку token повертає словник «token → його частка в списку». Для порожнього списку поверніть порожній словник.
def token_probabilities(tokens):
# ваш код
return {}
Тести
Ще не перевірялиПорада
Коли бачите softmax або loss, памʼятайте: під капотом лежить статистика token. Модель не «вгадує з повітря» — вона зважує те, що часто йшло разом у навчальних даних, і не дає рідким словам зникнути повністю.
Увага
Якщо датасет кривий (наприклад, лише медичні тексти), розподіл частот зміститься — і модель «повірить», що медичні терміни звичніші, ніж у реальній мові. Розподіл — відбиток пальця корпусу.
Після підрахунку модель ставить глибші питання: які token стоять поруч? Хто за ким іде? Стабільні пари — «доброго» плюс «ранку», «дорожній» плюс «знак» — стають звичними доріжками. Без лічильника не було б стартової карти, лише хаос символів. Саме тому навіть найскладніший transformer починав з простого «скільки разів я це бачив?».
Що запамʼятати
Token — одиниця тексту для моделі, а підрахунок — перший міст від сирих даних до ймовірностей. Часті слова будують каркас, рідкі несуть конкретику. Розподіл частот з довгим хвостом Ципфа керує тим, на що модель звертає увагу під час навчання. І один прийом з цього уроку — поділити лічильник на загальну кількість — повертатиметься в курсі щоразу, коли трапиться слово softmax.
Перевірка
4 питанняКілька питань за матеріалом уроку. Спроб — скільки завгодно.