مطابقة العباراتCompatible with Milvus 2.5.17+

تتيح لك مطابقة العبارة البحث عن المستندات التي تحتوي على مصطلحات الاستعلام الخاصة بك كعبارة تامة. بشكل افتراضي، يجب أن تظهر الكلمات بنفس الترتيب وبجوار بعضها البعض مباشرةً. على سبيل المثال، يطابق الاستعلام عن "تعلّم الآلة الروبوتية" نصًا مثل "... نماذج تعلّم الآلة الروبوتية النموذجية..."، حيث تظهر الكلمات "روبوتات" و "آلة" و "تعلّم" في تسلسل دون وجود كلمات أخرى بينها.

ومع ذلك، في سيناريوهات العالم الحقيقي، يمكن أن تكون مطابقة العبارات الصارمة صارمة للغاية. قد ترغب في مطابقة نص مثل "... نماذج التعلم الآلي المعتمدة على نطاق واسع في مجال الروبوتات...". هنا، توجد نفس الكلمات الرئيسية ولكن ليس جنبًا إلى جنب أو بالترتيب الأصلي. للتعامل مع هذا، تدعم مطابقة العبارات معلمة slop ، والتي تقدم مرونة. تحدد القيمة slop عدد التبدلات الموضعية المسموح بها بين المصطلحات في العبارة. على سبيل المثال، باستخدام slop من 1، يمكن أن يطابق الاستعلام عن "التعلم الآلي" نصًا مثل "...التعلم العميق للآلة..."، حيث تفصل كلمة واحدة ("عميق") بين المصطلحات الأصلية.

نظرة عامة

بدعم من مكتبة محرك البحث Tantivy، تعمل مطابقة العبارات من خلال تحليل المعلومات الموضعية للكلمات داخل المستندات. يوضح الرسم البياني أدناه العملية:

Phrase Match Workflow سير عمل مطابقة العبارات

  1. ترميز المستند: عندما تقوم بإدراج المستندات في Milvus، يتم تقسيم النص إلى رموز (كلمات أو مصطلحات فردية) باستخدام محلل، مع تسجيل المعلومات الموضعية لكل رمز. على سبيل المثال، يتم ترميز المستند_1 إلى ["آلة" (الموضع = 0)، "تعلم" (الموضع = 1)، "تعزيزات" (الموضع = 2)، "كفاءة" (الموضع = 3)]. لمزيد من المعلومات حول المحلِّلات، راجع نظرة عامة على المحلِّل.

  2. إنشاء فهرس مقلوب: يقوم ميلفوس ببناء فهرس مقلوب، حيث يقوم بتعيين كل رمز رمزي إلى المستند (المستندات) التي يظهر فيها ومواضع الرمز في تلك المستندات.

  3. مطابقة العبارة: عندما يتم تنفيذ استعلام عن العبارة، يبحث Milvus عن كل رمز في الفهرس المقلوب ويتحقق من مواضعها لتحديد ما إذا كانت تظهر بالترتيب الصحيح والقرب. تتحكم المعلمة slop في الحد الأقصى لعدد المواضع المسموح بها بين الرموز المطابقة:

    • الانحدار = 0 يعني أن الرموز يجب أن تظهر بالترتيب الدقيق والمتجاورة مباشرةً (أي لا توجد كلمات إضافية بينهما).

      • في المثال، المستند_1 فقط ("آلة" في الموضع = 0، "تعلم" في الموضع = 1) يتطابق تمامًا.
    • الانحدار = 2 يسمح بما يصل إلى موضعين من المرونة أو إعادة الترتيب بين الرموز المطابقة.

      • يسمح ذلك بالترتيب المعكوس ("آلة التعلم") أو فجوة صغيرة بين الرموز.

      • وبالتالي، يتطابق كل من doc_1 و doc_2 ("تعلم" عند الموضع = 0، و "آلة" عند الموضع = 1)، و doc_3 ("تعلم" عند الموضع = 1، و "آلة" عند الموضع = 2).

تمكين مطابقة العبارة

تعمل مطابقة العبارات مع نوع الحقل VARCHAR ، وهو نوع بيانات السلسلة في Milvus. لتمكين مطابقة العبارات، قم بتكوين مخطط مجموعتك عن طريق تعيين كل من المعلمات enable_analyzer و enable_match إلى True ، على غرار مطابقة النص.

قم بتعيين enable_analyzer و enable_match

لتمكين مطابقة العبارات لحقل VARCHAR محدد، قم بتعيين كل من المعلمات enable_analyzer و enable_match إلى True عند تحديد مخطط الحقل. يرشد هذا التكوين ميلفوس إلى ترميز النص وإنشاء فهرس مقلوب مع المعلومات الموضعية المطلوبة لمطابقة العبارات بكفاءة.

فيما يلي مثال على تعريف مخطط لتمكين مطابقة العبارات:

from pymilvus import MilvusClient, DataType

# Create a schema for a new collection
schema = MilvusClient.create_schema(enable_dynamic_field=False)
schema.add_field(
    field_name="id",
    datatype=DataType.INT64,
    is_primary=True,
    auto_id=True
)
# Add a VARCHAR field configured for phrase matching
schema.add_field(
    field_name='text',                 # Name of the field
    datatype=DataType.VARCHAR,         # Field data type set as VARCHAR (string)
    max_length=1000,                   # Maximum length of the string
    enable_analyzer=True,              # Enables text analysis (tokenization)
    enable_match=True                  # Enables inverted indexing for phrase matching
)
schema.add_field(
    field_name="embeddings",
    datatype=DataType.FLOAT_VECTOR,
    dim=5
)

اختياري: تكوين محلل

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

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

إذا كان تطبيقك يتطلب محللًا معينًا، فقم بتكوينه باستخدام المعلمة analyzer_params. على سبيل المثال، إليك كيفية تكوين محلل english لمطابقة العبارات في النص الإنجليزي:

# Define analyzer parameters for English-language tokenization
analyzer_params = {
    "type": "english"
}

# Add the VARCHAR field with the English analyzer enabled
schema.add_field(
    field_name='text',                 # Name of the field
    datatype=DataType.VARCHAR,         # Field data type set as VARCHAR
    max_length=1000,                   # Maximum length of the string
    enable_analyzer=True,              # Enables text analysis
    analyzer_params=analyzer_params,   # Specifies the analyzer configuration
    enable_match=True                  # Enables inverted indexing for phrase matching
)

يدعم Milvus العديد من المحللات المصممة خصيصًا للغات وحالات الاستخدام المختلفة. للحصول على معلومات مفصلة، راجع نظرة عامة على المحلل.

استخدام مطابقة العبارات

بمجرد تمكين المطابقة لحقل VARCHAR في مخطط المجموعة الخاص بك، يمكنك إجراء مطابقة العبارة باستخدام التعبير PHRASE_MATCH.

التعبير PHRASE_MATCH غير حساس لحالة الأحرف. يمكنك استخدام إما PHRASE_MATCH أو phrase_match.

بناء جملة تعبير PHRASE_MATCH

استخدم التعبير PHRASE_MATCH لتحديد الحقل والعبارة والمرونة الاختيارية (slop) عند البحث. بناء الجملة هو

PHRASE_MATCH(field_name, phrase, slop)
  • field_name: اسم الحقل VARCHAR الذي تقوم بإجراء مطابقات العبارة عليه.

  • phrase: العبارة الدقيقة المراد البحث عنها.

  • slop (اختياري): عدد صحيح يحدد الحد الأقصى لعدد المواضع المسموح بها في الرموز المطابقة.

    • 0 (افتراضي): يطابق العبارات الدقيقة فقط. مثال: سيطابق عامل التصفية لـ "التعلّم الآلي" عبارة " التعلّم الآلي" تمامًا، ولكن ليس "الآلة تعزز التعلّم" أو "آلة التعلّم".

    • 1: يسمح باختلاف طفيف، مثل مصطلح إضافي واحد أو تغيير بسيط في الموضع. مثال: سيطابق عامل تصفية لـ "تعلّم الآلة" "آلة تعزز التعلّم" (رمز واحد بين "آلة" و "تعلّم") ولكن ليس "آلة التعلّم" (المصطلحات معكوسة).

    • 2: يسمح بمزيد من المرونة، بما في ذلك ترتيب المصطلح المعكوس أو ما يصل إلى رمزين بينهما. مثال: سيطابق مرشح "تعلّم الآلة" مع "آلة التعلّم " (المصطلحات المعكوسة) أو "آلة التعلّم بسرعة تعزز التعلّم" (رمزين بين "آلة" و "تعلّم").

مثال على مجموعة البيانات

لنفترض أن لديك مجموعة باسم tech_articles تحتوي على الكيانات الخمسة التالية:

doc_id

text

1

"التعلم الآلي يعزز الكفاءة في تحليل البيانات على نطاق واسع"

2

"تعلم النهج القائم على الآلة أمر حيوي لتقدم الذكاء الاصطناعي الحديث"

3

"تعمل البنى الآلية للتعلم العميق على تحسين الأحمال الحسابية"

4

"تعمل الآلة بسرعة على تحسين أداء النموذج للتعلم المستمر"

5

"تعلم خوارزميات الآلة المتقدمة يوسع قدرات الذكاء الاصطناعي"

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

عند استخدام الأسلوب query() ، يعمل PHRASE_MATCH كمرشح قياسي. لا يتم إرجاع سوى المستندات التي تحتوي على العبارة المحددة (مع مراعاة الانحدار المسموح به).

مثال: المنحدر = 0 (مطابقة تامة)

يقوم هذا المثال بإرجاع المستندات التي تحتوي على عبارة "التعلّم الآلي" بالضبط دون أي رموز إضافية بينهما.

# Match documents containing exactly "machine learning"
filter = "PHRASE_MATCH(text, 'machine learning')"

result = client.query(
    collection_name="tech_articles",
    filter=filter,
    output_fields=["id", "text"]
)

نتائج المطابقة المتوقعة:

doc_id

text

1

"التعلم الآلي يعزز الكفاءة في تحليل البيانات على نطاق واسع"

يحتوي المستند 1 فقط على العبارة التامة "التعلم الآلي" بالترتيب المحدد بدون رموز إضافية.

البحث مع مطابقة العبارة

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

مثال: المنحدر = 1

هنا، نسمح هنا بـ 1. يتم تطبيق عامل التصفية على المستندات التي تحتوي على عبارة "آلة التعلم" مع مرونة طفيفة.

# Example: Filter documents containing "learning machine" with slop=1
filter_slop1 = "PHRASE_MATCH(text, 'learning machine', 1)"

result_slop1 = client.search(
    collection_name="tech_articles",
    anns_field="embeddings",
    data=[query_vector],
    filter=filter_slop1,
    search_params={"params": {"nprobe": 10}},
    limit=10,
    output_fields=["id", "text"]
)

نتائج المطابقة:

doc_id

text

2

"تعلم النهج القائم على الآلة أمر حيوي لتقدم الذكاء الاصطناعي الحديث"

3

"تعمل بنيات آلة التعلم العميق على تحسين الأحمال الحسابية"

5

"تعلم خوارزميات الآلة المتقدمة يوسع قدرات الذكاء الاصطناعي"

مثال: انحدار = 2

يسمح هذا المثال بـ 2 منحدر، مما يعني أنه يُسمح بما يصل إلى رمزين إضافيين (أو مصطلحين معكوسين) بين كلمتي "آلة" و "تعلم".

# Example: Filter documents containing "machine learning" with slop=2
filter_slop2 = "PHRASE_MATCH(text, 'machine learning', 2)"

result_slop2 = client.search(
    collection_name="tech_articles",
    anns_field="embeddings",             # Vector field name
    data=[query_vector],                 # Query vector
    filter=filter_slop2,                 # Filter expression
    search_params={"params": {"nprobe": 10}},
    limit=10,                            # Maximum results to return
    output_fields=["id", "text"]
)

نتائج المطابقة:

doc_id

text

1

"التعلم الآلي يعزز الكفاءة في تحليل البيانات على نطاق واسع"

3

"تعمل بنيات آلة التعلم العميق على تحسين الأحمال الحسابية"

مثال: المنحدر = 3

في هذا المثال، يوفر المنحدر 3 المزيد من المرونة. يبحث المرشح عن "تعلّم الآلة" مع السماح بما يصل إلى ثلاثة مواضع رمزية بين الكلمات.

# Example: Filter documents containing "machine learning" with slop=3
filter_slop3 = "PHRASE_MATCH(text, 'machine learning', 3)"

result_slop2 = client.search(
    collection_name="tech_articles",
    anns_field="embeddings",             # Vector field name
    data=[query_vector],                 # Query vector
    filter=filter_slop3,                 # Filter expression
    search_params={"params": {"nprobe": 10}},
    limit=10,                            # Maximum results to return
    output_fields=["id", "text"]
)

نتائج المطابقة:

doc_id

text

1

"التعلم الآلي يعزز الكفاءة في تحليل البيانات على نطاق واسع"

2

"تعلّم نهج قائم على الآلة أمر حيوي لتقدم الذكاء الاصطناعي الحديث"

3

"تعمل البنى الآلية للتعلم العميق على تحسين الأحمال الحاسوبية"

5

"تعلم خوارزميات الآلة المتقدمة يوسع من قدرات الذكاء الاصطناعي"

الاعتبارات

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

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

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

  • قواعد الهروب في تعبيرات filter:

    • يتم تفسير الأحرف المحاطة بعلامات اقتباس مزدوجة أو علامات اقتباس مفردة داخل التعبيرات على أنها ثوابت سلسلة. إذا كان ثابت السلسلة يتضمن أحرف هروب، فيجب تمثيل أحرف الهروب بتسلسل الهروب. على سبيل المثال، استخدم \\ لتمثيل \ و \\t لتمثيل علامة تبويب \t و \\n لتمثيل سطر جديد.

    • إذا كان ثابت السلسلة محاطًا بعلامات اقتباس مفردة، يجب تمثيل علامة اقتباس مفردة داخل الثابت على أنه \\' بينما يمكن تمثيل علامة الاقتباس المزدوجة إما " أو \\". مثال: 'It\\'s milvus'.

    • إذا كان ثابت السلسلة محاطًا بعلامات اقتباس مزدوجة، يجب تمثيل علامة اقتباس مزدوجة داخل الثابت على أنه \\" بينما يمكن تمثيل علامة الاقتباس المفردة إما ' أو \\'. مثال: "He said \\"Hi\\"".