
يهدف Octis (تحسين نماذج الموضوعات ومقارنتها) إلى التدريب وتحليل ومقارنة نماذج الموضوعات ، التي يتم تقدير مكافوراتها المثلى عن طريق نهج تحسين بايزي. تم قبول هذا العمل في المسار التجريبي لـ EACL2021. انقر لقراءة الورقة!
جدول المحتويات
يمكنك تثبيت Octis مع الأمر التالي:
PIP تثبيت Octis
يمكنك العثور على المتطلبات في ملف المتطلبات.
لفهم كيفية استخدام Octis بسهولة ، ندعوك لتجربة برامجنا التعليمية :)
| اسم | وصلة |
|---|---|
| كيفية إنشاء نموذج موضوع وتقييم النتائج (LDA على 20 NewSgroups) | |
| كيفية تحسين المداخلات المفرطة لنموذج الموضوع العصبي (CTM على M10) |
دليلان على كيفية استخدام Octis مع أمثلة عملية:
برنامج تعليمي حول نمذجة الموضوع على كلمات الأغاني:
لتحميل واحدة من مجموعات البيانات المعالجة بالفعل على النحو التالي:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . fetch_dataset ( "20NewsGroup" )فقط استخدم أحد أسماء مجموعات البيانات المدرجة أدناه. ملاحظة: إنه حساس للحالة!
| الاسم في Octis | مصدر | # مستندات | # كلمات | # التسميات | لغة |
|---|---|---|---|---|---|
| 20 newsgroup | 20 newsgroup | 16309 | 1612 | 20 | إنجليزي |
| BBC_News | بي بي سي نيوز | 2225 | 2949 | 5 | إنجليزي |
| DBLP | DBLP | 54595 | 1513 | 4 | إنجليزي |
| M10 | M10 | 8355 | 1696 | 10 | إنجليزي |
| dbpedia_it | dbpedia_it | 4251 | 2047 | 5 | إيطالي |
| Europarl_it | Europarl_it | 3613 | 2000 | نا | إيطالي |
خلاف ذلك ، يمكنك تحميل مجموعة بيانات مخصصة مسبقًا بالطريقة التالية:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "../path/to/the/dataset/folder" )يمكن أن يكون القسم "تدريب" لقسم التدريب أو "اختبار" للاختبار قسم أو "Val" لقسم التحقق من الصحة. يمكن العثور على مثال على مجموعة البيانات هنا: sample_dataset.
على غرار مجموعات بيانات TensorFlow ومكتبة NLP في Huggingface ، قمنا بتنزيل مجموعات البيانات العامة وأعدناها. نحن لا نستضيف أو نوزع مجموعات البيانات هذه ، ونهتم بجودتها أو الإنصاف ، أو ندعي أن لديك ترخيصًا لاستخدام مجموعة البيانات. تقع على عاتقك مسؤولية تحديد ما إذا كان لديك إذن لاستخدام مجموعة البيانات ضمن ترخيص مجموعة البيانات والاستشهاد بالمالك المناسب لمجموعة البيانات.
إذا كنت مالكًا لمجموعة البيانات وترغب في تحديث أي جزء منه ، أو لا ترغب في تضمين مجموعة البيانات الخاصة بك في هذه المكتبة ، فيرجى الاتصال بمشكلة GitHub.
إذا كنت مالك مجموعة بيانات وترغب في تضمين مجموعة البيانات الخاصة بك في هذه المكتبة ، فيرجى التواصل مع مشكلة GitHub.
للمعالجة المسبقة لمجموعة البيانات ، استيراد فئة المعالجة المسبقة واستخدام طريقة preprocess_dataset.
import os
import string
from octis . preprocessing . preprocessing import Preprocessing
os . chdir ( os . path . pardir )
# Initialize preprocessing
preprocessor = Preprocessing ( vocabulary = None , max_features = None ,
remove_punctuation = True , punctuation = string . punctuation ,
lemmatize = True , stopword_list = 'english' ,
min_chars = 1 , min_words_docs = 0 )
# preprocess
dataset = preprocessor . preprocess_dataset ( documents_path = r'..corpus.txt' , labels_path = r'..labels.txt' )
# save the preprocessed dataset
dataset . save ( 'hello_dataset' )لمزيد من التفاصيل حول المعالجة المسبقة ، انظر مثال العرض التجريبي المسبق في مجلد الأمثلة.
لإنشاء نموذج ، قم بتحميل مجموعة بيانات معالجة مسبقًا ، وتعيين النموذج HyperParameters واستخدم train_model() لتدريب النموذج.
from octis . dataset . dataset import Dataset
from octis . models . LDA import LDA
# Load a dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "dataset_folder" )
model = LDA ( num_topics = 25 ) # Create model
model_output = model . train_model ( dataset ) # Train the modelإذا تم تقسيم مجموعة البيانات ، فيمكنك:
| اسم | تطبيق |
|---|---|
| CTM (Bianchi et al. 2021) | https://github.com/milanlproc/contextualized-topic-models |
| ETM (Dieng et al. 2020) | https://github.com/adjidieng/etm |
| HDP (Blei et al. 2004) | https://radimrehurek.com/gensim/ |
| LDA (Blei et al. 2003) | https://radimrehurek.com/gensim/ |
| LSI (Landauer et al. 1998) | https://radimrehurek.com/gensim/ |
| NMF (Lee and Seung 2000) | https://radimrehurek.com/gensim/ |
| Neurallda (Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
| Prodlda (Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
إذا كنت تستخدم أحد هذه التطبيقات ، فتأكد من الاستشهاد بالورقة الصحيحة.
إذا قمت بتطبيق نموذج وترغب في تحديث أي جزء منه ، أو لا تريد أن يتم تضمين نموذجك في هذه المكتبة ، فيرجى الاتصال بمسألة github.
إذا قمت بتنفيذ نموذج وترغب في تضمين نموذجك في هذه المكتبة ، فيرجى الاتصال به من خلال مشكلة github. خلاف ذلك ، إذا كنت ترغب في تضمين النموذج بنفسك ، راجع القسم التالي.
لتقييم النموذج ، اختر مقياسًا واستخدم طريقة score() للفئة المترية.
from octis . evaluation_metrics . diversity_metrics import TopicDiversity
metric = TopicDiversity ( topk = 10 ) # Initialize metric
topic_diversity_score = metric . score ( model_output ) # Compute score of the metricمقاييس التصنيف :
- F1-Score:
F1Score(dataset)- الدقة:
PrecisionScore(dataset)- أذكر:
RecallScore(dataset)- الدقة:
AccuracyScore(dataset)
مقاييس التماسك :
- تماسك UMass:
Coherence(measure='u_mass')- C_V Coherence:
Coherence(measure='c_v')- تماسك UCI:
Coherence(measure='c_uci')- تماسك NPMI:
Coherence(measure='c_npmi')- تماسك القائم على التضمين الزوجية:
WECoherencePairwise()- Word Sibdding Coherence Centroid:
WECoherenceCentroid()
مقاييس التنوع :
- تنوع الموضوع:
TopicDiversity()- invertedrbo:
InvertedRBO()- تطابقات invertedrbo المستندة إلى تضمين الكلمات:
WordEmbeddingsInvertedRBO()- Word invertedrbo centroid:
WordEmbeddingsInvertedRBOCentroid()- نسبة احتمالات السجل:
LogOddsRatio()- اختلاف Kullback-Liebler:
KLDivergence()
مقاييس التشابه :
- تداخل متحيز في المرتبة:
RBO()- مباريات RBO المستندة إلى تضمين الكلمات:
WordEmbeddingsRBOMatch()- RBO Centroid المستندة إلى تضمين الكلمات:
WordEmbeddingsRBOCentroid()- تشابه الزوج القائم على تضمينات الكلمات:
WordEmbeddingsPairwiseSimilarity()- تشابه النقط الوسطى القائمة على الكلمات:
WordEmbeddingsCentroidSimilarity()- تشابه المبلغ المرجح المستند إلى الكلمات:
WordEmbeddingsWeightedSumSimilarity()- تشابه jaccard الزوجي:
PairwiseJaccardSimilarity()
مقاييس أهمية الموضوع :
- kl موحد:
KL_uniform()- KL FACUUUS:
KL_vacuous()- خلفية KL:
KL_background()
نماذج ترث من الطبقة الملخص المحددة في Octis/Models/Model.py. لإنشاء طراز الخاص بك ، يجب أن يتجاوز فصلك Train_Model (Self ، مجموعة البيانات ، المقاييس المفرطة) والذي يتطلب دائمًا كائن مجموعة بيانات على الأقل وقاموسًا من المقاييس المفرطة كمدخلات ويجب أن يعيد قاموسًا مع إخراج النموذج كإخراج.
لفهم كيفية عمل النموذج بشكل أفضل ، دعونا نلقي نظرة على تطبيق LDA. تتمثل الخطوة الأولى في تطوير نموذج مخصص في تحديد قاموس القيم الافتراضية المفرطات:
hyperparameters = { 'corpus' : None , 'num_topics' : 100 , 'id2word' : None , 'alpha' : 'symmetric' ,
'eta' : None , # ...
'callbacks' : None }يتيح تحديد قيم الفصائل الافتراضية للمستخدمين العمل على مجموعة فرعية منها دون الحاجة إلى تعيين قيمة لكل معلمة.
والخطوة التالية هي تجاوز Train_Model ():
def train_model ( self , dataset , hyperparameters = {}, top_words = 10 ):تتطلب طريقة LDA مجموعة بيانات ، وقاموس المفروسيات ، وحجة إضافية (اختيارية) تستخدم لتحديد عدد الكلمات الأكثر أهمية لكل موضوع.
من خلال التخلف عن السداد ، تلك الموجودة في الإدخال ومجموعة البيانات ، يجب أن تكون قادرًا على كتابة الرمز الخاص بك وإرجاعه كقاموس مع 3 إدخالات على الأقل:
إذا كان النموذج الخاص بك يدعم تقسيم التدريب/الاختبار ، فيجب أن يعود أيضًا:
لتحسين نموذج تحتاجه لتحديد مجموعة بيانات وقياس ومساحة البحث في المقاييس المفرطة للتحسين. بالنسبة لأنواع المفردات المفرطة ، نستخدم أنواع scikit-optimize (https://scikit-optimize.github.io/stable/modules/space.html)
from octis . optimization . optimizer import Optimizer
from skopt . space . space import Real
# Define the search space. To see which hyperparameters to optimize, see the topic model's initialization signature
search_space = { "alpha" : Real ( low = 0.001 , high = 5.0 ), "eta" : Real ( low = 0.001 , high = 5.0 )}
# Initialize an optimizer object and start the optimization.
optimizer = Optimizer ()
optResult = optimizer . optimize ( model , dataset , eval_metric , search_space , save_path = "../results" # path to store the results
number_of_call = 30 , # number of optimization iterations
model_runs = 5 ) # number of runs of the topic model
#save the results of th optimization in a csv file
optResult . save_to_csv ( "results.csv" )ستوفر النتيجة قيمة أفضل من المقياس بتكوين مقياس الفائقة المقابلة ، والقيمة المفرطة والقيمة المترية لكل تكرار للتحسين. لتصور هذه المعلومات ، يجب عليك تعيين سمة "مؤامرة" لـ Bayesian_optimization إلى True.
يمكنك العثور على المزيد هنا: Optimizer ReadMe
يتضمن Octis واجهة رسومية سهلة الاستخدام لإنشاء التجارب ومراقبتها وعرضها. باتباع معايير تنفيذ مجموعات البيانات والموديلات والمقاييس ، ستقوم لوحة القيادة بالتحديث تلقائيًا وتتيح لك استخدام تطبيقاتك المخصصة.
لتشغيل لوحة القيادة ، تحتاج إلى استنساخ الريبو. بينما في دليل المشروع ، قم بتشغيل الأمر التالي:
python OCTIS/dashboard/server.pyسيتم فتح المتصفح وسيتم إعادة توجيهك إلى لوحة القيادة. في لوحة القيادة يمكنك:
تم قبول هذا العمل في المسار التجريبي لـ EACL 2021! انقر لقراءة الورقة! إذا قررت استخدام هذا المورد ، يرجى الاستشهاد:
inproceedings {terragni2020octis ،
العنوان = {{Octis}: مقارنة وتحسين نماذج الموضوعات بسيطة!} ،
المؤلف = {Terragni ، Silvia and Fersini ، Elisabetta و Galuzzi ، Bruno Giovanni و Troevino ، Pietro and Candelieri ، Antonio} ،
السنة = {2021} ،
booktitle = {وقائع المؤتمر السادس عشر للفصل الأوروبي للجمعية اللغوية الحسابية: مظاهرات النظام} ،
الشهر = أبريل ،
السنة = "2021" ،
Publisher = "جمعية اللغويات الحسابية" ،
url = "https://www.aclweb.org/anthology/2021.eacl-demos.31" ،
الصفحات = "263--270" ،
}
inproceedings {dblp: conf/clic-it/terragnif21 ،
المؤلف = {Silvia terragni و Elisabetta Fersini} ،
محرر = {Elisabetta Fersini و Marco Passarotti و Viviana Patti} ،
العنوان = {{Octis 2.0: تحسين ومقارنة نماذج الموضوع باللغة الإيطالية متساوية
أبسط!}} ،
booktitle = {وقائع المؤتمر الإيطالي الثامن حول اللغويات الحسابية ،
CLIC-IT 2021 ، ميلانو ، إيطاليا ، 26-28 يناير ، 2022} ،
Series = {{ceur} وقائع ورشة العمل} ،
المجلد = {3033} ،
Publisher = {ceur-ws.org} ،
السنة = {2021} ،
url = {http://ceur-ws.org/vol-3033/paper55.pdf} ،
}
تم إنشاء هذه الحزمة باستخدام CookieCutter وقالب مشروع Audreyr/CookieCutter-pypackage. بفضل جميع المطورين الذين أصدروا تطبيقات نماذج الموضوعات الخاصة بهم. شكر خاص إلى Tenggaard الذي ساعدنا في العثور على العديد من الحشرات في إصدارات أوكتس المبكر وإميل Rijcken الذي كتب بلطف دليلين حول كيفية استخدام Octis :)