معنى أعمق: نمذجة الموضوع في بايثون

نشرت: 2022-03-11

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

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

كيف يمكن للمطورين إقناع أجهزة الكمبيوتر التي تركز على الحساب لفهم الاتصالات البشرية في تلك المستويات من التطور؟

حقيبة من الكلمات

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

تمثل هذه الطريقة النص كمجموعة من الكلمات. على سبيل المثال ، يمكن وصف الجملة This is an example على أنها مجموعة من الكلمات باستخدام التردد الذي تظهر به هذه الكلمات:

 {"an": 1, "example": 1, "is": 1, "this": 1}

لاحظ كيف تتجاهل هذه الطريقة ترتيب الكلمات. خذ هذه الأمثلة:

  • "أنا أحب حرب النجوم لكني لا أحب هاري بوتر."
  • "أنا أحب هاري بوتر لكني لا أحب حرب النجوم."

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

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

في مثالنا ، يتكون الجسم من جملتين (صفوف المصفوفة الخاصة بنا):

 ["I like Harry Potter", "I like Star Wars"]

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

تمثل القيم الموجودة في المصفوفة عدد مرات استخدام كلمة معينة في كل عبارة:

 [[1,1,1,1,0,0], [1,1,0,0,1,1]] 

تعرض الصورة سطرين من النص على اليسار: أنا أحب هاري بوتر وأحب حرب النجوم. ثم يتم تحويل هذا النص إلى كيس من الكلمات في المنتصف ، مع كل كلمة متبوعة بعدد المرات التي تم فيها استخدام هذه الكلمة: "أنا أحب هاري بوتر" تصبح "{I: 1 ، مثل: 1 ، Harry: 1 ، Potter : 1 ، Star: 0 ، Wars: 0} "و" I like Star Wars "تصبح" {I: 1 ، مثل: 1 ، Harry: 0 ، Potter: 0 ، Star: 1 ، Wars: 1} "إلى اليمين ، يتم بعد ذلك ترتيب هذه الأرقام في تمثيل مصفوفة: الأول يصبح الصف "1 1 1 1 0 0" والأخير يصبح "1 1 0 0 1 1."
تحويل النص إلى تمثيل مصفوفة

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

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

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

نماذج المعالجة المسبقة وتجميع المواضيع

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

  1. أحرف صغيرة. اجعل كل الكلمات صغيرة. اجعل كل الكلمات صغيرة. لا يتغير معنى الكلمة بغض النظر عن موقعها في الجملة.
  2. ن -الجرام. ضع في اعتبارك كل مجموعات n من الكلمات المتتالية كمصطلحات جديدة تسمى n-grams . وبهذه الطريقة ، ستؤخذ حالات مثل "البيت الأبيض" بعين الاعتبار وإضافتها إلى قائمة المفردات.
  3. ينبع. تحديد البادئات ولواحق الكلمات لعزلها عن جذرها. بهذه الطريقة ، يتم تمثيل كلمات مثل "play" أو "play" أو "player" بكلمة "play". يمكن أن يكون الاشتقاق مفيدًا لتقليل عدد الكلمات في قائمة المفردات مع الحفاظ على معناها ، لكنه يبطئ المعالجة المسبقة إلى حد كبير لأنه يجب تطبيقه على كل كلمة في مجموعة المفردات.
  4. كلمات التوقف. لا تأخذ في الاعتبار مجموعات الكلمات التي تفتقر إلى المعنى أو المنفعة. تتضمن هذه المقالات وحروف الجر ولكنها قد تتضمن أيضًا كلمات غير مفيدة في دراسة الحالة الخاصة بنا ، مثل بعض الأفعال الشائعة.
  5. تردد المصطلح - تردد الوثيقة العكسي (tf – idf). استخدم معامل tf – idf بدلاً من ملاحظة تكرار كل كلمة داخل كل خلية في المصفوفة. يتكون من رقمين ، مضروبين:
    • tf - تكرار مصطلح أو كلمة معينة في النص ، و
    • idf - لوغاريتم إجمالي عدد المستندات مقسومًا على عدد المستندات التي تحتوي على هذا المصطلح المحدد.

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

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

تقنية "الأحرف الصغيرة" تحوّل الجملة "البيت الأبيض". في قائمة كلمات: "the" ، "white" ، "house". تعمل تقنية "n-grams" على تحويلها إلى قائمة أطول: "the" ، "white" ، "house" ، "the white" ، "white house". أسلوب "الاشتقاق" يحول الجملة "لعب لاعب كرة القدم مباراة جيدة". في هذه القائمة: "the" ، "football" ، "play" ، "a" ، "good" ، "game". تعمل تقنية "كلمات التوقف" على تحويلها إلى قائمة أقصر: "كرة القدم" ، "اللعب" ، "جيد" ، "اللعبة".
أمثلة على تقنيات المعالجة المسبقة للنص

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

لتجميع جسمنا ، يمكننا الاختيار من بين عدة خوارزميات ، بما في ذلك عامل المصفوفة غير السالب (NMF) ، وتحليل المكونات الرئيسية المتفرقة (متفرق PCA) ، وتخصيص dirichlet الكامن (LDA). سنركز على LDA لأنه يستخدم على نطاق واسع من قبل المجتمع العلمي نظرًا لنتائجه الجيدة في وسائل التواصل الاجتماعي والعلوم الطبية والعلوم السياسية وهندسة البرمجيات.

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

تأمل المجموعة التالية المكونة من خمس جمل قصيرة (كلها مأخوذة من عناوين نيويورك تايمز ):

 corpus = [ "Rafael Nadal Joins Roger Federer in Missing US Open", "Rafael Nadal Is Out of the Australian Open", "Biden Announces Virus Measures", "Biden's Virus Plans Meet Reality", "Where Biden's Virus Plan Stands"]

يجب أن تحدد الخوارزمية بوضوح موضوعًا واحدًا متعلقًا بالسياسة وفيروس كورونا ، وموضوعًا آخر متعلقًا بنادال والتنس.

تطبيق الإستراتيجية في بايثون

من أجل الكشف عن الموضوعات ، يجب علينا استيراد المكتبات اللازمة. يوجد في Python بعض المكتبات المفيدة في البرمجة اللغوية العصبية والتعلم الآلي ، بما في ذلك NLTK و Scikit-Learn (sklearn).

 from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.decomposition import LatentDirichletAllocation as LDA from nltk.corpus import stopwords

باستخدام CountVectorizer() ، نقوم بإنشاء المصفوفة التي تشير إلى تكرار كلمات كل نص باستخدام CountVectorizer() . لاحظ أن CountVectorizer يسمح بالمعالجة المسبقة إذا قمت بتضمين معلمات مثل stop_words لتضمين كلمات التوقف ، أو ngram_range لتضمين n -grams ، أو lowercase=True لتحويل جميع الأحرف إلى أحرف صغيرة.

 count_vect = CountVectorizer(stop_words=stopwords.words('english'), lowercase=True) x_counts = count_vect.fit_transform(corpus) x_counts.todense() matrix([[0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1]], dtype=int64)

لتحديد المفردات الخاصة بمجموعتنا ، يمكننا ببساطة استخدام السمة .get_feature_names() :

 count_vect.get_feature_names() ['announces', 'australian', 'biden', 'federer', 'joins', 'measures', 'meet', 'missing', 'nadal', 'open', 'plan', 'plans', 'rafael', 'reality', 'roger', 'stands', 'virus']

بعد ذلك ، نقوم بإجراء حسابات tf – idf باستخدام وظيفة sklearn:

 tfidf_transformer = TfidfTransformer() x_tfidf = tfidf_transformer.fit_transform(x_counts)

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

 dimension = 2 lda = LDA(n_components = dimension) lda_array = lda.fit_transform(x_tfidf) lda_array array([[0.8516198 , 0.1483802 ], [0.82359501, 0.17640499], [0.18072751, 0.81927249], [0.1695452 , 0.8304548 ], [0.18072805, 0.81927195]])

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

أخيرًا ، إذا أردنا فهم موضوع هذين الموضوعين ، فيمكننا رؤية أهم الكلمات في كل موضوع:

 components = [lda.components_[i] for i in range(len(lda.components_))] features = count_vect.get_feature_names() important_words = [sorted(features, key = lambda x: components[j][features.index(x)], reverse = True)[:3] for j in range(len(components))] important_words [['open', 'nadal', 'rafael'], ['virus', 'biden', 'measures']]

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

التحليلات واسعة النطاق وحالات الاستخدام الواقعية

يمكن رؤية تحليل واسع النطاق لنمذجة الموضوع في هذه الورقة ؛ لقد درست الموضوعات الإخبارية الرئيسية خلال الانتخابات الرئاسية الأمريكية لعام 2016 وراقبت الموضوعات التي تضمنتها بعض وسائل الإعلام - مثل New York Times و Fox News - في تغطيتها ، مثل الفساد والهجرة. في هذه الورقة ، قمت أيضًا بتحليل الارتباطات والأسباب بين محتوى وسائل الإعلام ونتائج الانتخابات.

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

تعرب مدونة Toptal Engineering عن امتنانها لخوان مانويل أورتيز دي زاراتي لمراجعة عينات التعليمات البرمجية المقدمة في هذه المقالة.

يوصى بقراءة حول نمذجة الموضوع

تحسين نمذجة الموضوع في تويتر
ألبانيز ، فيديريكو وإستيبان فويرستين. "نمذجة موضوعات محسّنة في Twitter من خلال تجميع المجتمع." (20 ديسمبر 2021): arXiv: 2201.00690 [cs.IR]

تحليل تويتر للصحة العامة
بول ومايكل ومارك دريدز. "You Are What You Tweet: تحليل Twitter من أجل الصحة العامة." 3 أغسطس 2021.

تصنيف التوجه السياسي على تويتر
كوهين ورافيف وديريك روثس. "تصنيف التوجهات السياسية على تويتر: الأمر ليس سهلاً!" 3 أغسطس 2021.

استخدام نماذج الموضوع العلائقي لالتقاط الاقتران
جيثرز ومالكولم ودينيس بوشيفانيك. "استخدام نماذج الموضوعات العلائقية لالتقاط اقتران بين الفئات في أنظمة البرمجيات الموجهة للكائنات." 25 أكتوبر 2010.