機械学習関数
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 はフランス語を示す場合があります。クラスの意味は学習データに依存します。
実装の詳細
アルゴリズム Naive Bayes 分類アルゴリズムを使用し、未出現の n-gram を扱うために ラプラス平滑化 を用います。n-gram の確率は この資料 に基づきます。
主な特徴
- 任意の長さの n-gram をサポート
- 3 種類のトークン化モード:
byte: 生のバイト列を対象とします。各バイトが 1 トークンになります。codepoint: UTF‑8 からデコードされた Unicode スカラ値を対象とします。各コードポイントが 1 トークンになります。token: Unicode 空白文字の連続 (正規表現 \s+) で分割します。トークンは非空白部分文字列であり、隣接している場合は句読点もトークンの一部になります (例: 「you?」は 1 トークン) 。
モデル設定
言語検出用の 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-グラムサイズ (token モード) :- 1 = 単語 1 個- 2 = 単語 2 個の組み合わせ- 3 = 単語 3 個の組み合わせ | 2 | 必須 |
| alpha | 分類時にモデルに存在しない N-gram に対処するために使用されるラプラス平滑化係数 | 0.5 | 1.0 |
| priors | クラスの事前確率 (各クラスに属するドキュメントの割合) | クラス 0 が 60%、クラス 1 が 40% | 一様分布 |
モデル学習ガイド
ファイル形式
人が読める形式では、n=1 かつ token モードの場合、モデルは次のようになります:
n=3 で codepoint モードの場合、次のようになります:
人間が読みやすい形式は ClickHouse では直接使用されず、以下で説明するバイナリ形式に変換する必要があります。
バイナリ形式の詳細 各 n-gram は次の形式で格納されます:
- 4 バイトの
class_id(UInt、little-endian) - 4 バイトの
n-gramのバイト長 (UInt、little-endian) - 生の
n-gramバイト列 - 4 バイトの
count(UInt、little-endian)
前処理の要件
ドキュメントコーパスからモデルを作成する前に、指定された 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 モードでのモデル作成を簡略化するために、まずドキュメントをトークン (byte モードでは byte のリスト、codepoint モードでは codepoint のリスト) にトークナイズすると便利な場合があります。その後、ドキュメントの先頭に n - 1 個の開始トークンを、末尾に n - 1 個の終了トークンを追加します。最後に、n-gram を生成し、それらをシリアライズされたファイルに書き込みます。