evalMLMethod
学習済みの回帰モデルを使用した予測には、evalMLMethod 関数を使用します。詳しくは linearRegression のリンクを参照してください。
stochasticLinearRegression
stochasticLinearRegression 集約関数は、線形モデルと MSE 損失関数を用いた確率的勾配降下法を実装します。新しいデータに対する予測にはevalMLMethod を使用します。
stochasticLogisticRegression
stochasticLogisticRegression 集約関数は、二値分類問題に対する確率的勾配降下法を実装します。新しいデータに対する予測にはevalMLMethod を使用します。
naiveBayesClassifier
N-gram とラプラス平滑化を用いた Naive Bayes モデルで入力テキストを分類します。使用する前に、ClickHouse でモデルを設定しておく必要があります。 構文model_name— 事前設定済みモデルの名前。String モデルは ClickHouse の設定ファイルで定義されている必要があります (以下を参照) 。input_text— 分類対象のテキスト。String 入力は、指定されたとおりにそのまま処理されます (大文字・小文字や句読点は保持されます) 。
- 予測されたクラス ID を符号なし整数で返します。UInt32 クラス ID は、モデル構築時に定義されたカテゴリに対応します。
0 は英語、1 はフランス語を表す場合があります。どのクラスが何を意味するかは、学習データによって異なります。
実装の詳細
アルゴリズム こちらに基づく N-gram の確率を用い、未出現の N-gram に対応するため、ラプラス平滑化を適用した Naive Bayes 分類アルゴリズムを使用します。 主な機能- 任意のサイズの N-gram をサポート
- 3 つのトークン化モード:
byte: 生のバイト列を対象に処理します。各バイトが 1 つのトークンになります。codepoint: UTF‑8 からデコードされた Unicode スカラー値を対象に処理します。各コードポイントが 1 つのトークンになります。token: Unicode の空白文字の連続 (正規表現\s+) で分割します。トークンは空白以外の連続した部分文字列で、句読点が隣接している場合はその句読点もトークンに含まれます (例:"you?"は 1 つのトークンです) 。
モデル設定
言語検出用の Naive Bayes モデルを作成するためのサンプルソースコードは、こちらで確認できます。 さらに、サンプルモデルと関連する config ファイルはこちらで公開されています。 以下は、ClickHouse における Naive Bayes モデルの設定例です。
モデル学習ガイド
ファイルフォーマット
可読形式では、
n=1 かつ token モードの場合、モデルは次のようになります。
n=3 かつ codepoint モードの場合、次のようになります。
- 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の例:- Document:
"ClickHouse is fast" - Processed as:
<s> <s> ClickHouse is fast </s> </s> - 生成されるトライグラム:
<s> <s> ClickHouse<s> ClickHouse isClickHouse is fastis fast </s>fast </s> </s>
- Document:
byte モードおよび codepoint モードでのモデル作成を簡単にするには、まず文書をトークン列に分割しておくと便利です (byte モードでは byte のリスト、codepoint モードでは codepoint のリスト) 。次に、文書の先頭に n - 1 個の開始トークンを、末尾に n - 1 個の終了トークンを追加します。最後に、N-gram を生成してシリアライズ済みファイルに書き込みます。
assignCentroid
導入バージョン: v26.8.0 ベクトルに最も近い(L2)セントロイドの id を返します。セントロイドは、float 配列の定数配列として指定でき、この場合 id はその配列内の 0 始まりの位置を表します。または、属性cid と vec を持つ Dictionary の名前として指定でき、この場合 id は cid になります。
この関数は非決定論的ではありません。同じ引数に対して異なる結果を返すことがあります。
vec— 割り当て対象のベクトル。その次元数はセントロイドの次元数と一致する必要があります。Float32以外のビット幅はFloat32に変換されます (スコアリングkernelが使用する型です) 。Array(Float32)またはArray(Float64)またはArray(BFloat16)centroids— スコアリング対象のセントロイドで、定数である必要があります。サイズが等しく空でない浮動小数点配列の配列として指定する場合、id はその配列内の0始まりの位置になります。または、UInt32に収まるunsigned integer typeの属性cidとArray(Float32)型の属性vecを持つDictionaryの名前として指定する場合、id はcidになります。このdictionaryは一度だけ読み込まれ、reloadされるまでキャッシュされます。Array(Array(Float32))またはArray(Array(Float64))またはArray(Array(BFloat16))またはString
UInt32
例
Inline のセントロイド
Query
Response
evalMLMethod
導入バージョン: v20.1.0 学習済みの機械学習モデルを入力された特徴量に適用し、予測を生成します。 構文model— 学習済みの機械学習モデル。AggregateFunctionStatex1, x2, ...— 予測に用いる特徴量の値。Float*または(U)Int*
Float64
例
使用例
Query
Response
naiveBayesClassifier
導入バージョン: v25.11.0NAIVE_BAYES Dictionary を使用して入力テキストを分類します。dictGet(dictionary_name, class_attribute, input_text) と同じ予測クラス値を返します。ここで、class_attribute は Dictionary のレイアウトで設定されたクラスラベル属性の名前です。dictGet とは異なり、戻り値の型はクラス属性の宣言型ではなく常に UInt32 であり、input_text は String である必要があります (キー型変換は適用されません) 。
この関数は非決定論的です。同じ引数に対して異なる結果を返すことがあります。
UInt32
例
テキストを分類
Query
Response
naiveBayesClassifierWithAllProbs
導入バージョン: v26.7.0NAIVE_BAYES Dictionaryを使用して入力テキストを分類し、すべてのクラスとその確率を、確率の高い順に返します。
この関数は非決定論的です。同じ引数に対して異なる結果を返すことがあります。
Array(Tuple(UInt32, Float64))
例
各クラスの確率
Query
Response
naiveBayesClassifierWithProb
導入バージョン: v26.7.0NAIVE_BAYES Dictionary を使用して入力テキストを分類し、予測されたクラスとその確率を返します。
この関数は非決定論的です。同じ引数に対しても異なる結果を返す場合があります。
Tuple(UInt32, Float64)
例
確率とともに分類
Query
Response