메인 콘텐츠로 건너뛰기

evalMLMethod

적합된 회귀 모델을 사용한 예측에는 evalMLMethod 함수를 사용합니다. 자세한 내용은 linearRegression의 링크를 참조하십시오.

stochasticLinearRegression

stochasticLinearRegression 집계 함수는 선형 모델과 MSE 손실 함수를 사용한 확률적 경사 하강법을 구현합니다. 새 데이터 예측에는 evalMLMethod를 사용합니다.

stochasticLogisticRegression

stochasticLogisticRegression 집계 함수는 이진 분류 문제를 위한 확률적 경사 하강법을 구현합니다. 새 데이터 예측에는 evalMLMethod를 사용합니다.

naiveBayesClassifier

n-그램과 라플라스 스무딩을 사용하는 Naive Bayes 모델로 입력 텍스트를 분류합니다. 사용하기 전에 ClickHouse에서 모델을 미리 구성해야 합니다. 구문
naiveBayesClassifier(model_name, input_text);
인수
  • model_name — 사전 구성된 모델의 이름입니다. String 모델은 ClickHouse의 설정 파일에 정의되어 있어야 합니다(아래 참고).
  • input_text — 분류할 텍스트입니다. String 입력은 제공된 그대로 처리됩니다(대소문자와 구두점 유지).
반환 값
  • 예측된 클래스 ID를 부호 없는 정수로 반환합니다. UInt32 클래스 ID는 모델 생성 시 정의된 범주에 해당합니다.
예시 언어 감지 모델을 사용해 텍스트를 분류합니다:
SELECT naiveBayesClassifier('language', 'How are you?');
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘
결과 0은 영어를, 1은 프랑스어를 나타낼 수 있습니다. 클래스의 의미는 학습 데이터에 따라 달라집니다.

구현 세부 사항

알고리즘 이 문서를 기반으로 한 n-그램 확률을 사용하며, 관측되지 않은 n-그램을 처리하기 위해 라플라스 스무딩을 적용한 Naive Bayes 분류 알고리즘을 사용합니다. 주요 기능
  • 모든 크기의 n-그램을 지원합니다
  • 세 가지 토큰화 모드:
    • byte: 원시 바이트 단위로 동작합니다. 각 바이트가 하나의 토큰입니다.
    • codepoint: UTF‑8에서 디코딩된 유니코드 스칼라 값을 기준으로 동작합니다. 각 코드포인트가 하나의 토큰입니다.
    • token: 연속된 유니코드 공백(정규식 \s+)을 기준으로 분할합니다. 토큰은 공백이 아닌 부분 문자열이며, 인접한 문장부호도 토큰에 포함됩니다(예: “you?”는 하나의 토큰입니다).

모델 구성

언어 감지를 위한 Naive Bayes 모델을 생성하는 예시 소스 코드는 여기에서 확인할 수 있습니다. 또한 예시 모델과 관련 구성 파일은 여기에서 확인할 수 있습니다. 다음은 ClickHouse에서 Naive Bayes 모델에 사용하는 예시 구성입니다:
<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: 유니코드 문자
- token: 단어 토큰
token필수
nn-그램 크기(token 모드):
- 1=단일 단어
- 2=단어 쌍
- 3=세 단어 묶음
2필수
alpha분류 중 모델에 나타나지 않는 n-그램을 처리하기 위해 사용하는 라플라스 스무딩 계수0.51.0
priors클래스 확률(각 클래스에 속하는 문서 비율 %)클래스 0 60%, 클래스 1 40%균등 분포
모델 학습 가이드 파일 포맷 사람이 읽을 수 있는 포맷에서 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-그램은 다음 형식으로 저장됩니다.
  1. 4바이트 class_id (UInt, 리틀 엔디언)
  2. 4바이트 n-gram 바이트 길이 (UInt, 리틀 엔디언)
  3. 원본 n-gram 바이트
  4. 4바이트 count (UInt, 리틀 엔디언)
전처리 요구 사항 문서 코퍼스에서 모델을 생성하기 전에, 지정된 moden에 따라 n-그램을 추출할 수 있도록 문서를 전처리해야 합니다. 다음 단계는 전처리 과정을 설명합니다.
  1. 토큰화 모드에 따라 각 문서의 시작과 끝에 경계 마커를 추가합니다.
    • Byte: 0x01 (시작), 0xFF (끝)
    • Codepoint: U+10FFFE (시작), U+10FFFF (끝)
    • Token: <s> (시작), </s> (끝)
    참고: 문서의 앞과 뒤에 각각 (n - 1)개의 토큰을 추가합니다.
  2. token 모드에서 n=3인 경우의 예시:
    • 문서: "ClickHouse is fast"
    • 처리 결과: <s> <s> ClickHouse is fast </s> </s>
    • 생성된 3-그램:
      • <s> <s> ClickHouse
      • <s> ClickHouse is
      • ClickHouse is fast
      • is fast </s>
      • fast </s> </s>
bytecodepoint 모드에서 모델 생성을 단순화하려면, 먼저 문서를 tokens으로 분리해 두는 것이 편리할 수 있습니다(byte 모드에서는 byte 목록, codepoint 모드에서는 codepoint 목록). 그런 다음 문서 앞부분에 n - 1개의 시작 토큰을 추가하고, 문서 끝부분에 n - 1개의 종료 토큰을 추가합니다. 마지막으로 n-그램을 생성하여 직렬화된 파일에 기록합니다.
마지막 수정일 2026년 6월 10일