كيف غيرنا LDA غير الخاضع للإشراف إلى Guided LDA شبه خاضع للإشراف

هذه هي قصة كيف ولماذا كان علينا كتابة النموذج الخاص بنا من تخصيص Latent Dirichlet (LDA). أتحدث أيضًا عن سبب حاجتنا إلى بناء نموذج موضوع إرشادي (GuidedLDA) ، وعملية المصدر المفتوح لكل شيء على GitHub.

ما هو LDA (نمذجة الموضوع)؟

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

بالنسبة للعناوين التالية ، ستوافق على أن 1 و 5 عن السياسة ، و 2 و 4 عن الرياضة ، و 3 و 6 عن العلوم:

بالنسبة للإنسان ، ليس من الصعب معرفة الموضوع الذي تنتمي إليه المقالة الإخبارية. ولكن كيف يمكننا تعليم الكمبيوتر أن يفهم نفس المواضيع؟

هذا هو المكان الذي تظهر فيه نمذجة الموضوع. نمذجة الموضوع هي فئة غير خاضعة للإشراف من خوارزميات التعلم الآلي. هذه النماذج جيدة بشكل عام في تجميع الكلمات معًا في مواضيع. LDA هي تقنية النمذجة الأكثر شيوعًا.

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

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

ملاحظة : لم يتم تجميع الكلمات مباشرة في الموضوعات. بالأحرى يتم حساب احتمال مثل "ما هو احتمال انتماء كلمة إلى موضوع ما؟".

يتم تقديمها بواسطة p (t | w). أو احتمال موضوع t معطى كلمة w . إنها في جوهرها مجرد احتمال بايزي.

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

إذن ما هو توجيه LDA؟

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

واجهت مشكلة مماثلة مؤخرا. أعمل كعالم بيانات في Belong.co والمعالجة الطبيعية للغات هي نصف عملي. كنت أقوم مؤخرًا بعمل نمذجة لموضوع LDA على مجموعة بياناتنا. خرجت معظم المواضيع كما كنت أتوقع منهم. لكن بعض المواضيع لم يكن لها معنى.

كان هناك موضوعان متداخلان ولم تكن بعض الموضوعات التي كنت أتوقع طرحها موجودة. حدث شيء من هذا القبيل ، تم دمج Space و Tech معًا.

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

ولكن من أين نبدأ عندما يكون النموذج غير خاضع للإشراف؟ قررنا تصحيح ...

وجدنا أن الموضوعات التي تم دمجها معًا لا تحتوي على مستندات كافية لتبرز.

قررنا إخبار النموذج بالحفاظ على Space و Tech منفصلين. كانت الفكرة هي تعيين بعض الكلمات الأولية لـ Space وبعض الكلمات الأولية للتكنولوجيا. ثم قم بتوجيه النموذج للالتقاء حول هذه المصطلحات.

كانت فكرة بسيطة وبديهية ، لكننا لم نتمكن من العثور على أي تطبيق لـ GuidedLDA. كان هناك عدد قليل جدًا من الأوراق التي تحدثت عن توجيه LDA.

أشرنا إلى الورقة التي أعدها Jagadeesh Jagarlamudi و Hal Daume III و Raghavendra Udupa Incorporating Lexical Priors في نماذج الموضوعات. وتحدثت الصحيفة عن كيفية مقدمو الاديره (في هذه الحالة مقدمو الاديره تعني عبارة المصنف) يمكن تعيين في نموذج لتوجيهها في اتجاه معين. سوف ندخل في التفاصيل قليلاً.

بمجرد إجراء هذه التغييرات ، تقارَب النموذج بالطريقة التي أردناها.

إذن كيف قمنا بتغيير LDA إلى GuidedLDA؟

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

الطريقة التي يعمل بها LDA العادي هي ، أولاً يتم تخصيص كل كلمة بشكل عشوائي لموضوع ما. يمكن التحكم في هذا التهيئة باستخدام Dirichlet priors عبر معلمة Alpha. هذا هو المكان الذي يحصل فيه LDA (Latent Dirichlet Allocation) على اسمه. يمكن أن تكون هذه العشوائية تهيئة موحدة إذا كان ألفا كبيرًا ، أو تهيئة منحرفة عندما يكون ألفا صغيرًا. دعنا نمضي قدمًا في التهيئة الموحدة في الوقت الحالي.

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

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

ثم نحسب المصطلحات التي تأتي معها Blue Origin كثيرًا. ثم ، وهو الموضوع الأكثر شيوعًا بين هذه المصطلحات. سنقوم بتعيين Blue Origin لهذا الموضوع.

من المحتمل أن تقترب Blue Origin من أي موضوع في SpaceX و NASA . الآن يمكنك أن ترى أن NASA و SpaceX و Blue Origin أقرب إلى بعضهما البعض قليلاً مما كان عليه قبل هذه الخطوة. ثم ننتقل إلى الفصل الدراسي التالي ونكرر العملية. سوف نكرر هذه العملية بأكملها لعدد كافٍ من المرات اللازمة لجعل النموذج يتقارب.

ستكون صيغة هذا:

Probabilityمن Blue Origin ليلائم الموضوع Z{0،1،2، ..} عندما يحدث في a documentيساوي عدد مرات تعيين Blue Origin للموضوع Zمضروبًا في عدد العناصر الأخرى wordsالموجودة في ذلك المستند والتي تنتمي بالفعل Z، مقسومة إجمالي عدد المرات التي يتم فيها تخصيص أي كلمة للموضوع Z.

ها هي الصيغة الفعلية:

لكل مستند ( D) ولكل كلمة ( W) في هذا المستند ، سنقوم بحساب احتمال أن تنتمي تلك الكلمة إلى كل موضوع ( Z) .

for d in all_documents_D: for w in all_words_W_in_d: for z in all_topics_Z: w_in_z = count(across all documents w belongs to z) d_in_z = count(in d all words that belong to z) tokens_in_z = count(all assignments in z) p(z| w, d) = w_in_z * d_in_z / tokens_in_z # so w belong to max p(z) # whichever topic the probability was maximum for w w_z = max(p(z| w, d))

The initial results will be wrong. But we will run this entire process multiple times and with each iteration they will get better. Over time they will converge to form word topic distribution.

What changes when we seed the documents?

Say we want to seed SpaceX, NASAto converge towards topic_0. During initialization we can give some extra boost to SpaceXand NASA to lie in this specific topic.

We can control this parameter of how much extra boost should be given to a term. In our algorithm we call it seed_confidence and it can range between 0 and 1. With a seed_confidence of 0.1 you can bias the seeded words by 10% more towards the seeded topics.

In the above shown initialization, NASA and SpaceX are being seeded for Topic_0, Apple and Google for Topic_1, and Physics and Chemistry for Topic_2.

Now when we run the above process we will have higher count for seeded words belonging to the seeded topics. The formula will remain the same for GuidedLDA and the convergence will change towards the seeded topics.

# for seeded words belonging to seeded topics# this count will be higher now for seeded z.
w_in_z = count(across all documents w belongs to z)
# Thus probability of p belonging to seeded z will be higher
p(z| w, d) ∝ w_in_z

Hence guiding the LDA. Or GuidedLDA.

We tried a lot of different approaches before finally making this one work.

Using GuidedLDA

GuidedLDA is a python library that I have open sourced on GitHub repo.

You can install it with a simple pip install:

pip install guidedlda

The code to use it is fairly simple. Create a dictionary for seed_topics with word_id to topic_id map. And pass it to the model.fit() method.

  1. seed_confidence can vary between 0 to 1.
  2. seed_topicsهو القاموس { word_idto topic_id}
  3. X هي مصفوفة مصطلح الوثيقة.
seed_topics = { 'NASA': 0, 'SpaceX': 0, 'Apple': 1, 'Google': 1, 'Physics': 2, 'Chemistry': 2,}model.fit(X, seed_topics=seed_topics, seed_confidence=0.15).

وثائق GuidedLDA مرتبطة هنا.

الاعتمادات

تم استعارة جزء كبير من الكود من مكتبة Python LDA.

صيحة كبيرة لمؤلفي تلك المكتبة: ألين ريدل وتيم هوبر.

شكر خاص لـ Vinodh Ravindranath ، الذي وجهني طوال المشروع.

باستخدام GuidedLDA ، تمكنا من فصل الموضوعات التي لها تمثيل أصغر في المجموعة وتوجيه تصنيف المستندات.

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