
Bertopic هي تقنية نمذجة الموضوع التي تستفيد؟ المحولات و C-TF-IDF لإنشاء مجموعات كثيفة تسمح بمواضيع يمكن تفسيرها بسهولة مع الحفاظ على الكلمات المهمة في أوصاف الموضوع.
يدعم Bertopic جميع أنواع تقنيات نمذجة الموضوع:
| إرشاد | تحت الإشراف | شبه إشراف |
| يدوي | توزيعات متعددة الموضوعات | التسلسل الهرمي |
| على أساس الفصل | متحرك | عبر الإنترنت/تدريجي |
| متعدد الوسائط | متعددة | توليد النص/LLM |
| صفر طلق (جديد!) | نماذج دمج (جديدة!) | كلمات البذور (جديدة!) |
يمكن العثور على المشاركات المتوسطة المقابلة هنا ، هنا وهنا. للحصول على نظرة عامة أكثر تفصيلاً ، يمكنك قراءة الورقة أو رؤية نظرة عامة موجزة.
يمكن أن يتم التثبيت ، مع محولات الجملة ، باستخدام PYPI:
pip install bertopicإذا كنت ترغب في تثبيت bertopic مع نماذج التضمين الأخرى ، يمكنك اختيار واحد مما يلي:
# Choose an embedding backend
pip install bertopic[flair,gensim,spacy,use]
# Topic modeling with images
pip install bertopic[vision]للحصول على نظرة عامة متعمقة على ميزات Bertopic ، يمكنك التحقق من الوثائق الكاملة أو يمكنك متابعتها مع أحد الأمثلة أدناه:
| اسم | وصلة |
|---|---|
| ابدأ هنا - أفضل الممارسات في Bertopic | |
| ؟ جديد! - نمذجة الموضوع على البيانات الكبيرة (تسارع GPU) | |
| ؟ جديد! - نمذجة الموضوع مع Llama 2؟ | |
| ؟ جديد! - نمذجة الموضوع مع LLMs الكمية | |
| نمذجة الموضوع مع bertopic | |
| (مخصص) نماذج التضمين في Bertopic | |
| التخصيص المتقدم في Bertopic | |
| (شبه) نمذجة الموضوع الخاضعة للإشراف مع bertopic | |
| نمذجة الموضوع الديناميكي مع تغريدات ترامب | |
| نماذج موضوع ملخصات Arxiv |
نبدأ باستخراج الموضوعات من مجموعة بيانات 20 مجموعة أخبار معروفة تحتوي على مستندات اللغة الإنجليزية:
from bertopic import BERTopic
from sklearn . datasets import fetch_20newsgroups
docs = fetch_20newsgroups ( subset = 'all' , remove = ( 'headers' , 'footers' , 'quotes' ))[ 'data' ]
topic_model = BERTopic ()
topics , probs = topic_model . fit_transform ( docs )بعد توليد مواضيع واحتمالاتها ، يمكننا الوصول إلى جميع الموضوعات مع تمثيلات موضوعها:
> >> topic_model . get_topic_info ()
Topic Count Name
- 1 4630 - 1_ can_your_will_any
0 693 49_ windows_drive_dos_file
1 466 32_j esus_bible_christian_faith
2 441 2_ space_launch_orbit_lunar
3 381 22_ key_encryption_keys_encrypted
... يشير الموضوع -1 إلى جميع المستندات الخارجية وعادة ما يتم تجاهلها. تصف كل كلمة في موضوع ما الموضوع الأساسي لهذا الموضوع ويمكن استخدامه لتفسير هذا الموضوع. بعد ذلك ، دعونا نلقي نظرة على الموضوع الأكثر شيوعًا الذي تم إنشاؤه:
> >> topic_model . get_topic ( 0 )
[( 'windows' , 0.006152228076250982 ),
( 'drive' , 0.004982897610645755 ),
( 'dos' , 0.004845038866360651 ),
( 'file' , 0.004140142872194834 ),
( 'disk' , 0.004131678774810884 ),
( 'mac' , 0.003624848635985097 ),
( 'memory' , 0.0034840976976789903 ),
( 'software' , 0.0034415334250699077 ),
( 'email' , 0.0034239554442333257 ),
( 'pc' , 0.003047105930670237 )] باستخدام .get_document_info ، يمكننا أيضًا استخراج المعلومات على مستوى المستند ، مثل مواضيعها المقابلة ، والاحتمالات ، سواء كانت مستندات تمثيلية للموضوع ، وما إلى ذلك:
> >> topic_model . get_document_info ( docs )
Document Topic Name Top_n_words Probability ...
I am sure some bashers of Pens ... 0 0_ game_team_games_season game - team - games ... 0.200010 ...
My brother is in the market for ... - 1 - 1_ can_your_will_any can - your - will ... 0.420668 ...
Finally you said what you dream ... - 1 - 1_ can_your_will_any can - your - will ... 0.807259 ...
Think ! It ' s the SCSI card doing ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.071746 ...
1 ) I have an old Jasmine drive ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.038983 ... Tip : استخدم BERTopic(language="multilingual") لتحديد نموذج يدعم أكثر من 50 لغة.
في Bertopic ، هناك عدد من تمثيلات الموضوعات المختلفة التي يمكننا الاختيار من بينها. كلها مختلفة تمامًا عن بعضها البعض وتعطي وجهات نظر وتغيرات مثيرة للاهتمام في تمثيلات الموضوع. بداية رائعة هي KeyBERTInspired ، والتي تزيد بالنسبة للعديد من المستخدمين من التماسك ويقلل من كلمات التوقف من تمثيلات الموضوع الناتجة:
from bertopic . representation import KeyBERTInspired
# Fine-tune your topic representations
representation_model = KeyBERTInspired ()
topic_model = BERTopic ( representation_model = representation_model )ومع ذلك ، قد ترغب في استخدام شيء أكثر قوة لوصف مجموعاتك. يمكنك حتى استخدام chatgpt أو نماذج أخرى من Openai لإنشاء الملصقات والملخصات والعبارات والكلمات الرئيسية والمزيد:
import openai
from bertopic . representation import OpenAI
# Fine-tune topic representations with GPT
client = openai . OpenAI ( api_key = "sk-..." )
representation_model = OpenAI ( client , model = "gpt-3.5-turbo" , chat = True )
topic_model = BERTopic ( representation_model = representation_model ) Tip : بدلاً من التكرار على كل تمثيلات الموضوعات المختلفة هذه ، يمكنك تصميمها في وقت واحد مع تمثيلات موضوع متعددة المشاعر في Bertopic.
بعد تدريب نموذجنا البورتوبي ، يمكننا أن نمر بشكل متكرر من خلال مئات الموضوعات للحصول على فهم جيد للمواضيع التي تم استخلاصها. ومع ذلك ، فإن هذا يستغرق بعض الوقت ويفتقر إلى تمثيل عالمي. بدلاً من ذلك ، يمكننا استخدام أحد خيارات التصور العديدة في Bertopic. على سبيل المثال ، يمكننا تصور الموضوعات التي تم إنشاؤها بطريقة تشبه إلى حد بعيد LDAVIS:
topic_model . visualize_topics ()
بشكل افتراضي ، فإن الخطوات الرئيسية لنمذجة الموضوع مع Bertopic هي محولات الجملة ، و UMAP ، و HDBSCAN ، و C-TF-IDF. ومع ذلك ، فإنه يفترض بعض الاستقلال بين هذه الخطوات التي تجعل البورتوبيك وحدات. بمعنى آخر ، لا يسمح لك Bertopic فقط ببناء نموذج الموضوع الخاص بك ولكن لاستكشاف العديد من تقنيات نمذجة الموضوعات أعلى نموذج الموضوع المخصص:
يمكنك تبديل أي من هذه النماذج أو حتى إزالتها تمامًا. الخطوات التالية وحدات تمامًا:
يحتوي Bertopic على العديد من الوظائف التي يمكن أن تصبح سريعة. لتخفيف هذه المشكلة ، ستجد نظرة عامة على جميع الأساليب ووصفًا قصيرًا لغرضها.
أدناه ، ستجد نظرة عامة على الوظائف المشتركة في Bertopic.
| طريقة | شفرة |
|---|---|
| تناسب النموذج | .fit(docs) |
| تناسب النموذج والتنبؤ بالوثائق | .fit_transform(docs) |
| توقع مستندات جديدة | .transform([new_doc]) |
| الوصول إلى موضوع واحد | .get_topic(topic=12) |
| الوصول إلى جميع الموضوعات | .get_topics() |
| احصل على موضوع Freq | .get_topic_freq() |
| احصل على كل معلومات الموضوع | .get_topic_info() |
| احصل على جميع معلومات الوثيقة | .get_document_info(docs) |
| احصل على مستندات تمثيلية لكل موضوع | .get_representative_docs() |
| تحديث تمثيل الموضوع | .update_topics(docs, n_gram_range=(1, 3)) |
| توليد ملصقات الموضوع | .generate_topic_labels() |
| تعيين ملصقات الموضوع | .set_topic_labels(my_custom_labels) |
| موضوعات دمج | .merge_topics(docs, topics_to_merge) |
| تقليل NR من المواضيع | .reduce_topics(docs, nr_topics=30) |
| تقليل القيم المتطرفة | .reduce_outliers(docs, topics) |
| ابحث عن موضوعات | .find_topics("vehicle") |
| حفظ النموذج | .save("my_model", serialization="safetensors") |
| نموذج التحميل | BERTopic.load("my_model") |
| الحصول على المعلمات | .get_params() |
بعد تدريب طراز Bertopic الخاص بك ، يتم حفظ عدة سمات داخل النموذج الخاص بك. تشير هذه السمات ، جزئياً ، إلى كيفية تخزين معلومات النموذج على مقدر أثناء التركيب. السمات التي تراها أدناه جميعها في _ وهي سمات عامة يمكن استخدامها للوصول إلى معلومات النموذج.
| يصف | وصف |
|---|---|
.topics_ | الموضوعات التي يتم إنشاؤها لكل وثيقة بعد تدريب أو تحديث نموذج الموضوع. |
.probabilities_ | الاحتمالات التي يتم إنشاؤها لكل وثيقة إذا تم استخدام HDBSCAN. |
.topic_sizes_ | حجم كل موضوع |
.topic_mapper_ | فصل لتتبع الموضوعات وأخصائياتها في أي وقت يتم دمجها/تقليلها. |
.topic_representations_ | أعلى المصطلحات N لكل موضوع وقيم C-TF-IDF الخاصة بكل منها. |
.c_tf_idf_ | المصفوفة المدى للموضوع كما يتم حسابها من خلال C-TF-IDF. |
.topic_aspects_ | الجوانب المختلفة ، أو التمثيلات ، لكل موضوع. |
.topic_labels_ | الملصقات الافتراضية لكل موضوع. |
.custom_labels_ | تسميات مخصصة لكل موضوع تم إنشاؤه من خلال .set_topic_labels . |
.topic_embeddings_ | التضمين لكل موضوع إذا تم استخدام embedding_model . |
.representative_docs_ | المستندات التمثيلية لكل موضوع إذا تم استخدام HDBSCAN. |
هناك العديد من حالات الاستخدام المختلفة التي يمكن استخدام نمذجة الموضوع. على هذا النحو ، تم تطوير العديد من الاختلافات من bertopic بحيث يمكن استخدام حزمة واحدة عبر العديد من حالات الاستخدام.
| طريقة | شفرة |
|---|---|
| تقريب توزيع الموضوع | .approximate_distribution(docs) |
| نمذجة الموضوع على الإنترنت | .partial_fit(doc) |
| نمذجة موضوع شبه خاضعة للإشراف | .fit(docs, y=y) |
| نمذجة الموضوع تحت الإشراف | .fit(docs, y=y) |
| نمذجة الموضوع اليدوي | .fit(docs, y=y) |
| نمذجة موضوع متعددة الوسائط | .fit(docs, images=images) |
| نمذجة الموضوع لكل فصل | .topics_per_class(docs, classes) |
| نمذجة الموضوع الديناميكي | .topics_over_time(docs, timestamps) |
| نمذجة الموضوع الهرمي | .hierarchical_topics(docs) |
| نمذجة الموضوع الموجهة | BERTopic(seed_topic_list=seed_topic_list) |
| صفر نماذج موضوع | BERTopic(zeroshot_topic_list=zeroshot_topic_list) |
| دمج نماذج متعددة | BERTopic.merge_models([topic_model_1, topic_model_2]) |
يمكن أن يكون تقييم نماذج الموضوع أمرًا صعبًا إلى حد ما بسبب الطبيعة الذاتية للتقييم إلى حد ما. إن تصور جوانب مختلفة لنموذج الموضوع يساعد في فهم النموذج ويسهل تعديل النموذج حسب رغبتك.
| طريقة | شفرة |
|---|---|
| تصور الموضوعات | .visualize_topics() |
| تصور المستندات | .visualize_documents() |
| تصور التسلسل الهرمي للوثيقة | .visualize_hierarchical_documents() |
| تصور الموضوع الهرمي | .visualize_hierarchy() |
| تصور شجرة الموضوع | .get_topic_tree(hierarchical_topics) |
| تصور مصطلحات الموضوع | .visualize_barchart() |
| تصور تشابه الموضوع | .visualize_heatmap() |
| تصور انخفاض درجة المدة | .visualize_term_rank() |
| تصور توزيع احتمال الموضوع | .visualize_distribution(probs[0]) |
| تصور الموضوعات مع مرور الوقت | .visualize_topics_over_time(topics_over_time) |
| تصور الموضوعات لكل فصل | .visualize_topics_per_class(topics_per_class) |
للاستشهاد بالورق البيرتيوبي ، يرجى استخدام مرجع bibtex التالي:
@article{grootendorst2022bertopic,
title={BERTopic: Neural topic modeling with a class-based TF-IDF procedure},
author={Grootendorst, Maarten},
journal={arXiv preprint arXiv:2203.05794},
year={2022}
}