تقسيم المستندات الكبيرة لحلول البحث عن المتجهات في Azure الذكاء الاصطناعي Search

يمكن أن يساعدك تقسيم المستندات الكبيرة إلى مجموعات أصغر في البقاء ضمن الحد الأقصى لحدود إدخال الرمز المميز لتضمين النماذج. على سبيل المثال، الحد الأقصى لطول نص الإدخال لنماذج تضمين Azure OpenAI هو 8191 رمزا مميزا. نظرا لأن كل رمز مميز حوالي أربعة أحرف من النص لنماذج OpenAI الشائعة، فإن هذا الحد الأقصى يعادل حوالي 6000 كلمة نص. إذا كنت تستخدم هذه النماذج لإنشاء تضمينات، فمن المهم أن يظل نص الإدخال تحت الحد. يضمن تقسيم المحتوى الخاص بك إلى مجموعات أنه يمكن معالجة بياناتك من خلال نماذج التضمين المستخدمة لملء مخازن المتجهات وتحويلات الاستعلام من نص إلى متجه.

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

إشعار

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

تقنيات التقسيم الشائعة

فيما يلي بعض تقنيات التقسيم الشائعة، بدءا من الطريقة الأكثر استخداما:

  • مجموعات ذات حجم ثابت: حدد حجم ثابت يكفي للفقرات ذات المعنى الدلالي (على سبيل المثال، 200 كلمة) ويسمح ببعض التداخل (على سبيل المثال، 10-15٪ من المحتوى) يمكن أن ينتج أجزاء جيدة كإدخال لتضمين مولدات المتجهات.

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

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

اعتبارات تداخل المحتوى

عندما تقوم بتقسيم البيانات، يمكن أن يساعد تداخل كمية صغيرة من النص بين المجموعات في الحفاظ على السياق. نوصي بالبدء بتداخل بنسبة 10٪ تقريبا. على سبيل المثال، بالنظر إلى حجم مجموعة ثابت من 256 رمزا مميزا، ستبدأ الاختبار بتداخل 25 رمزا مميزا. يختلف مقدار التداخل الفعلي اعتمادا على نوع البيانات وحالة الاستخدام المحددة، ولكن وجدنا أن 10-15٪ يعمل للعديد من السيناريوهات.

عوامل تقسيم البيانات

عندما يتعلق الأمر بتقسيم البيانات، فكر في هذه العوامل:

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

  • استعلامات المستخدم: تساعد المجموعات الأكبر والاستراتيجيات المتداخلة في الحفاظ على السياق والثراء الدلالي للاستعلامات التي تستهدف معلومات محددة.

  • تحتوي نماذج اللغات الكبيرة (LLM) على إرشادات أداء لحجم المجموعة. تحتاج إلى تعيين حجم مجموعة يعمل بشكل أفضل لجميع النماذج التي تستخدمها. على سبيل المثال، إذا كنت تستخدم نماذج للتلخيص والتضمين، فاختر حجم المجموعة الأمثل الذي يعمل لكليهما.

كيف يتناسب التقسيم مع سير العمل

إذا كان لديك مستندات كبيرة، فيجب إدراج خطوة تقسيم في مهام سير عمل الفهرسة والاستعلام التي تقسم النص الكبير. عند استخدام المتجهات المتكاملة (معاينة)، يتم تطبيق استراتيجية تقسيم افتراضية باستخدام مهارة تقسيم النص. يمكنك أيضا تطبيق استراتيجية تقسيم مخصصة باستخدام مهارة مخصصة. تتضمن بعض المكتبات التي توفر التقسيم ما يلي:

توفر معظم المكتبات تقنيات تجميع شائعة للحجم الثابت أو حجم المتغير أو مجموعة. يمكنك أيضا تحديد تداخل يكرر كمية صغيرة من المحتوى في كل مجموعة لحفظ السياق.

أمثلة على التقسيم

توضح الأمثلة التالية كيفية تطبيق استراتيجيات التقسيم على ملف PDF الخاص ب Earth at Night التابع لوكالة ناسا:

مثال على مهارة تقسيم النص

يتم تقسيم البيانات المتكاملة من خلال مهارة تقسيم النص في المعاينة العامة. استخدم معاينة REST API أو حزمة بيتا Azure SDK لهذا السيناريو.

يصف هذا القسم تقسيم البيانات المضمنة باستخدام نهج يستند إلى المهارات ومعلمات مهارة تقسيم النص.

يمكن العثور على نموذج دفتر ملاحظات لهذا المثال في مستودع azure-search-vector-samples . تعيين textSplitMode لتقسيم المحتوى إلى أجزاء أصغر:

  • pages (افتراضي). تتكون المجموعات من جمل متعددة.
  • sentences. تتكون المجموعات من جمل مفردة. ما يشكل "جملة" هو اللغة التابعة. باللغة الإنجليزية، يتم استخدام الجملة القياسية التي تنتهي بعلامات الترقيم مثل . أو ! . يتم التحكم في اللغة بواسطة المعلمة defaultLanguageCode .

pages تضيف المعلمة معلمات إضافية:

  • maximumPageLength يحدد الحد الأقصى لعدد الأحرف 1 في كل مجموعة. يتجنب مقسم النص تقسيم الجمل، لذلك يعتمد عدد الأحرف الفعلي على المحتوى.
  • pageOverlapLength يحدد عدد الأحرف من نهاية الصفحة السابقة المضمنة في بداية الصفحة التالية. إذا تم التعيين، يجب أن يكون هذا أقل من نصف الحد الأقصى لطول الصفحة.
  • maximumPagesToTake يحدد عدد الصفحات / المجموعات التي يجب أخذها من مستند. القيمة الافتراضية هي 0، مما يعني أخذ كافة الصفحات أو المجموعات من المستند.

1 حرف لا تتم محاذاته مع تعريف الرمز المميز. قد يختلف عدد الرموز المميزة التي تم قياسها بواسطة LLM عن حجم الحرف الذي تم قياسه بواسطة مهارة تقسيم النص.

يوضح الجدول التالي كيف يؤثر اختيار المعلمات على إجمالي عدد القطع من كتاب إلكتروني للأرض في الليل:

textSplitMode maximumPageLength pageOverlapLength إجمالي عدد المجموعات
pages 1000 0 172
pages 1000 200 216
pages 2000 0 85
pages 2000 500 113
pages 5000 0 34
pages 5000 500 38
sentences ‏‫غير متوفر‬ ‏‫غير متوفر‬ 13361

استخدام نتيجة textSplitModepages في معظم المجموعات التي تحتوي على إجمالي عدد الأحرف قريبة من maximumPageLength. يختلف عدد أحرف المجموعة بسبب الاختلافات في مكان وقوع حدود الجملة داخل المجموعة. يختلف طول الرمز المميز للقطعة بسبب الاختلافات في محتويات المجموعة.

توضح المدرجات التكرارية التالية كيف يقارن توزيع طول حرف القطعة بطول الرمز المميز ل gpt-35-turbo عند استخدام من textSplitModepages، وهو maximumPageLength من 2000، و500 pageOverlapLength على الأرض في كتاب إلكتروني ليلي:

Histogram of chunk character count for maximumPageLength 2000 and pageOverlapLength 500.

Histogram of chunk token count for maximumPageLength 2000 and pageOverlapLength 500.

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

توضح المدرجات التكرارية التالية كيف يقارن توزيع طول حرف القطعة بطول الرمز المميز ل gpt-35-turbo عند استخدام كتاب textSplitModesentences إلكتروني على الأرض في الليل:

Histogram of chunk character count for sentences.

Histogram of chunk token count for sentences.

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

textSplitMode maximumPageLength pageOverlapLength
pages 2000 500

مثال على تجميع بيانات LangChain

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

يمكن العثور على نموذج دفتر ملاحظات لهذا المثال في مستودع azure-search-vector-samples .

from langchain_community.document_loaders import PyPDFLoader
 
loader = PyPDFLoader("./data/earth_at_night_508.pdf")
pages = loader.load()

print(len(pages))

يشير الإخراج إلى 200 مستند أو صفحة في ملف PDF.

للحصول على عدد الرموز المميزة المقدر لهذه الصفحات، استخدم TikToken.

import tiktoken

tokenizer = tiktoken.get_encoding('cl100k_base')
def tiktoken_len(text):
    tokens = tokenizer.encode(
    text,
    disallowed_special=()
)
    return len(tokens)
tiktoken.encoding_for_model('gpt-3.5-turbo')

# create the length function
token_counts = []
for page in pages:
    token_counts.append(tiktoken_len(page.page_content))
min_token_count = min(token_counts)
avg_token_count = int(sum(token_counts) / len(token_counts))
max_token_count = max(token_counts)

# print token counts
print(f"Min: {min_token_count}")
print(f"Avg: {avg_token_count}")
print(f"Max: {max_token_count}")

يشير الإخراج إلى أنه لا توجد صفحات تحتوي على أي رموز مميزة، ومتوسط طول الرمز المميز لكل صفحة هو 189 رمزا مميزا، والحد الأقصى لعدد الرموز المميزة لأي صفحة هو 1583.

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

from langchain.text_splitter import RecursiveCharacterTextSplitter
# split documents into text and embeddings

text_splitter = RecursiveCharacterTextSplitter(
   chunk_size=1000, 
   chunk_overlap=200,
   length_function=len,
   is_separator_regex=False
)

chunks = text_splitter.split_documents(pages)

print(chunks[20])
print(chunks[21])

يظهر الإخراج لمجموعتين متتاليتين النص من المجموعة الأولى متداخلا على الجزء الثاني. يتم تحرير الإخراج بخفة لسهولة القراءة.

'x Earth at NightForeword\nNASA’s Earth at Night explores the brilliance of our planet when it is in darkness. \n It is a compilation of stories depicting the interactions between science and \nwonder, and I am pleased to share this visually stunning and captivating exploration of \nour home planet.\nFrom space, our Earth looks tranquil. The blue ethereal vastness of the oceans \nharmoniously shares the space with verdant green land—an undercurrent of gentle-ness and solitude. But spending time gazing at the images presented in this book, our home planet at night instantly reveals a different reality. Beautiful, filled with glow-ing communities, natural wonders, and striking illumination, our world is bustling with activity and life.**\nDarkness is not void of illumination. It is the contrast, the area between light and'** metadata={'source': './data/earth_at_night_508.pdf', 'page': 9}

'**Darkness is not void of illumination. It is the contrast, the area between light and **\ndark, that is often the most illustrative. Darkness reminds me of where I came from and where I am now—from a small town in the mountains, to the unique vantage point of the Nation’s capital. Darkness is where dreamers and learners of all ages peer into the universe and think of questions about themselves and their space in the cosmos. Light is where they work, where they gather, and take time together.\nNASA’s spacefaring satellites have compiled an unprecedented record of our \nEarth, and its luminescence in darkness, to captivate and spark curiosity. These missions see the contrast between dark and light through the lenses of scientific instruments. Our home planet is full of complex and dynamic cycles and processes. These soaring observers show us new ways to discern the nuances of light created by natural and human-made sources, such as auroras, wildfires, cities, phytoplankton, and volcanoes.' metadata={'source': './data/earth_at_night_508.pdf', 'page': 9}

مهارة مخصصة

توضح عينة إنشاء التقسيم والتضمين ذات الحجم الثابت كلا من إنشاء التقسيم والتضمين المتجه باستخدام نماذج تضمين Azure OpenAI. يستخدم هذا النموذج مهارة مخصصة ل Azure الذكاء الاصطناعي Search في مستودع Power Skills لتضمين خطوة التقسيم.

(راجع أيضًا )