نماذج الموضوعات السياقية (CTM) هي عائلة من نماذج الموضوعات التي تستخدم تمثيلات تدريبات تم تدريبها مسبقًا (على سبيل المثال ، BERT) لدعم نمذجة الموضوع. انظر الأوراق للحصول على التفاصيل:
تدعم عائلة نمذجة الموضوع الجديدة العديد من اللغات المختلفة (أي اللغات التي تدعمها نماذج Huggingface) وتأتي في نسختين: يجمع CombinedTM بين التضمينات السياقية مع حقيبة الكلمات القديمة الجيدة لتقديم مواضيع أكثر تماسكًا ؛ ZeroshottM هو نموذج الموضوع المثالي للمهمة التي قد يكون لديك فيها كلمات مفقودة في بيانات الاختبار ، وأيضًا ، إذا تم تدريبها مع التضمينات متعددة اللغات ، يرث خاصية كونها نموذجًا متعدد اللغات!
الميزة الكبيرة هي أنه يمكنك استخدام تضمينات مختلفة لـ CTMs. وبالتالي ، عند ظهور طريقة تضمين جديدة ، يمكنك استخدامه في الكود وتحسين نتائجك. لم نعد نقتصر على القوس.
لدينا أيضا كيتي! عرض فرعي جديد يمكن استخدامه لإنشاء مصنف إنساني في الحلقة لتصنيف المستندات بسرعة وإنشاء مجموعات مسموسة.
يمكنك إلقاء نظرة على منشور المدونة المتوسطة لدينا أو البدء من أحد برامجنا التعليمية في كولاب:
| اسم | وصلة |
|---|---|
| مجتمعة TM على بيانات Wikipedia (Preproc+Save+Viz) (مستقر V2.3.0 ) | |
| صفر طلقة صفر النمذجة موضوعية (preproc+بمعنى) (مستقر v2.3.0 ) | |
| كيتي: الإنسان في مصنف الحلقة (الاستخدام عالي المستوى) (مستقر v2.2.0 ) | |
| SuperCTM و β-CTM (استخدام عالي المستوى) (مستقر V2.2.0 ) |
هام : إذا كنت ترغب في استخدام CUDA ، فأنت بحاجة إلى تثبيت الإصدار الصحيح من أنظمة CUDA التي تتوافق مع توزيعك ، انظر Pytorch.
تثبيت الحزمة باستخدام PIP
pip install -U contextualized_topic_modelsأحد الجوانب المهمة التي يجب مراعاتها هي الشبكة التي تريد استخدامها: تلك التي تجمع بين التضمينات السياقية والقوس (CombinedTM) أو تلك التي تستخدم فقط التضمينات السياقية (ZeroshottM)
ولكن تذكر أنه يمكنك القيام بنمذجة الموضوع عبر اللغات الصفرية فقط مع نموذج ZeroshottM.
نماذج الموضوع السياقية تدعم أيضًا الإشراف (SuperCTM). يمكنك قراءة المزيد حول هذا الموضوع على الوثائق.
لدينا أيضًا Kitty: فائدة يمكنك استخدامها للقيام بإنسان أبسط في تصنيف حلقة المستندات الخاصة بك. يمكن أن يكون هذا مفيدًا جدًا لإجراء تصفية المستندات. يعمل أيضًا في إعداد عبر اللغة ، وبالتالي قد تكون قادرًا على تصفية المستندات بلغة لا تعرفها!
إذا وجدت هذا مفيدًا ، يمكنك الاستشهاد بالأوراق التالية :)
Zeroshottm
inproceedings {bianchi-etal-2021-cross ،
title = "نماذج الموضوعات السياقية عبر اللغات مع التعلم الصفري" ،
المؤلف = "بيانشي ، فيديريكو وتيراجني ، سيلفيا وهوفي ، ديرك و
Nozza و Debora و Fersini ، Elisabetta "،
booktitle = "وقائع المؤتمر السادس عشر للفصل الأوروبي من جمعية اللغويات الحاسوبية: المجلد الرئيسي" ،
الشهر = أبريل ،
السنة = "2021" ،
العنوان = "عبر الإنترنت" ،
Publisher = "جمعية اللغويات الحسابية" ،
url = "https://www.aclweb.org/anthology/2021.eacl-main.143" ،
الصفحات = "1676--1683" ،
}
مجتمعة
inproceedings {bianchi-etal-2021-pre ،
العنوان = "التدريب المسبق هو موضوع ساخن: تضمينات الوثيقة السياقية تحسين تماسك الموضوع" ،
المؤلف = "بيانشي ، فيديريكو و
Terragni ، سيلفيا و
هوفي ، ديرك "،
booktitle = "وقائع الاجتماع السنوي 59 لجمعية اللغويات الحسابية والمؤتمر الدولي الحادي عشر لمشاركة اللغة الطبيعية (المجلد 2: الأوراق القصيرة)" ،
الشهر = أغسطس ،
السنة = "2021" ،
العنوان = "عبر الإنترنت" ،
Publisher = "جمعية اللغويات الحسابية" ،
url = "https://aclanthology.org/2021.acl-short.96" ،
doi = "10.18653/v1/2021.acl-short.96" ،
الصفحات = "759--766" ،
}
تستخدم بعض الأمثلة أدناه نموذج التضمين متعدد اللغات paraphrase-multilingual-mpnet-base-v2 . هذا يعني أن التمثيلات التي ستستخدمها هي طعن. ومع ذلك قد تحتاج إلى تغطية أوسع للغات أو لغة واحدة فقط. ارجع إلى الصفحة الموجودة في الوثائق لمعرفة كيفية اختيار نموذج للغة الأخرى. في هذه الحالة ، يمكنك التحقق من Sbert للعثور على النموذج المثالي للاستخدام.
هنا ، يمكنك قراءة المزيد عن اللغة الخاصة والموتالية.
يجب عليك بالتأكيد إلقاء نظرة على الوثائق لفهم أفضل لكيفية عمل نماذج الموضوع هذه.
إليك كيفية استخدام CombinedTM. هذا هو نموذج موضوع قياسي يستخدم أيضًا التضمينات السياقية. الشيء الجيد في CombinedTM هو أنه يجعل موضوعك أكثر تماسكًا (انظر الورقة https://arxiv.org/abs/2004.03974). n_components = 50 يحدد عدد الموضوعات.
from contextualized_topic_models . models . ctm import CombinedTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
qt = TopicModelDataPreparation ( "all-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = list_of_unpreprocessed_documents , text_for_bow = list_of_preprocessed_documents )
ctm = CombinedTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 ) # 50 topics
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )ملاحظات متقدمة: يجمع TM مجتمعة بين القوس مع Sbert ، وهي عملية يبدو أنها تزيد من تماسك الموضوعات المتوقعة (https://arxiv.org/pdf/2004.03974.pdf).
يمكن استخدام ZeroshottM لدينا لنمذجة موضوع الصفر. يمكنه التعامل مع الكلمات التي لا تستخدم خلال مرحلة التدريب. والأمر الأكثر إثارة للاهتمام ، يمكن استخدام هذا النموذج لنمذجة الموضوع عبر اللغات (انظر الأقسام التالية)! انظر الورقة (https://www.aclweb.org/anthology/2021.eacl-main.143)
from contextualized_topic_models . models . ctm import ZeroShotTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
text_for_contextual = [
"hello, this is unpreprocessed text you can give to the model" ,
"have fun with our topic model" ,
]
text_for_bow = [
"hello unpreprocessed give model" ,
"fun topic model" ,
]
qt = TopicModelDataPreparation ( "paraphrase-multilingual-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = text_for_contextual , text_for_bow = text_for_bow )
ctm = ZeroShotTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 )
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )كما ترون ، فإن واجهة برمجة التطبيقات عالية المستوى للتعامل مع النص سهل الاستخدام ؛ يجب استخدام text_for_bert لتمرير قائمة المستندات التي لم يتم تجميعها مسبقًا إلى النموذج. بدلاً من ذلك ، إلى text_for_bow ، يجب عليك تمرير النص المعالج مسبقًا المستخدم لبناء القوس.
ملاحظات متقدمة: وبهذه الطريقة ، يمكن لـ Sbert استخدام جميع المعلومات الموجودة في النص لإنشاء العروض.
بمجرد تدريب النموذج ، من السهل جدًا الحصول على الموضوعات!
ctm . get_topics ()ستهتم طريقة التحويل بمعظم الأشياء بالنسبة لك ، على سبيل المثال توليد القوس المقابل من خلال النظر فقط في الكلمات التي شهدها النموذج في التدريب. ومع ذلك ، يأتي هذا مع بعض المطبات عند التعامل مع Zeroshottm ، كما سنقوم في القسم التالي.
ومع ذلك ، يمكنك تحميل التضمينات يدويًا إذا أردت (انظر الجزء المتقدم من هذه الوثائق).
إذا كنت تستخدم CombinedTM ، فأنت بحاجة إلى تضمين نص الاختبار للقوس:
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual , text_for_bow = testing_text_for_bow )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each documentإذا كنت تستخدم ZeroshottM ، فأنت لا تحتاج إلى استخدام testing_text_for_bow لأنه إذا كنت تستخدم مجموعة مختلفة من مستندات الاختبار ، فسيؤدي ذلك إلى إنشاء قوس بحجم مختلف. وبالتالي ، فإن أفضل طريقة للقيام بذلك هي تمرير النص فقط الذي سيتم تقديمه في إدخال النموذج السيني:
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 )بمجرد تدريب نموذج ZeroshottM مع تضمينات متعددة اللغات ، يمكنك استخدام خط الأنابيب البسيط هذا للتنبؤ بالمواضيع الخاصة بالوثائق بلغة مختلفة (طالما أن هذه اللغة مغطاة بواسطة إعادة صياغة MPNET-Base-V2 ).
# here we have a Spanish document
testing_text_for_contextual = [
"hola, bienvenido" ,
]
# since we are doing multilingual topic modeling, we do not need the BoW in
# ZeroShotTM when doing cross-lingual experiments (it does not make sense, since we trained with an english Bow
# to use the spanish BoW)
testing_dataset = qt . transform ( testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each documentملاحظات متقدمة: لا نحتاج إلى تمرير حقيبة الكلمات الإسبانية: كيس كلمات اللغتين لن تكون قابلة للمقارنة! نحن ننقله إلى النموذج لأسباب توافق ، لكن لا يمكنك الحصول على إخراج النموذج (أي القوس المتوقع للغة المدربة) ومقارنته بلغة الاختبار.
هل تحتاج إلى برنامج نصي سريع لتشغيل خط أنابيب المعالجة المسبقة؟ لقد قمت بتغطيتك! قم بتحميل المستندات الخاصة بك ثم استخدم فصل المعالجة البسيطة. سيتم تصفية الكلمات النادرة تلقائيًا وإزالة المستندات الفارغة بعد التدريب. ستعود طريقة المعالجة المسبقة إلى المستندات المعالجة مسبقًا وغير المعالجة. نستخدم عمومًا غير معالجة لـ Bert و Bertorged Prevorted the Bag Word.
from contextualized_topic_models . utils . preprocessing import WhiteSpacePreprocessing
documents = [ line . strip () for line in open ( "unpreprocessed_documents.txt" ). readlines ()]
sp = WhiteSpacePreprocessing ( documents , "english" )
preprocessed_documents , unpreprocessed_corpus , vocab , retained_indices = sp . preprocess ()هل لديك تضمينات مخصصة وتريد استخدامها لتحقيق نتائج أسرع؟ فقط أعطهم إلى كيتي!
from contextualized_topic_models . models . kitty_classifier import Kitty
import numpy as np
# read the training data
training_data = list ( map ( lambda x : x . strip (), open ( "train_data" ). readlines ()))
custom_embeddings = np . load ( 'custom_embeddings.npy' )
kt = Kitty ()
kt . train ( training_data , custom_embeddings = custom_embeddings , stopwords_list = [ "stopwords" ])
print ( kt . pretty_print_word_classes ())ملاحظة: يجب أن تكون التضمينات المخصصة numpy.arrays.
تم إنشاء هذه الحزمة باستخدام CookieCutter وقالب مشروع Audreyr/CookieCutter-pypackage. لتخفيف استخدام المكتبة ، قمنا أيضًا بتضمين حزمة RBO ، جميع الحقوق المحفوظة لمؤلف تلك الحزمة.
تذكر أن هذه أداة بحث :)