机器学习函数
evalMLMethod
使用已训练好的回归模型进行预测时,请使用 evalMLMethod 函数。相关内容请参阅 linearRegression 中的链接。
stochasticLinearRegression
stochasticLinearRegression 聚合函数使用线性模型和 MSE 损失函数实现随机梯度下降算法。使用 evalMLMethod 基于新数据进行预测。
stochasticLogisticRegression
stochasticLogisticRegression 聚合函数实现了用于二分类问题的随机梯度下降算法。使用 evalMLMethod 对新数据进行预测。
naiveBayesClassifier
使用基于 n-gram 和拉普拉斯平滑的朴素贝叶斯模型对输入文本进行分类。在使用之前,必须先在 ClickHouse 中完成模型配置。
语法
参数
model_name— 预配置模型的名称。String 模型必须在 ClickHouse 的配置文件中定义(见下文)。input_text— 要进行分类的文本。String 输入将按原样处理(保留大小写和标点)。
返回值
- 预测的类别 ID,为无符号整数类型。UInt32 类别 ID 与模型构建时定义的类别一一对应。
示例
使用语言检测模型对文本进行分类:
结果 0 可能表示英语,而 1 可能表示法语——具体类别的含义取决于你的训练数据。
实现细节
算法 使用朴素贝叶斯(Naive Bayes)分类算法,并结合拉普拉斯平滑,基于 n‑gram 概率来处理未见过的 n‑gram,具体方法参考这份资料。
关键特性
- 支持任意长度的 n‑gram
- 提供三种分词模式:
byte:基于原始字节操作。每个字节视为一个 token。codepoint:基于从 UTF‑8 解码得到的 Unicode 标量值操作。每个 codepoint 视为一个 token。token:按连续的 Unicode 空白字符拆分(正则 \s+)。Token 为非空白子串;如果标点与文本相邻,则视为同一个 token(例如,“you?” 是一个 token)。
模型配置
你可以在这里找到用于创建语言检测 Naive Bayes 模型的示例源代码。
此外,可以在这里获取示例模型及其对应的配置文件。
下面是在 ClickHouse 中配置 Naive Bayes 模型的示例:
配置参数
| Parameter | Description | Example | Default |
|---|---|---|---|
| name | 唯一的模型标识符 | language_detection | 必填 |
| path | 指向模型二进制文件的完整路径 | /etc/clickhouse-server/config.d/language_detection.bin | 必填 |
| mode | 分词方法: - byte:字节序列- codepoint:Unicode 字符- token:词元 | token | 必填 |
| n | N-gram 大小(token 模式):- 1 = 单词- 2 = 词对- 3 = 三词组合 | 2 | 必填 |
| alpha | 分类过程中使用的 Laplace 平滑因子,用于处理在模型中未出现的 n-gram | 0.5 | 1.0 |
| priors | 类别先验概率(文档属于各类别的比例) | 60% 为类别 0,40% 为类别 1 | 均匀分布 |
模型训练指南
文件格式
在人类可读格式下,对于 n=1 且为 token 模式,模型可能如下所示:
对于 n=3 且使用 codepoint 模式时,可能如下所示:
人类可读格式不会被 ClickHouse 直接使用,而是必须先转换为下文所述的二进制格式。
二进制格式详情 每个 n-gram 存储为:
- 4 字节的
class_id(UInt,小端序) - 4 字节的
n-gram字节长度(UInt,小端序) - 原始
n-gram字节 - 4 字节的
count(UInt,小端序)
预处理要求
在基于文档语料创建模型之前,必须先对文档进行预处理,以根据指定的 mode 和 n 提取 n-gram。以下步骤概述预处理流程:
-
根据分词模式在每个文档的开头和结尾添加边界标记:
- Byte:
0x01(开始),0xFF(结束) - Codepoint:
U+10FFFE(开始),U+10FFFF(结束) - Token:
<s>(开始),</s>(结束)
注意: 在文档的开头和结尾处各添加
(n - 1)个标记。 - Byte:
-
在
token模式下n=3的示例:- 文档:
"ClickHouse is fast" - 处理后:
<s> <s> ClickHouse is fast </s> </s> - 生成的三元语法(trigram):
<s> <s> ClickHouse<s> ClickHouse isClickHouse is fastis fast </s>fast </s> </s>
- 文档:
为简化 byte 和 codepoint 模式下的模型创建,可以先将文档分词为 token(在 byte 模式下为 byte 列表,在 codepoint 模式下为 codepoint 列表)。然后,在文档开头追加 n - 1 个起始 token,在文档结尾追加 n - 1 个结束 token。最后生成 n-gram,并将其写入序列化文件。