机器学习函数
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 可能表示法语——具体类别的含义取决于你的训练数据。
实现细节
算法 使用朴素贝叶斯 (朴素贝叶斯) 分类算法,并结合拉普拉斯平滑,基于 n‑gram 概率来处理未见过的 n‑gram,具体方法参考这份资料。
关键特性
- 支持任意长度的 n‑gram
- 提供三种分词模式:
byte:基于原始字节操作。每个字节视为一个标记。codepoint:基于从 UTF‑8 解码得到的 Unicode 标量值操作。每个 codepoint 视为一个标记。token:按连续的 Unicode 空白字符拆分 (正则 \s+) 。标记为非空白子串;如果标点与文本相邻,则视为同一个标记 (例如,“you?” 是一个标记) 。
模型配置
你可以在这里找到用于创建语言检测 朴素贝叶斯 模型的示例源代码。
此外,可以在这里获取示例模型及其对应的配置文件。
下面是在 ClickHouse 中配置 朴素贝叶斯 模型的示例:
配置参数
| 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> - 生成的三元组:
<s> <s> ClickHouse<s> ClickHouse isClickHouse is fastis fast </s>fast </s> </s>
- 文档:
为简化 byte 和 codepoint 模式下的模型创建,可以先将文档分词为 标记 (在 byte 模式下为 byte 列表,在 codepoint 模式下为 codepoint 列表) 。然后,在文档开头追加 n - 1 个起始标记,在文档结尾追加 n - 1 个结束标记。最后生成 n-gram,并将其写入序列化文件。