跳至主要内容
跳至主要内容

机器学习函数

evalMLMethod

使用 evalMLMethod 函数进行使用拟合的回归模型预测。请参阅 linearRegression 中的链接。

stochasticLinearRegression

stochasticLinearRegression 聚合函数使用线性模型和 MSE 损失函数实现随机梯度下降方法。使用 evalMLMethod 对新数据进行预测。

stochasticLogisticRegression

stochasticLogisticRegression 聚合函数为二元分类问题实现随机梯度下降方法。使用 evalMLMethod 对新数据进行预测。

naiveBayesClassifier

使用 n-gram 和拉普拉斯平滑的朴素贝叶斯模型对输入文本进行分类。在使用之前,必须在 ClickHouse 中配置模型。

语法

naiveBayesClassifier(model_name, input_text);

参数

  • model_name — 预配置模型的名称。 字符串 该模型必须在 ClickHouse 的配置文件中定义(见下文)。
  • input_text — 要分类的文本。 字符串 输入将按原样提供(保留大小写/标点符号)。

返回值

  • 预测的类 ID,为无符号整数。 UInt32 类 ID 对应于模型构建期间定义的类别。

示例

使用语言检测模型对文本进行分类

SELECT naiveBayesClassifier('language', 'How are you?');
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘

结果 0 可能代表英语,而 1 可能表示法语 - 类含义取决于您的训练数据。


实现细节

算法 使用带有 拉普拉斯平滑 的朴素贝叶斯分类算法,基于 的 n-gram 概率来处理未见的 n-gram。

主要特性

  • 支持任意大小的 n-gram
  • 三种分词模式
    • byte:在原始字节上操作。每个字节是一个 token。
    • codepoint:在从 UTF‑8 解码的 Unicode 标量值上操作。每个码点是一个 token。
    • token:在 Unicode 空白符(正则表达式 \s+)上拆分。Token 是非空白符的子字符串;如果相邻,标点符号是 token 的一部分(例如,“you?” 是一个 token)。

模型配置

您可以在 此处 找到用于创建语言检测的朴素贝叶斯模型的示例源代码。

此外,示例模型及其关联的配置文件可在 此处 找到。

这是 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
token必需
nN-gram 大小(token 模式)
- 1=单个单词
- 2=单词对
- 3=单词三元组
2必需
alpha在分类过程中使用的拉普拉斯平滑因子,用于解决模型中未出现的 n-gram0.51.0
priors类概率(属于某个类的文档的百分比)60% 类 0,40% 类 1均等分布

模型训练指南

文件格式 以人类可读的格式,对于 n=1token 模式,模型可能如下所示

<class_id> <n-gram> <count>
0 excellent 15
1 refund 28

对于 n=3codepoint 模式,它可能如下所示

<class_id> <n-gram> <count>
0 exc 15
1 ref 28

ClickHouse 不直接使用人类可读的格式;它必须转换为下面描述的二进制格式。

二进制格式详细信息 每个 n-gram 存储为

  1. 4 字节 class_id(UInt,小端字节序)
  2. 4 字节 n-gram 字节长度(UInt,小端字节序)
  3. 原始 n-gram 字节
  4. 4 字节 count(UInt,小端字节序)

预处理要求 在从文档语料库创建模型之前,必须根据指定的 moden 提取 n-gram。以下步骤概述了预处理

  1. 根据分词模式,在每个文档的开头和结尾添加边界标记

    • Byte0x01(开始),0xFF(结束)
    • CodepointU+10FFFE(开始),U+10FFFF(结束)
    • Token<s>(开始),</s>(结束)

    注意: (n - 1) 个 token 添加到文档的开头和结尾。

  2. token 模式下 n=3 的示例

    • 文档: "ClickHouse is fast"
    • 处理为: <s> <s> ClickHouse is fast </s> </s>
    • 生成的 trigram
      • <s> <s> ClickHouse
      • <s> ClickHouse is
      • ClickHouse is fast
      • is fast </s>
      • fast </s> </s>

为了简化 bytecodepoint 模式的模型创建,可以先将文档标记化为 token(对于 byte 模式,是 byte 的列表;对于 codepoint 模式,是 codepoint 的列表)。然后,在文档的开头添加 n - 1 个开始 token,在结尾添加 n - 1 个结束 token。最后,生成 n-gram 并将其写入序列化文件。


    © . This site is unofficial and not affiliated with ClickHouse, Inc.