مكون Dirichlet Allocation الكامن

توضح هذه المقالة كيفية استخدام مكون Dirichlet Allocation في مصمم التعلم الآلي من Microsoft Azure، لتجميع النص غير المصنف في فئات.

غالباً ما يستخدم تخصيص Dirichlet الكامن (LDA) في معالجة اللغة الطبيعية للعثور على نصوص متشابهة. مصطلح شائع آخر هو نمذجة الموضوع.

يأخذ هذا المكون عموداً نصياً ويولد هذه المخرجات:

  • النص المصدر مع درجة لكل فئة

  • مصفوفة المعالم التي تحتوي على المصطلحات المستخرجة والعمليات لكل فئة

  • تحويل، يمكنك حفظه وإعادة تطبيقه على نص جديد يستخدم كمدخل

يستخدم هذا المكون مكتبة scikit-Learn. لمزيد من المعلومات حول scikit-Learn، راجع مستودع GitHub، والذي يتضمن دروساً تعليمية وشرحاً للخوارزمية.

المزيد حول مكون Dirichlet Allocation

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

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

تمت مناقشة النظرية في هذه الورقة، وهي متاحة للتنزيل بتنسيق PDF: Dirichlet Allocation component: Blei وNg وJordan.

يعتمد التنفيذ في هذا المكون على مكتبة scikit-Learn لـ LDA.

لمزيد من المعلومات، راجع قسم الملاحظات الفنية.

كيفية تكوين تخصيص Dirichlet الكامن

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

  1. أضف مكوِّن Latent Dirichlet Allocation إلى خط التدفق لديك.

    في قائمة الأصول ضمن Text Analytics، اسحب المكون Latent Dirichlet Allocation وأفلته في اللوحة.

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

  3. بالنسبة إلى الأعمدة المستهدفة، اختر عموداً واحداً أو أكثر يحتوي على نص لتحليله.

    يمكنك اختيار عدة أعمدة، لكن يجب أن تكون من نوع بيانات string.

    نظراً لأن LDA ينشئ مصفوفة ميزة كبيرة من النص، فسوف تقوم عادةً بتحليل عمود نصي واحد.

  4. في Number of topics to mode، أدخل عدداً صحيحاً بين 1 و1000 يشير إلى عدد الفئات أو الموضوعات التي تريد اشتقاقها من نص الإدخال.

    بشكل افتراضي، يتم إنشاء 5 مواضيع.

  5. بالنسبة إلى N-grams، حدد الحد الأقصى لطول N-grams التي تم إنشاؤها أثناء التجزئة.

    الافتراضي هو 2، ما يعني أنه يتم إنشاء كل من الأحرف الكبيرة والأحادية.

  6. حدد الخيار Normalize لتحويل قيم الإخراج إلى احتمالات.

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

    • سيتم تمثيل القيم في مجموعة البيانات كاحتمال حيث P(topic|document).

    • سيتم تمثيل القيم في مصفوفة موضوع الميزة كاحتمال حيث P(word|topic).

    ملاحظة

    في مصمم التعلم الآلي من Microsoft Azure، لم تعد مكتبة scikit-Learn تدعم إخراج doc_topic_distr غير الطبيعي من الإصدار 0.19. في هذا المكون، يمكن تطبيق معلمة التسوية فقط على إخراج مصفوفة موضوع الميزة. دائماً ما يكون إخراج Transformed dataset عادياً.

  7. حدد الخيار Show all options، ثم اضبطه على TRUE إذا كنت تريد تعيين المعلمات المتقدمة التالية.

    هذه المعلمات خاصة بتطبيق scikit-Learn لـ LDA. هناك بعض البرامج التعليمية الجيدة حول LDA في scikit-Learn، بالإضافة إلى مستند scikit-Learnالرسمي.

    • معلمة Rho. قم بتوفير احتمال مسبق لتباين توزيعات الموضوع. تتوافق هذه المعلمة مع معلمة sklearn topic_word_prior. استخدم القيمة 1 إذا كنت تتوقع أن يكون توزيع الكلمات ثابتاً؛ وهذا يعني أن كل الكلمات يُفترض أنها قابلة للتجهيز. إذا كنت تعتقد أن معظم الكلمات تظهر بشكل متقطع، فيمكنك تعيينها على قيمة أقل.

    • معلمة ألفا. حدد احتمالاً سابقاً لتباين أوزان الموضوع لكل مستند. تتوافق هذه المعلمة مع معلمة sklearn doc_topic_prior.

    • العدد المقدر للمستندات. أدخل رقماً يمثل أفضل تقدير لديك لعدد المستندات (الصفوف) التي ستتم معالجتها. تتيح هذه المعلمة للمكون تخصيص جدول تجزئة بحجم كافٍ. إنه يتوافق مع المعلمة total_samples في scikit-learn.

    • حجم الدفعة. أدخل رقماً يشير إلى عدد الصفوف المراد تضمينها في كل دفعة من النصوص المرسلة إلى نموذج LDA. تتوافق هذه المعلمة مع المعلمة batch_size في scikit-learn.

    • القيمة الأولية للتكرار المستخدمة في جدول تحديث التعلم. حدد قيمة البداية التي تقلل من معدل التعلم للتكرارات المبكرة في التعلم عبر الإنترنت. تتوافق هذه المعلمة مع المعلمة learning_offset في scikit-learn.

    • الطاقة المطبقة على التكرار أثناء التحديثات. حدد مستوى القوة المطبقة على عدد التكرار للتحكم في معدل التعلم أثناء التحديثات عبر الإنترنت. تتوافق هذه المعلمة مع المعلمة learning_decay في scikit-learn.

    • عدد مرات المرور على البيانات. حدد الحد الأقصى لعدد المرات التي ستدور فيها الخوارزمية البيانات. تتوافق هذه المعلمة مع المعلمة max_iter في scikit-learn.

  8. حدد الخيار Build dictionary of ngrams أو Build dictionary of ngrams prior to LDA، إذا كنت تريد إنشاء قائمة ngrams في مسار أولي قبل تصنيف النص.

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

  9. بالنسبة إلى الحد الأقصى لحجم قاموس ngram، أدخل العدد الإجمالي للصفوف التي يمكن إنشاؤها في قاموس ngram.

    هذا الخيار مفيد للتحكم في حجم القاموس. ولكن إذا تجاوز عدد ngrams في الإدخال هذا الحجم، فقد تحدث تصادمات.

  10. إرسال المسار. يستخدم مكون LDA نظرية بايز لتحديد الموضوعات التي قد ترتبط بالكلمات الفردية. لا ترتبط الكلمات حصرياً بأي مواضيع أو مجموعات. بدلاً من ذلك، كل n-gram له احتمالية مكتسبة مرتبطة بأي من الفئات المكتشفة.

النتائج

المكون له ناتجان:

  • مجموعة البيانات المحولة: يحتوي هذا الإخراج على نص الإدخال، وعدداً محدداً من الفئات المكتشفة، والنتائج لكل مثال نصي لكل فئة.

  • مصفوفة موضوع الميزة: يحتوي العمود الموجود في أقصى اليسار على ميزة النص المستخرج. يحتوي عمود كل فئة على درجة تلك الميزة في تلك الفئة.

تحول LDA

ينتج هذا المكون أيضاً تحويل LDA الذي يطبق LDA على مجموعة البيانات.

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

لإعادة استخدام هذا التحويل، حدد رمز Register dataset في اللوحة اليمنى لـDirichlet Allocation component الكامن للاحتفاظ بالمكون ضمن فئة مجموعات البيانات في قائمة المكونات. بعد ذلك يمكنك توصيل هذا المكون بمكوِّن تطبيق التحويل لإعادة استخدام هذا التحويل.

تنقية نموذج أو نتائج LDA

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

  • تغيير معلمات النموذج
  • استخدام التخيل لفهم النتائج
  • الحصول على تعليقات الخبراء في الموضوع لتحديد ما إذا كانت الموضوعات التي تم إنشاؤها مفيدة

يمكن أن تكون القياسات النوعية مفيدة أيضاً في تقييم النتائج. لتقييم نتائج نمذجة الموضوع، ضع في اعتبارك:

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

يمكنك غالباً تحسين دقة النماذج المستندة إلى LDA باستخدام معالجة اللغة الطبيعية لتنظيف النص وتلخيصه وتبسيطه أو تصنيفه. على سبيل المثال، يمكن للتقنيات التالية، المدعومة جميعها في التعلم الآلي من Microsoft Azure، تحسين دقة التصنيف:

  • إيقاف إزالة الكلمة

  • تطبيع الحالة

  • اللماتة أو الاشتقاق

  • التعرف على رموز الأحرف

لمزيد من المعلومات، راجع نص العملية المسبقة.

في المصمم، يمكنك أيضاً استخدام مكتبات R أو Python لمعالجة النص: تنفيذ R Script، تنفيذ Python Script.

ملاحظات فنية

يحتوي هذا القسم على تفاصيل التنفيذ ونصائح وإجابات للأسئلة المتداولة.

تفاصيل التنفيذ

بشكل افتراضي، يتم تسوية توزيعات المخرجات لمجموعة البيانات المحولة ومصفوفة موضوع السمات كاحتمالات:

  • يتم تسوية مجموعة البيانات المحولة كاحتمال مشروط للموضوعات المعطاة للمستند. في هذه الحالة، مجموع كل صف يساوي 1.

  • يتم تطبيع مصفوفة السمة والموضوع على أنها الاحتمال الشرطي للكلمات المعطاة لموضوع ما. في هذه الحالة، مجموع كل عمود يساوي 1.

تلميح

من حين لآخر قد يعرض المكون موضوعاً فارغاً. في أغلب الأحيان، يكون السبب هو التهيئة الزائفة العشوائية للخوارزمية. إذا حدث هذا، يمكنك محاولة تغيير المعلمات ذات الصلة. على سبيل المثال، قم بتغيير الحد الأقصى لحجم قاموس N-gram أو عدد البتات المراد استخدامها لتجزئة الميزة.

نمذجة LDA والموضوع

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

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

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

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

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

معلمات المكون

الاسم النوع النطاق ‏‏اختياري افتراضي الوصف
العمود (الأعمدة) الهدف تحديد العمود مطلوب StringFeature اسم العمود الهدف أو الفهرس.
عدد الموضوعات للنموذج عدد صحيح [1;1000] مطلوب 5 نموذج لتوزيع الوثيقة مقابل موضوعات N.
N-grams عدد صحيح [1;10] مطلوب 2 ترتيب N-grams التي تم إنشاؤها أثناء التجزئة.
Normalize منطقي صحيحة أو خاطئة مطلوب صواب تطبيع الإخراج إلى الاحتمالات. ستكون مجموعة البيانات المحولة P (موضوع | مستند) وستكون مصفوفة موضوع الميزة P (كلمة | موضوع).
عرض كل الخيارات منطقي صحيحة أو خاطئة مطلوب خطأ يقدم معلمات إضافية خاصة بـ LDA عبر الإنترنت scikit-Learn.
معلمة رو قيمة Float [0.00001;1.0] يتم تطبيقه عند تحديد مربع الاختيار Show all options 0.01 كلمة الموضوع قبل التوزيع.
معلمة ألفا قيمة Float [0.00001;1.0] يتم تطبيقه عند تحديد مربع الاختيار Show all options 0.01 توثيق الموضوع قبل التوزيع.
العدد المقدر للمستندات عدد صحيح [1;int.MaxValue] يتم تطبيقه عند تحديد مربع الاختيار Show all options 1000 العدد المقدر للمستندات. يتوافق مع المعلمة total_samples.
حجم الدفعة عدد صحيح [1;1024] يتم تطبيقه عند تحديد مربع الاختيار Show all options 32 حجم الدفعة.
القيمة الأولية للتكرار المستخدمة في جدول تحديث معدل التعلم عدد صحيح [0;int.MaxValue] يتم تطبيقه عند تحديد مربع الاختيار Show all options 0 القيمة الأولية التي تقلل من معدل التعلم للتكرارات المبكرة. يتوافق مع المعلمة learning_offset.
يتم تطبيق القوة على التكرار أثناء التحديثات قيمة Float [0.0;1.0] يتم تطبيقه عند تحديد مربع الاختيار Show all options 0.5 تم تطبيق القوة على عدد التكرار للتحكم في معدل التعلم. يتوافق مع المعلمة learning_decay.
عدد مرات التدريب عدد صحيح [1;1024] يتم تطبيقه عند تحديد مربع الاختيار Show all options 25 عدد مرات التدريب.
بناء قاموس ngrams منطقي صحيحة أو خاطئة يتم تطبيقه عندما يكون مربع الاختيار Show all optionsغير محدد صواب يقوم ببناء معجم ngrams قبل حساب LDA. مفيد لفحص النموذج وتفسيره.
الحجم الأقصى لقاموس ngram عدد صحيح [1;int.MaxValue] يتم تطبيقه عندما يكون خيار Build dictionary of ngrams هو True 20000 الحجم الأقصى لقاموس ngrams. إذا تجاوز عدد الرموز المميزة في الإدخال هذا الحجم، فقد تحدث تضاربات.
عدد البتات المطلوب استخدامها لتجزئة الميزة. عدد صحيح [1;31] يتم تطبيقه عندما يكون مربع الاختيار Show all optionsغير محدد وBuild dictionary of ngrams يكون خطأ 12 عدد البتات المطلوب استخدامها لتجزئة الميزة.
بناء قاموس ngrams قبل LDA منطقي صحيحة أو خاطئة يتم تطبيقه عند تحديد مربع الاختيار Show all options صواب يبني قاموساً للغرامات السابقة لـ LDA. مفيد لفحص النموذج وتفسيره.
العدد الأقصى من ngrams في القاموس عدد صحيح [1;int.MaxValue] يتم تطبيقه عند تحديد مربع الاختيار Show all options ويكون الخيار Build dictionary of ngrams هو صحيح 20000 الحجم الأقصى للقاموس. إذا تجاوز عدد الرموز المميزة في الإدخال هذا الحجم، فقد تحدث تضاربات.
عدد بتات التجزئة عدد صحيح [1;31] يتم تطبيقه عند تحديد مربع الاختيار Show all options ويكون الخيار Build dictionary of ngrams هو False 12 عدد وحدات البت التي سيتم استخدامها أثناء تجزئة الميزة.

الخطوات التالية

راجع مجموعة المكونات المتوفرة للتعلم الآلي من Azure.

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