Перейти к основному содержанию

evalMLMethod

Для получения прогноза с помощью обученных регрессионных моделей используется функция evalMLMethod. См. ссылку в linearRegression.

stochasticLinearRegression

Агрегатная функция stochasticLinearRegression реализует метод стохастического градиентного спуска с использованием линейной модели и функции потерь MSE. Для предсказания на новых данных используется evalMLMethod.

stochasticLogisticRegression

Агрегатная функция stochasticLogisticRegression реализует метод стохастического градиентного спуска для решения задачи бинарной классификации. Для прогнозирования на новых данных используется evalMLMethod.

naiveBayesClassifier

Классифицирует входной текст с помощью модели Naive Bayes, использующей n-граммы и сглаживание Лапласа. Перед использованием модель необходимо настроить в ClickHouse. Синтаксис
naiveBayesClassifier(model_name, input_text);
Аргументы
  • model_name — Имя предварительно настроенной модели. String Модель должна быть определена в файлах конфигурации ClickHouse (см. ниже).
  • input_text — Текст для классификации. String Текст обрабатывается в точности в том виде, в котором он передан (с сохранением регистра и пунктуации).
Возвращаемое значение
  • Идентификатор предсказанного класса в виде беззнакового целого числа. UInt32 Идентификаторы классов соответствуют категориям, заданным при построении модели.
Пример Классифицируйте текст с помощью модели определения языка:
SELECT naiveBayesClassifier('language', 'How are you?');
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘
Результат 0 может соответствовать английскому, а 1 — французскому; значения классов зависят от ваших обучающих данных.

Подробности реализации

Алгоритм Использует алгоритм классификации Naive Bayes со сглаживанием Лапласа для обработки ранее не встречавшихся n-грамм, опираясь на вероятности n-грамм, как описано здесь. Ключевые возможности
  • Поддерживает n-граммы любого размера
  • Три режима токенизации:
    • byte: Работает с сырыми байтами. Каждый байт — один токен.
    • codepoint: Работает со скалярными значениями Unicode, декодированными из UTF‑8. Каждая кодовая точка — один токен.
    • token: Разбивает по последовательностям пробельных символов Unicode (регулярное выражение \s+). Токены — это подстроки без пробельных символов; знаки пунктуации входят в токен, если примыкают к нему (например, “you?” — это один токен).

Конфигурация модели

Пример исходного кода для создания модели Naive Bayes для определения языка можно найти здесь. Кроме того, здесь доступны примеры моделей и связанные с ними файлы конфигурации. Ниже приведен пример конфигурации модели Naive Bayes в ClickHouse:
<clickhouse>
    <nb_models>
        <model>
            <name>sentiment</name>
            <path>/etc/clickhouse-server/config.d/sentiment.bin</path>
            <n>2</n>
            <mode>token</mode>
            <alpha>1.0</alpha>
            <priors>
                <prior>
                    <class>0</class>
                    <value>0.6</value>
                </prior>
                <prior>
                    <class>1</class>
                    <value>0.4</value>
                </prior>
            </priors>
        </model>
    </nb_models>
</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.51.0
priorsВероятности классов (% документов, относящихся к классу)60% — класс 0, 40% — класс 1Равномерное распределение
Руководство по обучению модели Формат файла В человекочитаемом формате для n=1 и режима token модель может выглядеть так:
<class_id> <n-gram> <count>
0 excellent 15
1 refund 28
Для n=3 в режиме codepoint это может выглядеть так:
<class_id> <n-gram> <count>
0 exc 15
1 ref 28
Человекочитаемый формат ClickHouse напрямую не использует; его необходимо преобразовать в описанный ниже бинарный формат. Сведения о бинарном формате Каждая n-грамма хранится в следующем виде:
  1. 4-байтовый class_id (UInt, little-endian)
  2. 4-байтовая длина n-gram в байтах (UInt, little-endian)
  3. Необработанные байты n-gram
  4. 4-байтовый count (UInt, little-endian)
Требования к предварительной обработке Перед созданием модели на основе корпуса документов необходимо предварительно обработать документы, чтобы извлечь n-граммы в соответствии с указанными mode и n. Ниже описаны шаги предварительной обработки:
  1. Добавьте маркеры границ в начало и конец каждого документа в зависимости от режима токенизации:
    • Byte: 0x01 (начало), 0xFF (конец)
    • Codepoint: U+10FFFE (начало), U+10FFFF (конец)
    • Token: <s> (начало), </s> (конец)
    Примечание: (n - 1) токенов добавляются и в начало, и в конец документа.
  2. Пример для n=3 в режиме token:
    • Документ: "ClickHouse is fast"
    • После обработки: <s> <s> ClickHouse is fast </s> </s>
    • Сгенерированные триграммы:
      • <s> <s> ClickHouse
      • <s> ClickHouse is
      • ClickHouse is fast
      • is fast </s>
      • fast </s> </s>
Чтобы упростить создание модели для режимов byte и codepoint, бывает удобно сначала разбить документ на токены (список byte для режима byte и список codepoint для режима codepoint). Затем добавьте n - 1 начальных токенов в начало документа и n - 1 конечных токенов — в его конец. Наконец, сгенерируйте n-граммы и запишите их в сериализованный файл.
Последнее изменение 10 июня 2026 г.