> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> تحتوي على 100 مليون متجه من مجموعة بيانات LAION 5B

# مجموعة بيانات LAION 5B

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

<div id="introduction">
  ## المقدمة
</div>

تحتوي [مجموعة بيانات LAION 5b](https://laion.ai/blog/laion-5b/) على 5.85 مليار تضمين للصور والنصوص،
إلى جانب البيانات الوصفية المرتبطة بالصور. أُنشئت هذه التضمينات باستخدام نموذج `Open AI CLIP` ‏[ViT-L/14](https://huggingface.co/sentence-transformers/clip-ViT-L-14). ويبلغ
بُعد كل متجه تضمين `768`.

يمكن استخدام مجموعة البيانات هذه لنمذجة جوانب التصميم وتحديد السعة والأداء لتطبيق
بحث متجهي واسع النطاق في بيئة واقعية. كما يمكن استخدام مجموعة البيانات هذه لكلٍّ من البحث من النص إلى الصورة
والبحث من صورة إلى صورة.

<div id="dataset-details">
  ## تفاصيل مجموعة البيانات
</div>

مجموعة البيانات الكاملة متاحة كمزيج من ملفات `npy` و`Parquet` على [the-eye.eu](https://the-eye.eu/public/AI/cah/laion5b/)

أتاح ClickHouse مجموعة فرعية تضم 100 مليون متجه في حاوية `S3`.
تحتوي حاوية `S3` على 10 ملفات `Parquet`، ويضم كل ملف `Parquet` 10 ملايين صف.

نوصي المستخدمين أولاً بإجراء تقدير للحجم لتحديد متطلبات التخزين والذاكرة لهذه المجموعة من البيانات، بالرجوع إلى [الوثائق](/ar/reference/engines/table-engines/mergetree-family/annindexes).

<div id="steps">
  ## الخطوات
</div>

<Steps>
  <Step>
    ### إنشاء جدول

    أنشئ جدول `laion_5b_100m` لتخزين متجهات التضمين والسمات المرتبطة بها:

    ```sql theme={null}
    CREATE TABLE laion_5b_100m
    (
        id UInt32,
        image_path String,
        caption String,
        NSFW Nullable(String) default 'unknown',
        similarity Float32,
        LICENSE Nullable(String),
        url String,
        key String,
        status LowCardinality(String),
        width Int32,
        height Int32,
        original_width Int32,
        original_height Int32,
        exif Nullable(String),
        md5 String,
        vector Array(Float32) CODEC(NONE)
    ) ENGINE = MergeTree ORDER BY (id)
    ```

    إن `id` ليس سوى عدد صحيح يزداد تدريجيًا. ويمكن استخدام السمات الإضافية في شروط التصفية لفهم
    البحث عن تشابه المتجهات عند دمجه مع التصفية اللاحقة/التصفية المسبقة، كما هو موضح في [الوثائق](/ar/reference/engines/table-engines/mergetree-family/annindexes)
  </Step>

  <Step>
    ### تحميل البيانات

    لتحميل البيانات من جميع ملفات `Parquet`، شغّل تعليمة SQL التالية:

    ```sql theme={null}
    INSERT INTO laion_5b_100m SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/laion-5b/laion5b_100m_*.parquet');
    ```

    سيستغرق تحميل 100 مليون صف في الجدول بضع دقائق.

    بدلًا من ذلك، يمكن تنفيذ تعليمات SQL منفصلة لتحميل عدد محدد من الملفات / الصفوف.

    ```sql theme={null}
    INSERT INTO laion_5b_100m SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/laion-5b/laion5b_100m_part_1_of_10.parquet');
    INSERT INTO laion_5b_100m SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/laion-5b/laion5b_100m_part_2_of_10.parquet');
    ⋮
    ```
  </Step>

  <Step>
    ### تشغيل بحث تشابه المتجهات بأسلوب القوة الغاشمة

    يتضمن بحث KNN (k - أقرب الجيران) أو البحث بالقوة الغاشمة حساب المسافة بين كل متجه في مجموعة البيانات ومتجه التضمين المستخدم في البحث، ثم ترتيب هذه المسافات للحصول على أقرب الجيران. يمكننا استخدام أحد المتجهات من مجموعة البيانات نفسها متجهًا للبحث. على سبيل المثال:

    ```sql title="Query" theme={null}
    SELECT id, url 
    FROM laion_5b_100m
    ORDER BY cosineDistance( vector, (SELECT vector FROM laion_5b_100m WHERE id = 9999) ) ASC
    LIMIT 20

    The vector in the row with id = 9999 is the embedding for an image of a Deli restaurant.
    ```

    ```response title="Response" highlight={24} theme={null}
        ┌───────id─┬─url───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
     1. │     9999 │ https://certapro.com/belleville/wp-content/uploads/sites/1369/2017/01/McAlistersFairviewHgts.jpg                                                                                                                                  │
     2. │ 60180509 │ https://certapro.com/belleville/wp-content/uploads/sites/1369/2017/01/McAlistersFairviewHgts-686x353.jpg                                                                                                                          │
     3. │  1986089 │ https://www.gannett-cdn.com/-mm-/ceefab710d945bb3432c840e61dce6c3712a7c0a/c=30-0-4392-3280/local/-/media/2017/02/14/FortMyers/FortMyers/636226855169587730-McAlister-s-Exterior-Signage.jpg?width=534&amp;height=401&amp;fit=crop │
     4. │ 51559839 │ https://img1.mashed.com/img/gallery/how-rich-is-the-mcalisters-deli-ceo-and-whats-the-average-pay-of-its-employees/intro-1619793841.jpg                                                                                           │
     5. │ 22104014 │ https://www.restaurantmagazine.com/wp-content/uploads/2016/04/Largest-McAlisters-Deli-Franchisee-to-Expand-into-Nebraska.jpg                                                                                                      │
     6. │ 54337236 │ http://www.restaurantnews.com/wp-content/uploads/2015/11/McAlisters-Deli-Giving-Away-Gift-Cards-With-Win-One-Gift-One-Holiday-Promotion.jpg                                                                                       │
     7. │ 20770867 │ http://www.restaurantnews.com/wp-content/uploads/2016/04/McAlisters-Deli-Aims-to-Attract-New-Franchisees-in-Florida-as-Chain-Enters-New-Markets.jpg                                                                               │
     8. │ 22493966 │ https://www.restaurantmagazine.com/wp-content/uploads/2016/06/McAlisters-Deli-Aims-to-Attract-New-Franchisees-in-Columbus-Ohio-as-Chain-Expands-feature.jpg                                                                       │
     9. │  2224351 │ https://holttribe.com/wp-content/uploads/2019/10/60880046-879A-49E4-8E13-1EE75FB24980-900x675.jpeg                                                                                                                                │
    10. │ 30779663 │ https://www.gannett-cdn.com/presto/2018/10/29/PMUR/685f3e50-cce5-46fb-9a66-acb93f6ea5e5-IMG_6587.jpg?crop=2166,2166,x663,y0&amp;width=80&amp;height=80&amp;fit=bounds                                                             │
    11. │ 54939148 │ https://www.priceedwards.com/sites/default/files/styles/staff_property_listing_block/public/for-lease/images/IMG_9674%20%28Custom%29_1.jpg?itok=sa8hrVBT                                                                          │
    12. │ 95371605 │ http://www.restaurantmagazine.com/wp-content/uploads/2015/08/McAlisters-Deli-Signs-Development-Agreement-with-Kingdom-Foods-to-Grow-in-Southern-Mississippi.jpg                                                                   │
    13. │ 79564563 │ https://www.restaurantmagazine.com/wp-content/uploads/2016/05/McAlisters-Deli-Aims-to-Attract-New-Franchisees-in-Denver-as-Chain-Expands.jpg                                                                                      │
    14. │ 76429939 │ http://www.restaurantnews.com/wp-content/uploads/2016/08/McAlisters-Deli-Aims-to-Attract-New-Franchisees-in-Pennsylvania-as-Chain-Expands.jpg                                                                                     │
    15. │ 96680635 │ https://img.claz.org/tc/400x320/9w3hll-UQNHGB9WFlhSGAVCWhheBQkeWh5SBAkUWh9SBgsJFxRcBUMNSR4cAQENXhJARwgNTRYcBAtDWh5WRQEJXR5SR1xcFkYKR1tYFkYGR1pVFiVyP0ImaTA                                                                        │
    16. │ 48716846 │ http://tse2.mm.bing.net/th?id=OIP.nN2qJqGUJs_fVNdTiFyGnQHaEc                                                                                                                                                                      │
    17. │  4472333 │ https://sgi.offerscdn.net/i/zdcs-merchants/05lG0FpXPIvsfiHnT3N8FQE.h200.w220.flpad.v22.bffffff.png                                                                                                                                │
    18. │ 82667887 │ https://irs2.4sqi.net/img/general/200x200/11154479_OEGbrkgWB5fEGrrTkktYvCj1gcdyhZn7TSQSAqN2Yqw.jpg                                                                                                                                │
    19. │ 57525607 │ https://knoji.com/images/logo/mcalistersdelicom.jpg                                                                                                                                                                               │
    20. │ 15785896 │ https://www.groupnimb.com/mimg/merimg/mcalister-s-deli_1446088739.jpg                                                                                                                                                             │
        └──────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

    20 rows in set. Elapsed: 3.968 sec. Processed 100.38 million rows, 320.81 GB (25.30 million rows/s., 80.84 GB/s.)
    ```

    سجِّل زمن استجابة الاستعلام لمقارنته لاحقًا بزمن استجابة الاستعلام باستخدام ANN (مع فهرس المتجهات).
    مع 100 مليون صف، قد يستغرق الاستعلام أعلاه بدون فهرس متجهات بضع ثوانٍ أو دقائق حتى يكتمل.
  </Step>

  <Step>
    ### بناء فهرس للتشابه المتجهي

    نفّذ عبارة SQL التالية لتعريف فهرس للتشابه المتجهي وإنشائه على العمود `vector` في الجدول `laion_5b_100m`:

    ```sql theme={null}
    ALTER TABLE laion_5b_100m ADD INDEX vector_index vector TYPE vector_similarity('hnsw', 'cosineDistance', 768, 'bf16', 64, 512);

    ALTER TABLE laion_5b_100m MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2;
    ```

    تُشرح المعلمات واعتبارات الأداء الخاصة بإنشاء الفهرس والبحث في [الوثائق](/ar/reference/engines/table-engines/mergetree-family/annindexes).
    تستخدم التعليمة أعلاه القيمتين 64 و512، على الترتيب، لمعلمتَي HNSW الفائقتين `M` و`ef_construction`.
    تحتاج إلى اختيار القيم المثلى لهذه المعلمات بعناية من خلال تقييم وقت بناء الفهرس وجودة نتائج البحث
    المرتبطة بالقيم المحددة.

    قد يستغرق بناء الفهرس وحفظه بضع ساعات حتى لمجموعة البيانات الكاملة البالغة 100 مليون، وذلك حسب عدد أنوية CPU المتاحة وعرض نطاق التخزين.
  </Step>

  <Step>
    ### إجراء بحث ANN

    بمجرد إنشاء فهرس تشابه المتجهات، ستستخدم استعلامات البحث المتجهي هذا الفهرس تلقائيًا:

    ```sql title="Query" theme={null}
    SELECT id, url 
    FROM laion_5b_100m
    ORDER BY cosineDistance( vector, (SELECT vector FROM laion_5b_100m WHERE id = 9999) ) ASC
    LIMIT 20

    ```

    قد يستغرق التحميل الأول لفهرس المتجهات إلى الذاكرة بضع ثوانٍ أو دقائق.
  </Step>

  <Step>
    ### إنشاء متجهات التضمين لاستعلام البحث

    تم إنشاء متجهات التضمين لمجموعة البيانات `LAION 5b` باستخدام نموذج `ViT-L/14` من `OpenAI CLIP`.

    يَرِد أدناه مثال على برنامج نصي بلغة Python يوضّح كيفية إنشاء
    متجهات التضمين برمجيًا باستخدام واجهات برمجة تطبيقات `CLIP`. ثم يُمرَّر متجه تضمين البحث
    بوصفه وسيطًا إلى الدالة [`cosineDistance()`](/ar/reference/functions/regular-functions/distance-functions#cosineDistance) ضمن استعلام `SELECT`.

    لتثبيت الحزمة `clip`، يُرجى الرجوع إلى [مستودع OpenAI على GitHub](https://github.com/openai/clip).

    ```python theme={null}
    import torch
    import clip
    import numpy as np
    import sys
    import clickhouse_connect

    device = "cuda" if torch.cuda.is_available() else "cpu"
    model, preprocess = clip.load("ViT-L/14", device=device)

    # Search for images that contain both a dog and a cat
    text = clip.tokenize(["a dog and a cat"]).to(device)

    with torch.no_grad():
        text_features = model.encode_text(text)
        np_arr = text_features.detach().cpu().numpy()

        # Pass ClickHouse credentials here
        chclient = clickhouse_connect.get_client()

        params = {'v1': list(np_arr[0])}
        result = chclient.query("SELECT id, url FROM laion_5b_100m ORDER BY cosineDistance(vector, %(v1)s) LIMIT 100",
                                parameters=params)

        # Write the results to a simple HTML page that can be opened in the browser. Some URLs may have become obsolete.
        print("<html>")
        for r in result.result_rows:
            print("<img src = ", r[1], 'width="200" height="200">')
        print("</html>")
    ```

    تظهر أدناه نتيجة البحث عن تشابه المتجهات المذكور أعلاه:

    <Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/qvDh3oxLPI7c74wx/images/getting-started/example-datasets/laion5b_visualization_1.png?fit=max&auto=format&n=qvDh3oxLPI7c74wx&q=85&s=ab2022d7c787310be8d3935768abfdb4" alt="نتائج البحث عن تشابه المتجهات" size="md" width="3400" height="1794" data-path="images/getting-started/example-datasets/laion5b_visualization_1.png" />
  </Step>
</Steps>
