KeyBERT عبارة عن تقنية بسيطة وسهلة الاستخدام لاستخراج الكلمات الرئيسية تعمل على الاستفادة من تضمينات BERT لإنشاء كلمات رئيسية وعبارات رئيسية تشبه المستند إلى حد كبير.
يمكن العثور على المنشور المتوسط المقابل هنا.
العودة إلى ToC
على الرغم من أن هناك بالفعل العديد من الطرق المتاحة لتوليد الكلمات الرئيسية (على سبيل المثال، Rake، YAKE!، TF-IDF، وما إلى ذلك) فقد أردت إنشاء طريقة أساسية جدًا، ولكنها قوية لاستخراج الكلمات الرئيسية والعبارات الرئيسية. هذا هو المكان الذي يأتي فيه KeyBERT ! والذي يستخدم تضمينات BERT وتشابه جيب التمام البسيط للعثور على العبارات الفرعية في المستند الأكثر تشابهًا مع المستند نفسه.
أولاً، يتم استخراج تضمينات المستند باستخدام BERT للحصول على تمثيل على مستوى المستند. بعد ذلك، يتم استخراج تضمينات الكلمات لكلمات/عبارات N-gram. أخيرًا، نستخدم تشابه جيب التمام للعثور على الكلمات/العبارات الأكثر تشابهًا مع المستند. ويمكن بعد ذلك تحديد الكلمات الأكثر تشابهًا على أنها الكلمات التي تصف المستند بأكمله على أفضل وجه.
KeyBERT ليس فريدًا بأي حال من الأحوال، وقد تم إنشاؤه كطريقة سريعة وسهلة لإنشاء الكلمات الرئيسية والعبارات الرئيسية. على الرغم من وجود العديد من الأبحاث والحلول الرائعة التي تستخدم تضمينات BERT (على سبيل المثال، 1، 2، 3، )، إلا أنني لم أتمكن من العثور على حل يعتمد على BERT ولا يحتاج إلى التدريب من الصفر ويمكن استخدامه للمبتدئين ( صحح لي إذا كنت مخطئا! ). وبالتالي، كان الهدف هو pip install keybert
واستخدام 3 أسطر من التعليمات البرمجية على الأكثر.
العودة إلى ToC
يمكن إجراء التثبيت باستخدام pypi:
pip install keybert
قد ترغب في تثبيت المزيد اعتمادًا على المحولات والواجهات الخلفية للغة التي ستستخدمها. التركيبات الممكنة هي:
pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]
يمكن رؤية المثال البسيط أدناه لاستخراج الكلمات الرئيسية:
from keybert import KeyBERT
doc = """
Supervised learning is the machine learning task of learning a function that
maps an input to an output based on example input-output pairs. It infers a
function from labeled training data consisting of a set of training examples.
In supervised learning, each example is a pair consisting of an input object
(typically a vector) and a desired output value (also called the supervisory signal).
A supervised learning algorithm analyzes the training data and produces an inferred function,
which can be used for mapping new examples. An optimal scenario will allow for the
algorithm to correctly determine the class labels for unseen instances. This requires
the learning algorithm to generalize from the training data to unseen situations in a
'reasonable' way (see inductive bias).
"""
kw_model = KeyBERT ()
keywords = kw_model . extract_keywords ( doc )
يمكنك تعيين keyphrase_ngram_range
لتعيين طول الكلمات الرئيسية/العبارات الرئيسية الناتجة:
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 1 , 1 ), stop_words = None )
[( 'learning' , 0.4604 ),
( 'algorithm' , 0.4556 ),
( 'training' , 0.4487 ),
( 'class' , 0.4086 ),
( 'mapping' , 0.3700 )]
لاستخراج العبارات الرئيسية، ما عليك سوى ضبط keyphrase_ngram_range
على (1، 2) أو أعلى اعتمادًا على عدد الكلمات التي تريدها في العبارات الرئيسية الناتجة:
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 1 , 2 ), stop_words = None )
[( 'learning algorithm' , 0.6978 ),
( 'machine learning' , 0.6305 ),
( 'supervised learning' , 0.5985 ),
( 'algorithm analyzes' , 0.5860 ),
( 'learning function' , 0.5850 )]
يمكننا تمييز الكلمات الرئيسية في المستند ببساطة عن طريق تعيين highlight
:
keywords = kw_model . extract_keywords ( doc , highlight = True )
ملحوظة : للحصول على نظرة عامة كاملة على جميع نماذج المحولات الممكنة، راجع محول الجملة. أنصح إما "all-MiniLM-L6-v2"
للمستندات الإنجليزية أو "paraphrase-multilingual-MiniLM-L12-v2"
للمستندات متعددة اللغات أو أي لغة أخرى.
لتنويع النتائج، نأخذ 2 × الكلمات/العبارات الأكثر تشابهًا في الوثيقة. بعد ذلك، نأخذ جميع مجموعات top_n من الكلمات 2 x top_n ونستخرج المجموعة الأقل تشابهًا مع بعضها البعض عن طريق تشابه جيب التمام.
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 3 , 3 ), stop_words = 'english' ,
use_maxsum = True , nr_candidates = 20 , top_n = 5 )
[( 'set training examples' , 0.7504 ),
( 'generalize training data' , 0.7727 ),
( 'requires learning algorithm' , 0.5050 ),
( 'supervised learning algorithm' , 0.3779 ),
( 'learning machine learning' , 0.2891 )]
لتنويع النتائج، يمكننا استخدام الحد الأقصى لملاءمة الهامش (MMR) لإنشاء كلمات رئيسية / عبارات رئيسية تعتمد أيضًا على تشابه جيب التمام. النتائج ذات التنوع العالي :
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 3 , 3 ), stop_words = 'english' ,
use_mmr = True , diversity = 0.7 )
[( 'algorithm generalize training' , 0.7727 ),
( 'labels unseen instances' , 0.1649 ),
( 'new examples optimal' , 0.4185 ),
( 'determine class labels' , 0.4774 ),
( 'supervised learning algorithm' , 0.7502 )]
النتائج ذات التنوع المنخفض :
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 3 , 3 ), stop_words = 'english' ,
use_mmr = True , diversity = 0.2 )
[( 'algorithm generalize training' , 0.7727 ),
( 'supervised learning algorithm' , 0.7502 ),
( 'learning machine learning' , 0.7577 ),
( 'learning algorithm analyzes' , 0.7587 ),
( 'learning algorithm generalize' , 0.7514 )]
يدعم KeyBERT العديد من نماذج التضمين التي يمكن استخدامها لتضمين المستندات والكلمات:
انقر هنا للحصول على نظرة عامة كاملة على جميع نماذج التضمين المدعومة.
محولات الجملة
يمكنك تحديد أي نموذج من sentence-transformers
هنا وتمريره عبر KeyBERT باستخدام model
:
from keybert import KeyBERT
kw_model = KeyBERT ( model = 'all-MiniLM-L6-v2' )
أو حدد نموذج SentenceTransformer باستخدام المعلمات الخاصة بك:
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
sentence_model = SentenceTransformer ( "all-MiniLM-L6-v2" )
kw_model = KeyBERT ( model = sentence_model )
الذوق
يتيح لك Flair اختيار أي نموذج تضمين متاح للعامة تقريبًا. يمكن استخدام الذوق على النحو التالي:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
يمكنك اختيار أي؟ نموذج المحولات هنا
العودة إلى ToC
باستخدام KeyLLM
يمكنك إجراء استخراج جديد للكلمات الرئيسية باستخدام نماذج اللغات الكبيرة (LLM). يمكنك العثور على الوثائق الكاملة هنا ولكن هناك مثالان شائعان في هذه الطريقة الجديدة. تأكد من تثبيت حزمة OpenAI من خلال pip install openai
قبل البدء.
أولاً، يمكننا أن نطلب من OpenAI مباشرة استخراج الكلمات الرئيسية:
import openai
from keybert . llm import OpenAI
from keybert import KeyLLM
# Create your LLM
client = openai . OpenAI ( api_key = MY_API_KEY )
llm = OpenAI ( client )
# Load it in KeyLLM
kw_model = KeyLLM ( llm )
سيؤدي هذا إلى الاستعلام عن أي نموذج ChatGPT ومطالبته باستخراج الكلمات الرئيسية من النص.
ثانيًا، يمكننا العثور على المستندات التي من المحتمل أن تحتوي على نفس الكلمات الرئيسية ونستخرج الكلمات الرئيسية الخاصة بها فقط. يعد هذا أكثر كفاءة من طلب الكلمات الرئيسية لكل مستند على حدة. من المحتمل أن تكون هناك مستندات تحتوي على نفس الكلمات الرئيسية بالضبط. القيام بذلك أمر بسيط:
import openai
from keybert . llm import OpenAI
from keybert import KeyLLM
from sentence_transformers import SentenceTransformer
# Extract embeddings
model = SentenceTransformer ( 'all-MiniLM-L6-v2' )
embeddings = model . encode ( MY_DOCUMENTS , convert_to_tensor = True )
# Create your LLM
client = openai . OpenAI ( api_key = MY_API_KEY )
llm = OpenAI ( client )
# Load it in KeyLLM
kw_model = KeyLLM ( llm )
# Extract keywords
keywords = kw_model . extract_keywords ( MY_DOCUMENTS , embeddings = embeddings , threshold = .75 )
يمكنك استخدام معلمة threshold
لتحديد مدى تشابه المستندات لتلقي نفس الكلمات الأساسية.
للاستشهاد بـ KeyBERT في عملك، يرجى استخدام مرجع bibtex التالي:
@misc { grootendorst2020keybert ,
author = { Maarten Grootendorst } ,
title = { KeyBERT: Minimal keyword extraction with BERT. } ,
year = 2020 ,
publisher = { Zenodo } ,
version = { v0.3.0 } ,
doi = { 10.5281/zenodo.4461265 } ,
url = { https://doi.org/10.5281/zenodo.4461265 }
}
أدناه، يمكنك العثور على العديد من الموارد التي تم استخدامها لإنشاء KeyBERT ولكن الأهم من ذلك، أنها موارد مذهلة لإنشاء نماذج استخلاص الكلمات الرئيسية الرائعة:
الأوراق :
جيثب ريبوس :
MMR : تم تصميم اختيار الكلمات الرئيسية/العبارات الرئيسية على النحو التالي:
ملحوظة : إذا وجدت ورقة أو جيثب ريبو يحتوي على تطبيق سهل الاستخدام لتضمينات BERT لاستخراج الكلمات الرئيسية/العبارات الرئيسية، فأخبرني بذلك! سأتأكد من إضافة إشارة إلى هذا الريبو.