> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق دوال تعلّم الآلة

# دوال تعلّم الآلة

<div id="evalmlmethod">
  ## evalMLMethod
</div>

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

<div id="stochasticlinearregression">
  ## stochasticLinearRegression
</div>

تُنفِّذ دالة التجميع [stochasticLinearRegression](/docs/ar/reference/functions/aggregate-functions/stochasticLinearRegression) أسلوب الانحدار المتدرّج العشوائي باستخدام نموذج خطي ودالة خسارة MSE. وتستخدم `evalMLMethod` للتنبؤ بالبيانات الجديدة.

<div id="stochasticlogisticregression">
  ## stochasticLogisticRegression
</div>

تُنفِّذ دالة التجميع [stochasticLogisticRegression](/docs/ar/reference/functions/aggregate-functions/stochasticLogisticRegression) أسلوب الهبوط التدريجي العشوائي لمشكلة التصنيف الثنائي. وتستخدم `evalMLMethod` للتنبؤ بالبيانات الجديدة.

<div id="naivebayesclassifier">
  ## naiveBayesClassifier
</div>

يُصنّف النص المُدخل باستخدام نموذج Naive Bayes مع n-grams وتنعيم لابلاس. يجب تهيئة النموذج في ClickHouse قبل استخدامه.

**البنية**

```sql theme={null}
naiveBayesClassifier(model_name, input_text);
```

**الوسائط**

* `model_name` — اسم النموذج المُعَدّ مسبقًا. [String](/docs/ar/reference/data-types/string)
  يجب أن يكون النموذج معرّفًا في ملفات تكوين ClickHouse (انظر أدناه).
* `input_text` — النص المراد تصنيفه. [String](/docs/ar/reference/data-types/string)
  تُعالَج المدخلات تمامًا كما أُدخِلت (مع الحفاظ على حالة الأحرف وعلامات الترقيم).

**القيمة المعادة**

* معرّف الفئة المتوقعة على هيئة عدد صحيح غير موقّع. [UInt32](/docs/ar/reference/data-types/int-uint)
  تتوافق معرّفات الفئات مع التصنيفات المحددة أثناء إنشاء النموذج.

**مثال**

صنّف نصًا باستخدام نموذج لاكتشاف اللغة:

```sql theme={null}
SELECT naiveBayesClassifier('language', 'How are you?');
```

```response theme={null}
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘
```

*قد تمثل النتيجة `0` اللغة الإنجليزية، بينما قد تشير `1` إلى الفرنسية — إذ تعتمد دلالات الفئات على بيانات التدريب لديك.*

***

<div id="implementation-details">
  ### تفاصيل التنفيذ
</div>

**الخوارزمية**
تستخدم خوارزمية التصنيف Naive Bayes مع [تنعيم لابلاس](https://en.wikipedia.org/wiki/Additive_smoothing) للتعامل مع تسلسلات n-gram غير المرصودة، وذلك بالاستناد إلى احتمالات n-gram كما هو موضح [هنا](https://web.stanford.edu/~jurafsky/slp3/4.pdf).

**الميزات الرئيسية**

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

***

<div id="model-configuration">
  ### إعداد النموذج
</div>

يمكنك العثور على شيفرة مصدرية نموذجية لإنشاء نموذج Naive Bayes لاكتشاف اللغة [هنا](https://github.com/nihalzp/ClickHouse-NaiveBayesClassifier-Models).

بالإضافة إلى ذلك، تتوفر نماذج نموذجية وملفات التكوين المرتبطة بها [هنا](https://github.com/nihalzp/ClickHouse-NaiveBayesClassifier-Models/tree/main/models).

فيما يلي مثال على إعداد نموذج Naive Bayes في ClickHouse:

```xml theme={null}
<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**   | طريقة تجزئة النص:<br />- `byte`: تسلسلات بايت<br />- `codepoint`: نقاط ترميز Unicode<br />- `token`: رموز الكلمات | `token`                                                  | *مطلوب*      |
| **n**      | حجم `n-gram` (في وضع `token`):<br />- `1`=كلمة واحدة<br />- `2`=أزواج كلمات<br />- `3`=ثلاثيات كلمات              | `2`                                                      | *مطلوب*      |
| **alpha**  | معامل تنعيم لابلاس المستخدم أثناء التصنيف لمعالجة سلاسل `n-grams` التي لا تظهر في النموذج                         | `0.5`                                                    | `1.0`        |
| **priors** | احتمالات الفئات (% من المستندات التي تنتمي إلى فئة)                                                               | 60% للفئة 0، 40% للفئة 1                                 | توزيع متساوٍ |

**دليل تدريب النموذج**

**تنسيق الملف**
بتنسيق مقروء بشريًا، بالنسبة إلى `n=1` ووضع `token`، قد يبدو النموذج كما يلي:

```text theme={null}
<class_id> <n-gram> <count>
0 excellent 15
1 refund 28
```

بالنسبة إلى `n=3` ونمط `codepoint`، فقد يبدو الأمر كما يلي:

```text theme={null}
<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` و`نقطة ترميز`، قد يكون من المناسب أولًا تقسيم المستند إلى رموز (قائمة من قيم `byte` في وضع `byte`، وقائمة من قيم `نقطة ترميز` في وضع `نقطة ترميز`). بعد ذلك، أضِف `n - 1` من رموز البداية في أول المستند و`n - 1` من رموز النهاية في آخره. وأخيرًا، أنشئ n-grams واكتبها في الملف المُسلسَل.

***

{/*AUTOGENERATED_START*/}

<div id="evalmlmethod">
  ## evalMLMethod
</div>

أُضيفت في: v20.1.0

تُطبِّق نموذج تعلّم آلي مُدرَّبًا على سمات الإدخال لتوليد تنبؤات.

**الصيغة**

```sql theme={null}
evalMLMethod(model, x1[, x2, ...])
```

**المعاملات**

* `model` — نموذج تعلّم آلي مُدرَّب. [`AggregateFunctionState`](/docs/ar/reference/data-types/aggregatefunction)
* `x1, x2, ...` — قيم السمات المستخدمة للتنبؤ. [`Float*`](/docs/ar/reference/data-types/float) أو [`(U)Int*`](/docs/ar/reference/data-types/int-uint)

**القيمة المُعادة**

تُرجِع القيمة المتوقعة استنادًا إلى النموذج المُدرَّب. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT
evalMLMethod(model, trip_distance),
total_amount
FROM trips
LEFT JOIN models ON year = toYear(pickup_datetime)
LIMIT 5
```

```response title=Response theme={null}
┌─evalMLMethod(model, trip_distance)─┬─total_amount─┐
│ 8.087692004204174                  │ 5.4          │
│ 7.861181608305352                  │ 4.6          │
│ 26.661544467907536                 │ 23.4         │
│ 8.767223191900637                  │ 5.8          │
│ 10.80581675499003                  │ 9            │
└────────────────────────────────────┴──────────────┘
```

<div id="naivebayesclassifier">
  ## naiveBayesClassifier
</div>

أُضيف في: v25.11.0

يُصنّف النص المُدخل باستخدام قاموس [`NAIVE_BAYES`](/docs/ar/reference/statements/create/dictionary/layouts/naive-bayes). ويُرجع قيمة الفئة المتوقعة نفسها التي تُرجعها `dictGet(dictionary_name, class_attribute, input_text)`، حيث إن class\_attribute هو اسم سمة تصنيف الفئة المُهيأة في [التخطيط](/docs/ar/reference/statements/create/dictionary/layouts/naive-bayes#layout-parameters) الخاصة بالقاموس. وعلى عكس `dictGet`، يكون نوع النتيجة دائمًا `UInt32` بدلًا من النوع المُعلن لسمة الفئة، ويجب أن يكون `input_text` من النوع `String` (ولا يُطبَّق أي تحويل لنوع المفتاح).

<Note>
  هذه الدالة غير حتمية: قد تُرجع نتائج مختلفة للوسائط نفسها.
</Note>

**الصياغة**

```sql theme={null}
naiveBayesClassifier(dictionary_name, input_text)
```

**المعاملات**

* `dictionary_name` — اسم قاموس يستخدم التخطيط NAIVE\_BAYES. [`String`](/docs/ar/reference/data-types/string)
* `input_text` — النص المراد تصنيفه. [`String`](/docs/ar/reference/data-types/string)

**القيمة المعادة**

معرّف الفئة المتوقعة. [`UInt32`](/docs/ar/reference/data-types/int-uint)

**أمثلة**

**تصنيف النص**

```sql title=Query theme={null}
SELECT naiveBayesClassifier('model', 'some text');
```

```response title=Response theme={null}
0
```

<div id="naiveBayesClassifierWithAllProbs">
  ## naiveBayesClassifierWithAllProbs
</div>

أُضيفت في: v26.7.0

تُصنِّف نص الإدخال باستخدام قاموس [`NAIVE_BAYES`](/docs/ar/reference/statements/create/dictionary/layouts/naive-bayes) وتُرجِع جميع الفئات مع احتمالاتها، مرتبة من الأكثر احتمالًا إلى الأقل.

<Note>
  هذه الدالة غير حتمية: قد تُرجِع نتائج مختلفة للوسيطات نفسها.
</Note>

**الصيغة**

```sql theme={null}
naiveBayesClassifierWithAllProbs(dictionary_name, input_text)
```

**المعاملات**

* `dictionary_name` — اسم قاموس ذي تخطيط NAIVE\_BAYES. [`String`](/docs/ar/reference/data-types/string)
* `input_text` — النص المراد تصنيفه. [`String`](/docs/ar/reference/data-types/string)

**القيمة المُعادة**

مصفوفة من عناصر Tuple بالتنسيق (معرّف\_الفئة، الاحتمال)، مرتبة من الأعلى احتمالًا إلى الأقل. [`Array(Tuple(UInt32, Float64))`](/docs/ar/reference/data-types/array)

**أمثلة**

**كل احتمالات الفئات**

```sql title=Query theme={null}
SELECT naiveBayesClassifierWithAllProbs('model', 'some text');
```

```response title=Response theme={null}
[(0,0.85),(1,0.15)]
```

<div id="naiveBayesClassifierWithProb">
  ## naiveBayesClassifierWithProb
</div>

أُضيف في: v26.7.0

يُصنّف النص المُدخل باستخدام قاموس [`NAIVE_BAYES`](/docs/ar/reference/statements/create/dictionary/layouts/naive-bayes) ويُرجع الفئة المتوقعة مع احتمالها.

<Note>
  هذه الدالة غير حتمية: قد تُرجع نتائج مختلفة للوسيطات نفسها.
</Note>

**البنية**

```sql theme={null}
naiveBayesClassifierWithProb(dictionary_name, input_text)
```

**الوسائط**

* `dictionary_name` — اسم قاموس بتخطيط NAIVE\_BAYES. [`String`](/docs/ar/reference/data-types/string)
* `input_text` — النص المراد تصنيفه. [`String`](/docs/ar/reference/data-types/string)

**القيمة المُعادة**

Tuple يتكوّن من (class\_id, probability). [`Tuple(UInt32, Float64)`](/docs/ar/reference/data-types/tuple)

**أمثلة**

**التصنيف مع الاحتمال**

```sql title=Query theme={null}
SELECT naiveBayesClassifierWithProb('model', 'some text');
```

```response title=Response theme={null}
(0,0.85)
```
