الانتقال إلى المحتوى الرئيسي

evalMLMethod

لإجراء التنبؤ باستخدام نماذج الانحدار المُقدَّرة، تُستخدَم الدالة evalMLMethod. راجع الرابط ضمن linearRegression.

stochasticLinearRegression

تُنفِّذ دالة التجميع stochasticLinearRegression أسلوب الانحدار المتدرّج العشوائي باستخدام نموذج خطي ودالة خسارة MSE. وتستخدم evalMLMethod للتنبؤ بالبيانات الجديدة.

stochasticLogisticRegression

تُنفِّذ دالة التجميع stochasticLogisticRegression أسلوب الهبوط التدريجي العشوائي لمشكلة التصنيف الثنائي. وتستخدم evalMLMethod للتنبؤ بالبيانات الجديدة.

naiveBayesClassifier

يُصنّف النص المُدخل باستخدام نموذج Naive Bayes مع n-grams وتنعيم لابلاس. يجب تهيئة النموذج في ClickHouse قبل استخدامه. البنية
naiveBayesClassifier(model_name, input_text);
الوسائط
  • model_name — اسم النموذج المُعَدّ مسبقًا. String يجب أن يكون النموذج معرّفًا في ملفات تكوين ClickHouse (انظر أدناه).
  • input_text — النص المراد تصنيفه. String تُعالَج المدخلات تمامًا كما أُدخِلت (مع الحفاظ على حالة الأحرف وعلامات الترقيم).
القيمة المعادة
  • معرّف الفئة المتوقعة على هيئة عدد صحيح غير موقّع. UInt32 تتوافق معرّفات الفئات مع التصنيفات المحددة أثناء إنشاء النموذج.
مثال صنّف نصًا باستخدام نموذج لاكتشاف اللغة:
SELECT naiveBayesClassifier('language', 'How are you?');
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘
قد تمثل النتيجة 0 اللغة الإنجليزية، بينما قد تشير 1 إلى الفرنسية — إذ تعتمد دلالات الفئات على بيانات التدريب لديك.

تفاصيل التنفيذ

الخوارزمية تستخدم خوارزمية التصنيف Naive Bayes مع تنعيم لابلاس للتعامل مع تسلسلات n-gram غير المرصودة، وذلك بالاستناد إلى احتمالات n-gram كما هو موضح هنا. الميزات الرئيسية
  • تدعم تسلسلات n-gram بأي طول
  • ثلاثة أوضاع للتقسيم إلى رموز:
    • byte: يعمل على البايتات الخام. كل بايت يُعد رمزًا واحدًا.
    • codepoint: يعمل على القيم القياسية في Unicode المفككة من UTF‑8. كل نقطة ترميز تُعد رمزًا واحدًا.
    • token: يُقسِّم عند تتابعات المسافات البيضاء في Unicode (regex \s+). تكون الرموز سلاسل فرعية غير بيضاء؛ وتُعد علامات الترقيم جزءًا من الرمز إذا كانت ملاصقة له (على سبيل المثال، “you?” يُعد رمزًا واحدًا).

إعداد النموذج

يمكنك العثور على شيفرة مصدرية نموذجية لإنشاء نموذج Naive Bayes لاكتشاف اللغة هنا. بالإضافة إلى ذلك، تتوفر نماذج نموذجية وملفات التكوين المرتبطة بها هنا. فيما يلي مثال على إعداد نموذج Naive Bayes في ClickHouse:
<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: نقاط ترميز Unicode
- token: رموز الكلمات
tokenمطلوب
nحجم n-gram (في وضع token):
- 1=كلمة واحدة
- 2=أزواج كلمات
- 3=ثلاثيات كلمات
2مطلوب
alphaمعامل تنعيم لابلاس المستخدم أثناء التصنيف لمعالجة سلاسل n-grams التي لا تظهر في النموذج0.51.0
priorsاحتمالات الفئات (% من المستندات التي تنتمي إلى فئة)60% للفئة 0، 40% للفئة 1توزيع متساوٍ
دليل تدريب النموذج تنسيق الملف بتنسيق مقروء بشريًا، بالنسبة إلى n=1 ووضع token، قد يبدو النموذج كما يلي:
<class_id> <n-gram> <count>
0 excellent 15
1 refund 28
بالنسبة إلى n=3 ونمط codepoint، فقد يبدو الأمر كما يلي:
<class_id> <n-gram> <count>
0 exc 15
1 ref 28
لا يستخدم ClickHouse التنسيق المقروء للبشر مباشرةً؛ إذ يجب تحويله إلى التنسيق الثنائي الموضّح أدناه. تفاصيل التنسيق الثنائي يُخزَّن كل n-gram كما يلي:
  1. class_id بحجم 4 بايت (UInt، little-endian)
  2. طول بايتات n-gram بحجم 4 بايت (UInt، little-endian)
  3. بايتات n-gram الخام
  4. count بحجم 4 بايت (UInt، little-endian)
متطلبات المعالجة المسبقة قبل إنشاء النموذج من مجموعة المستندات، يجب إجراء معالجة مسبقة للمستندات لاستخراج n-grams وفقًا للقيمتين المحددتين mode وn. توضّح الخطوات التالية هذه المعالجة المسبقة:
  1. أضف علامات الحدود في بداية كل مستند ونهايته استنادًا إلى وضع تقطيع الرموز:
    • Byte: 0x01 (البداية)، 0xFF (النهاية)
    • نقطة ترميز: U+10FFFE (البداية)، U+10FFFF (النهاية)
    • Token: <s> (البداية)، </s> (النهاية)
    ملاحظة: تُضاف (n - 1) من الرموز في كلٍّ من بداية المستند ونهايته.
  2. Example على n=3 في وضع token:
    • المستند: "ClickHouse is fast"
    • تتم معالجته على النحو التالي: <s> <s> ClickHouse is fast </s> </s>
    • مقاطع trigram المُولَّدة:
      • <s> <s> ClickHouse
      • <s> ClickHouse is
      • ClickHouse is fast
      • is fast </s>
      • fast </s> </s>
لتبسيط إنشاء النموذج لوضعي byte وcodepoint، قد يكون من المناسب أولًا تقسيم المستند إلى tokens (قائمة من قيم byte في وضع byte، وقائمة من قيم codepoint في وضع codepoint). بعد ذلك، أضِف n - 1 من tokens البداية في أول المستند وn - 1 من tokens النهاية في آخره. وأخيرًا، أنشئ n-grams واكتبها في الملف المُسلسَل.
آخر تعديل في ٢٥ يونيو ٢٠٢٦