Функции машинного обучения
evalMLMethod
Для предсказаний с использованием обученных регрессионных моделей используется функция evalMLMethod. См. ссылку в разделе linearRegression.
stochasticLinearRegression
Агрегатная функция stochasticLinearRegression реализует метод стохастического градиентного спуска с использованием линейной модели и функции потерь MSE. Использует evalMLMethod для предсказаний на новых данных.
stochasticLogisticRegression
Агрегатная функция stochasticLogisticRegression реализует метод стохастического градиентного спуска для задачи бинарной классификации. Использует evalMLMethod для предсказания по новым данным.
naiveBayesClassifier
Классифицирует входной текст с использованием модели наивного Байеса с n-граммами и сглаживанием Лапласа. Перед использованием модель должна быть настроена в ClickHouse.
Синтаксис
Аргументы
model_name— Имя предварительно настроенной модели. String
Модель должна быть определена в конфигурационных файлах ClickHouse (см. ниже).input_text— Текст для классификации. String
Входные данные обрабатываются в точности в том виде, в котором они переданы (регистр и пунктуация сохраняются).
Возвращаемое значение
- Предсказанный идентификатор класса (ID) в виде беззнакового целого числа. UInt32
Идентификаторы классов соответствуют категориям, определённым при построении модели.
Пример
Классификация текста с помощью модели определения языка:
Результат 0 может обозначать английский язык, а 1 — французский; значения классов зависят от ваших обучающих данных.
Подробности реализации
Алгоритм Использует алгоритм классификации Naive Bayes с сглаживанием Лапласа для обработки ранее не встречавшихся n-грамм на основе их вероятностей, как описано здесь.
Ключевые возможности
- Поддержка n-грамм любого размера
- Три режима токенизации:
byte: Работает с сырыми байтами. Каждый байт — отдельный токен.codepoint: Работает с кодовыми точками Unicode, декодированными из UTF‑8. Каждая кодовая точка — отдельный токен.token: Разбивает по последовательностям пробельных символов Unicode (регулярное выражение \s+). Токены — это подстроки непробельных символов; пунктуация входит в токен, если она примыкает к нему (например, "you?" — один токен).
Конфигурация модели
Пример исходного кода для создания модели Naive Bayes для определения языка можно найти здесь.
Кроме того, примеры моделей и соответствующие конфигурационные файлы доступны здесь.
Ниже приведен пример конфигурации модели Naive Bayes в ClickHouse:
Параметры конфигурации
| Параметр | Описание | Пример | Значение по умолчанию |
|---|---|---|---|
| name | Уникальный идентификатор модели | language_detection | Обязательный |
| path | Полный путь к исполняемому файлу модели | /etc/clickhouse-server/config.d/language_detection.bin | Обязательный |
| mode | Метод токенизации: - byte: последовательности байтов- codepoint: символы Unicode- token: токены слов | token | Обязательный |
| n | Размер n-граммы (в режиме token):- 1 = одно слово- 2 = пары слов- 3 = тройки слов | 2 | Обязательный |
| alpha | Коэффициент сглаживания Лапласа, используемый при классификации для обработки n-грамм, отсутствующих в модели | 0.5 | 1.0 |
| priors | Априорные вероятности классов (% документов, принадлежащих каждому классу) | 60% для класса 0, 40% для класса 1 | Равномерное распределение |
Руководство по обучению модели
Формат файла
В человекочитаемом формате, при n=1 и режиме token, модель может выглядеть следующим образом:
Для n=3 и в режиме codepoint это может выглядеть так:
Человекочитаемый формат не используется ClickHouse напрямую; его необходимо преобразовать в двоичный формат, описанный ниже.
Подробности двоичного формата Каждая n-грамма хранится как:
- 4-байтовый
class_id(UInt, little-endian) - 4-байтовая длина
n-gramв байтах (UInt, little-endian) - Необработанные байты
n-gram - 4-байтовый
count(UInt, little-endian)
Требования к предварительной обработке
Перед созданием модели на основе корпуса документов документы должны быть предварительно обработаны для извлечения n-грамм в соответствии с указанными mode и n. Ниже приведены этапы предварительной обработки:
-
Добавьте граничные маркеры в начало и конец каждого документа в зависимости от режима токенизации:
- Byte:
0x01(начало),0xFF(конец) - Codepoint:
U+10FFFE(начало),U+10FFFF(конец) - Token:
<s>(начало),</s>(конец)
Примечание:
(n - 1)токенов добавляется как в начало, так и в конец документа. - Byte:
-
Пример для
n=3в режимеtoken:- Документ:
"ClickHouse is fast" - После обработки:
<s> <s> ClickHouse is fast </s> </s> - Сгенерированные триграммы:
<s> <s> ClickHouse<s> ClickHouse isClickHouse is fastis fast </s>fast </s> </s>
- Документ:
Для упрощения создания модели в режимах byte и codepoint может быть удобно сначала разбить документ на токены (список byte для режима byte и список codepoint для режима codepoint). Затем добавьте n - 1 начальных токенов в начало и n - 1 конечных токенов в конец документа. Наконец, сгенерируйте n-граммы и запишите их в сериализованный файл.