اختيار المحلل المناسب لحالة الاستخدام الخاصة بك

يركز هذا الدليل على اتخاذ القرارات العملية لاختيار المحلل. للحصول على التفاصيل الفنية حول مكونات المحلل وكيفية إضافة معلمات المحلل، راجع نظرة عامة على المحلل.

فهم المحللات في دقيقتين

في Milvus، يقوم المحلل بمعالجة النص المخزن في هذا الحقل لجعله قابلاً للبحث عن ميزات مثل البحث عن النص الكامل (BM25) أو مطابقة العبارات أو مطابقة النص. فكر فيه كمعالج نصي يحول المحتوى الخام الخاص بك إلى رموز قابلة للبحث.

يعمل المحلل في مسار عمل بسيط من مرحلتين:

Analyzer Workflow سير عمل المحلِّل

  1. الترميز (مطلوب): تطبّق هذه المرحلة الأولية أداة ترميز لتقسيم سلسلة نصية متصلة إلى وحدات منفصلة ذات معنى تسمى الرموز. يمكن أن تختلف طريقة الترميز بشكل كبير اعتمادًا على اللغة ونوع المحتوى.

  2. تصفية الرموز (اختياري): بعد الترميز، يتم تطبيق المرشحات لتعديل الرموز أو إزالتها أو تنقيحها. يمكن أن تشمل هذه العمليات تحويل جميع الرموز إلى أحرف صغيرة، أو إزالة الكلمات الشائعة التي لا معنى لها (مثل الكلمات الوقفية)، أو اختزال الكلمات إلى شكلها الجذري (الجذعية).

مثال:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

لماذا اختيار المحلّل مهم

يمكن أن يؤدي اختيار المحلل الخاطئ إلى جعل المستندات ذات الصلة غير قابلة للبحث أو إرجاع نتائج غير ذات صلة.

يلخص الجدول التالي المشاكل الشائعة الناجمة عن الاختيار غير الصحيح للمحلل ويوفر حلولاً عملية لتشخيص مشاكل البحث.

المشكلة

الأعراض

مثال (المدخلات والمخرجات)

السبب (محلل سيء)

الحل (محلل جيد)

الإفراط في الترميز

تفشل الاستعلامات النصية للمصطلحات التقنية أو المعرفات أو عناوين URL في العثور على المستندات ذات الصلة.

  • "user_id"['user', 'id']

  • "C++"['c']

standard محلل

استخدم أداة whitespace أداة ترميز؛ وادمجها مع alphanumonly مرشح.

الترميز الناقص

فشل البحث عن أحد مكونات عبارة متعددة الكلمات في إرجاع المستندات التي تحتوي على العبارة الكاملة.

"state-of-the-art"['state-of-the-art']

محلل مع whitespace أداة ترميز

استخدم أداة standard أداة ترميز للتقسيم على علامات الترقيم والمسافات، واستخدم عامل تصفية مخصص من regex.

عدم تطابق اللغة

نتائج البحث عن لغة معينة غير منطقية أو غير موجودة.

النص الصيني: "机器学习"['机器学习'] (رمز رمزي واحد)

english محلل

استخدم محللاً خاصاً بلغة معينة، مثل chinese.

السؤال الأول: هل تحتاج إلى اختيار محلل؟

بالنسبة للعديد من حالات الاستخدام، لا تحتاج إلى القيام بأي شيء خاص. دعنا نحدد ما إذا كنت واحدًا منهم.

السلوك الافتراضي: standard المحلل

إذا لم تقم بتحديد محلل عند استخدام ميزات استرجاع النص مثل البحث عن النص الكامل، يستخدم ميلفوس تلقائيًا standard المحلِّل.

محلل standard

  • يقسم النص على المسافات وعلامات الترقيم

  • يحول جميع الرموز إلى أحرف صغيرة

  • يزيل مجموعة مضمنة من كلمات الوقف الشائعة في اللغة الإنجليزية ومعظم علامات الترقيم

مثال على التحويل:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

معايير القرار: فحص سريع

استخدم هذا الجدول لتحديد ما إذا كان محلل standard الافتراضي يلبي احتياجاتك بسرعة. إذا كان لا يلبي، فستحتاج إلى اختيار مسار مختلف.

المحتوى الخاص بك

هل المحلل القياسي مناسب؟

لماذا

ما تحتاجه

منشورات المدونة الإنجليزية

✅ نعم

السلوك الافتراضي كافٍ.

استخدم الافتراضي (لا حاجة إلى تكوين).

المستندات الصينية

❌ لا

الكلمات الصينية ليس لها مسافات وسيتم التعامل معها كرمز واحد.

استخدم محلل chinese محلل

الوثائق الفنية

❌ لا

يتم تجريد علامات الترقيم من المصطلحات مثل C++.

قم بإنشاء محلل مخصص باستخدام whitespace أداة ترميز و alphanumonly مرشح.

لغات مفصولة بمسافات مثل النص الفرنسي/الإسباني

⚠️ ربما

قد لا تتطابق الأحرف المعلمة (café مقابل cafe).

يوصى باستخدام محلل مخصص مع asciifolding موصى به للحصول على نتائج أفضل.

لغات متعددة اللغات أو غير معروفة

❌ لا

يفتقر محلل standard إلى المنطق الخاص باللغات اللازمة للتعامل مع مجموعات الأحرف المختلفة وقواعد الترميز.

استخدم محللاً مخصصًا مع icu أداة الترميز لترميز الرموز أحادية الرمز.

بدلاً من ذلك، ضع في اعتبارك تكوين محللات متعددة اللغات أو معرّف لغة لمعالجة أكثر دقة للمحتوى متعدد اللغات.

إذا لم يتمكن محلل standard الافتراضي من تلبية متطلباتك، فأنت بحاجة إلى تنفيذ محلل مختلف. لديك مساران:

المسار أ: استخدام محللات مدمجة

المحللات المدمجة هي حلول مهيأة مسبقاً للغات الشائعة. إنها أسهل طريقة للبدء عندما لا يكون المحلل القياسي الافتراضي مناسبًا تمامًا.

المحللات المدمجة المتاحة

المحلل

دعم اللغة

المكونات

ملاحظات

standard

معظم اللغات المفصولة بمسافات (الإنجليزية والفرنسية والألمانية والإسبانية وغيرها)

  • أداة الترميز: standard

  • المرشحات: lowercase

محلل للأغراض العامة لمعالجة النصوص الأولية. بالنسبة للسيناريوهات أحادية اللغة، توفر المحللات الخاصة بكل لغة (مثل english) أداءً أفضل.

english

مخصص للغة الإنجليزية، والذي يطبق الجذعية وإزالة كلمات الوقف لمطابقة دلالات اللغة الإنجليزية بشكل أفضل

  • أداة ترميز: standard

  • المرشحات lowercase stemmer , stop

موصى به للمحتوى باللغة الإنجليزية فقط على standard.

chinese

الصينية

  • Tokenizer: jieba

  • المرشحات: cnalphanumonly

يستخدم حاليًا القاموس الصيني المبسط افتراضيًا.

مثال على التنفيذ

لاستخدام محلل مدمج، ما عليك سوى تحديد نوعه في analyzer_params عند تحديد مخطط الحقل الخاص بك.

# Using built-in English analyzer
analyzer_params = {
    "type": "english"
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

للحصول على الاستخدام التفصيلي، راجع بحث النص الكامل أو مطابقة النص أو مطابقة العبارة.

المسار ب: إنشاء محلل مخصص

عندما لا تفي الخيارات المضمنة باحتياجاتك، يمكنك إنشاء محلل مخصص من خلال الجمع بين مُحلل الرموز ومجموعة من المرشحات. يمنحك ذلك تحكماً كاملاً في مسار معالجة النصوص.

الخطوة 1: اختر أداة الترميز بناءً على اللغة

اختر أداة الترميز بناءً على اللغة الأساسية للمحتوى الخاص بك:

اللغات الغربية

بالنسبة للغات المفصولة فضائيًا، لديك هذه الخيارات:

أداة الترميز

كيف يعمل

الأفضل ل

أمثلة

standard

تقسيم النص بناءً على المسافات وعلامات الترقيم

النص العام وعلامات الترقيم المختلطة

  • المدخلات "Hello, world! Visit example.com"

  • الإخراج ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

يقسم على أحرف المسافات البيضاء فقط

محتوى معالج مسبقًا، نص منسق من قبل المستخدم

  • المدخلات: "user_id = get_user_data()"

  • المخرجات ['user_id', '=', 'get_user_data()']

لغات شرق آسيا

تتطلب اللغات المستندة إلى القاموس أدوات ترميز متخصصة لتجزئة الكلمات بشكل صحيح:

الصينية

أداة ترميز

كيف يعمل

الأفضل ل

أمثلة

jieba

التجزئة القائمة على القاموس الصيني مع خوارزمية ذكية

موصى به للمحتوى الصيني - يجمع بين القاموس والخوارزميات الذكية، المصممة خصيصًا للغة الصينية

  • المدخلات "机器学习是人工智能的一个分支"

  • المخرجات ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

التحليل الصرفي النقي القائم على القاموس مع القاموس الصيني(cc-cedict)

بالمقارنة مع jieba ، يعالج النص الصيني بطريقة أكثر عمومية

  • المدخلات: "机器学习算法"

  • الإخراج: ["机器", "学习", "算法"]

اليابانية والكورية

اللغة

أداة الترميز

خيارات القاموس

الأفضل ل

أمثلة

اليابانية

lindera

ipadic (للأغراض العامة)، ipadic-neologd (المصطلحات الحديثة)، unidic (أكاديمي)

التحليل الصرفي مع معالجة الاسم الصحيح

  • المدخلات "東京都渋谷区"

  • المخرجات ["東京", "都", "渋谷", "区"]

الكورية

lindera

كو-ديك

التحليل الصرفي الكوري

  • المدخلات: "안녕하세요"

  • الإخراج: ["안녕", "하", "세요"]

لغات متعددة اللغات أو غير معروفة

للمحتوى الذي لا يمكن التنبؤ فيه باللغات أو المختلطة داخل المستندات:

أداة الترميز

كيف يعمل

الأفضل ل

أمثلة

icu

الترميز المدرك للرموز الأحادية (المكونات الدولية لليونيكود)

النصوص المختلطة أو اللغات غير المعروفة أو عندما يكون الترميز البسيط كافياً

  • الإدخال: "Hello 世界 مرحبا"

  • الإخراج: ['Hello', ' ', '世界', ' ', 'مرحبا']

متى يتم استخدام الرمز الموحد الدولي

  • اللغات المختلطة حيث يكون تحديد اللغة غير عملي.

  • أنت لا تريد النفقات الزائدة للمحللات متعددة اللغات أو معرف اللغة.

  • المحتوى الذي يحتوي على لغة أساسية مع كلمات أجنبية عرضية لا تساهم إلا قليلاً في المعنى العام (على سبيل المثال، نص إنجليزي مع أسماء علامات تجارية متفرقة أو مصطلحات تقنية باللغة اليابانية أو الفرنسية).

الأساليب البديلة: للحصول على معالجة أكثر دقة للمحتوى متعدد اللغات، ضع في اعتبارك استخدام محلل متعدد اللغات أو معرّف اللغة. للحصول على التفاصيل، راجع محلل متعدد اللغات أو معرّف اللغة.

الخطوة 2: أضف مرشحات للدقة

بعد اختيار أداة الترميز الخاصة بك، قم بتطبيق عوامل التصفية بناءً على متطلبات البحث الخاصة بك وخصائص المحتوى.

المرشحات شائعة الاستخدام

هذه الفلاتر ضرورية لمعظم تكوينات اللغات المنفصلة عن بعضها البعض (الإنجليزية، والفرنسية، والألمانية، والإسبانية، وغيرها) وتحسّن جودة البحث بشكل كبير:

التصفية

كيف تعمل

متى تستخدم

أمثلة

lowercase

تحويل جميع الرموز إلى أحرف صغيرة

عالمي - ينطبق على جميع اللغات ذات الأحرف الصغيرة

  • المدخلات ["Apple", "iPhone"]

  • الإخراج [['apple'], ['iphone']]

stemmer

اختزال الكلمات إلى صيغتها الجذرية

اللغات ذات تصريفات الكلمات (الإنجليزية والفرنسية والألمانية وغيرها)

للإنجليزية

  • المدخلات: ["running", "runs", "ran"]

  • الإخراج: [['run'], ['run'], ['ran']]

stop

إزالة الكلمات الشائعة التي لا معنى لها

معظم اللغات - فعّالة بشكل خاص للغات ذات التصريفات الفراغية

  • المدخلات: ["the", "quick", "brown", "fox"]

  • الإخراج: [[], ['quick'], ['brown'], ['fox']]

بالنسبة للغات شرق آسيا (الصينية واليابانية والكورية وغيرها)، ركز على المرشحات الخاصة بكل لغة بدلاً من ذلك. عادةً ما تستخدم هذه اللغات أساليب مختلفة لمعالجة النصوص وقد لا تستفيد بشكل كبير من عملية التصفية.

مرشحات تطبيع النص

تعمل هذه المرشحات على توحيد اختلافات النص لتحسين اتساق المطابقة:

المرشحات

كيف تعمل

متى تستخدم

أمثلة

asciifolding

تحويل الأحرف المعلمة إلى معادلات ASCII

المحتوى الدولي، المحتوى الذي ينشئه المستخدم

  • المدخلات ["café", "naïve", "résumé"]

  • الإخراج: [['cafe'], ['naive'], ['resume']]

تصفية الرموز

التحكم في الرموز التي يتم الاحتفاظ بها بناءً على محتوى الحرف أو طوله:

التصفية

كيف يعمل

متى تستخدم

أمثلة

removepunct

إزالة رموز علامات الترقيم المستقلة

تنظيف المخرجات من jieba ، lindera ، و icu الرموز المميزة التي ستعيد علامات الترقيم كرموز فردية

  • المدخلات ["Hello", "!", "world"]

  • الإخراج: [['Hello'], ['world']]

alphanumonly

الاحتفاظ بالحروف والأرقام فقط

المحتوى التقني، معالجة النص النظيف

  • المدخلات: ["user123", "test@email.com"]

  • الإخراج: [['user123'], ['test', 'email', 'com']]

length

إزالة الرموز خارج نطاق الطول المحدد

تصفية الضوضاء (الرموز الطويلة بشكل مفرط)

  • المدخلات: ["a", "very", "extraordinarily"]

  • الإخراج: [['a'], ['very'], []] (إذا كان الحد الأقصى = 10)

regex

تصفية مستندة إلى نمط مخصص

متطلبات الرموز الرمزية الخاصة بالمجال

  • المدخلات: ["test123", "prod456"]

  • الإخراج: [[], ['prod456']] (إذا كان expr="^prod")

مرشحات خاصة باللغة

تتعامل هذه المرشحات مع خصائص لغة محددة:

عامل التصفية

اللغة

كيف تعمل

أمثلة

decompounder

الألمانية

يقسم الكلمات المركبة إلى مكونات قابلة للبحث

  • المدخلات: ["dampfschifffahrt"]

  • الإخراج [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

الصينية

يحتفظ بالأحرف الصينية + أبجدية رقمية

  • الإدخال: ["Hello", "世界", "123", "!@#"]

  • الإخراج: [['Hello'], ['世界'], ['123'], []]

cncharonly

الصينية

يحتفظ بالأحرف الصينية فقط

  • الإدخال: ["Hello", "世界", "123"]

  • الإخراج: [[], ['世界'], []]

الخطوة 3: الجمع والتنفيذ

لإنشاء مُحلل مخصص، تقوم بتحديد مُحلل الرموز وقائمة من المرشحات في قاموس analyzer_params. يتم تطبيق المرشحات بالترتيب المدرجة به.

# Example: A custom analyzer for technical content
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase", "alphanumonly"]
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

النهائي: اختبر مع run_analyzer

تحقق دائمًا من صحة التكوين الخاص بك قبل تطبيقه على مجموعة:

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

المشاكل الشائعة التي يجب التحقق منها

  • الإفراط في الترميز: المصطلحات الفنية التي يتم تقسيمها بشكل غير صحيح

  • نقص الترميز: عدم فصل العبارات بشكل صحيح

  • الرموز المفقودة: مصطلحات مهمة يتم تصفيتها

للاطلاع على الاستخدام التفصيلي، راجع Run_analyzer.

يوفر هذا القسم التكوينات الموصى بها لأداة الترميز والتصفية لحالات الاستخدام الشائعة عند العمل مع أدوات التحليل في Milvus. اختر المجموعة التي تتوافق بشكل أفضل مع نوع المحتوى ومتطلبات البحث الخاصة بك.

قبل تطبيق محلل على مجموعتك، نوصيك باستخدام run_analyzer لاختبار أداء تحليل النص والتحقق من صحة أدائه.

اللغات ذات علامات التشكيل (الفرنسية والإسبانية والألمانية وغيرها)

استخدم أداة ترميز standard مع تحويل الأحرف الصغيرة، والوقف الخاص باللغة، وإزالة الكلمات المتوقفة. يعمل هذا التكوين أيضًا مع اللغات الأوروبية الأخرى عن طريق تعديل المعلمات language و stop_words.

# French example
analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase", 
        "asciifolding",  # Handle accent marks
        {
            "type": "stemmer",
            "language": "french"
        },
        {
            "type": "stop",
            "stop_words": ["_french_"]
        }
    ]
}

# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly

المحتوى الإنجليزي

لمعالجة النص الإنجليزي مع تصفية شاملة. يمكنك أيضًا استخدام english المدمج:

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase",
        {
            "type": "stemmer",
            "language": "english"
        },
        {
            "type": "stop",
            "stop_words": ["_english_"]
        }
    ]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "english"
}

المحتوى الصيني

استخدم أداة الترميز jieba وطبِّق عامل تصفية الأحرف للاحتفاظ فقط بالأحرف الصينية والحروف اللاتينية والأرقام.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["cnalphanumonly"]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "chinese"
}

بالنسبة للغة الصينية المبسطة، cnalphanumonly يزيل جميع الرموز باستثناء الأحرف الصينية والنصوص الأبجدية الرقمية والأرقام. هذا يمنع علامات الترقيم من التأثير على جودة البحث.

المحتوى الياباني

استخدم أداة الترميز lindera مع القاموس والمرشحات اليابانية لتنظيف علامات الترقيم والتحكم في طول الرمز المميز:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ipadic"  # Options: ipadic, ipadic-neologd, unidic
    },
    "filter": [
        "removepunct",  # Remove standalone punctuation
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

المحتوى الكوري

على غرار اليابانية، باستخدام أداة الترميز lindera مع القاموس الكوري:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ko-dic"
    },
    "filter": [
        "removepunct",
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

محتوى مختلط أو متعدد اللغات

عند العمل مع محتوى يمتد على عدة لغات أو يستخدم نصوصًا بشكل غير متوقع، ابدأ باستخدام محلل icu. يتعامل هذا المحلل المدرك للرموز الأحادية مع النصوص والرموز المختلطة بفعالية.

التكوين الأساسي متعدد اللغات (بدون جذع):

analyzer_params = {
    "tokenizer": "icu",
    "filter": ["lowercase", "asciifolding"]
}

معالجة متقدمة متعددة اللغات:

لتحكم أفضل في سلوك الرموز عبر لغات مختلفة:

  • استخدم تكوين محلل متعدد اللغات. للحصول على التفاصيل، راجع محلل متعدد اللغات.

  • تنفيذ معرّف لغة على المحتوى الخاص بك. للحصول على التفاصيل، راجع معرّف اللغة.

التكامل مع ميزات استرجاع النصوص

بعد اختيار المحلّل الخاص بك، يمكنك دمجه مع ميزات استرجاع النصوص التي يوفرها Milvus.

  • البحث عن النص الكامل

    تؤثر المحللات بشكل مباشر على البحث عن النص الكامل المستند إلى BM25 من خلال توليد المتجهات المتفرقة. استخدم نفس المحلّل لكل من الفهرسة والاستعلام لضمان اتساق الترميز. توفر المحللات الخاصة باللغات بشكل عام درجات BM25 أفضل من تلك العامة. للحصول على تفاصيل التنفيذ، راجع البحث عن النص الكامل.

  • مطابقة النص

    تقوم عمليات مطابقة النص بإجراء مطابقة تامة للرموز بين الاستعلامات والمحتوى المفهرس بناءً على مخرجات المحلل. للحصول على تفاصيل التنفيذ، راجع مطابقة النص.

  • مطابقة العبارات

    تتطلب مطابقة العبارات ترميزًا متناسقًا عبر التعبيرات متعددة الكلمات للحفاظ على حدود العبارات ومعناها. للحصول على تفاصيل التنفيذ، راجع مطابقة العبارة.