KeyBERT ist eine minimale und benutzerfreundliche Technik zur Schlüsselwortextraktion, die BERT-Einbettungen nutzt, um Schlüsselwörter und Schlüsselphrasen zu erstellen, die einem Dokument am ähnlichsten sind.
Den entsprechenden Medienbeitrag finden Sie hier.
Zurück zum Inhaltsverzeichnis
Obwohl bereits viele Methoden zur Schlüsselwortgenerierung verfügbar sind (z. B. Rake, YAKE!, TF-IDF usw.), wollte ich eine sehr einfache, aber leistungsstarke Methode zum Extrahieren von Schlüsselwörtern und Schlüsselphrasen erstellen. Hier kommt KeyBERT ins Spiel! Dabei werden BERT-Einbettungen und einfache Kosinusähnlichkeit verwendet, um die Unterphrasen in einem Dokument zu finden, die dem Dokument selbst am ähnlichsten sind.
Zunächst werden Dokumenteinbettungen mit BERT extrahiert, um eine Darstellung auf Dokumentebene zu erhalten. Anschließend werden Worteinbettungen für N-Gramm-Wörter/Phrasen extrahiert. Schließlich verwenden wir die Kosinusähnlichkeit, um die Wörter/Phrasen zu finden, die dem Dokument am ähnlichsten sind. Die ähnlichsten Wörter könnten dann als diejenigen identifiziert werden, die das gesamte Dokument am besten beschreiben.
KeyBERT ist keineswegs einzigartig und wurde als schnelle und einfache Methode zum Erstellen von Schlüsselwörtern und Schlüsselphrasen entwickelt. Obwohl es viele großartige Artikel und Lösungen gibt, die BERT-Einbettungen verwenden (z. B. 1, 2, 3, ), konnte ich keine BERT-basierte Lösung finden, die nicht von Grund auf trainiert werden musste und für Anfänger verwendet werden könnte ( Korrigieren Sie mich, wenn ich falsch liege! ). Das Ziel war also eine pip install keybert
und höchstens 3 Zeilen Code im Einsatz.
Zurück zum Inhaltsverzeichnis
Die Installation kann mit pypi erfolgen:
pip install keybert
Abhängig von den Transformern und Sprach-Backends, die Sie verwenden, möchten Sie möglicherweise weitere installieren. Die möglichen Installationen sind:
pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]
Das minimalste Beispiel für die Extraktion von Schlüsselwörtern ist unten zu sehen:
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 )
Sie können keyphrase_ngram_range
festlegen, um die Länge der resultierenden Schlüsselwörter/Schlüsselphrasen festzulegen:
>> > 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 )]
Um Schlüsselphrasen zu extrahieren, setzen Sie einfach keyphrase_ngram_range
auf (1, 2) oder höher, abhängig von der Anzahl der Wörter, die Sie in den resultierenden Schlüsselphrasen haben möchten:
>> > 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 )]
Wir können die Schlüsselwörter im Dokument hervorheben, indem wir einfach highlight
setzen:
keywords = kw_model . extract_keywords ( doc , highlight = True )
HINWEIS : Eine vollständige Übersicht aller möglichen Transformatormodelle finden Sie unter Satztransformator. Ich würde entweder "all-MiniLM-L6-v2"
für englische Dokumente oder "paraphrase-multilingual-MiniLM-L12-v2"
für mehrsprachige Dokumente oder eine andere Sprache empfehlen.
Um die Ergebnisse zu diversifizieren, nehmen wir die 2 x top_n Wörter/Phrasen, die dem Dokument am ähnlichsten sind. Dann nehmen wir alle top_n-Kombinationen aus den 2 x top_n-Wörtern und extrahieren die Kombination, die einander aufgrund der Kosinusähnlichkeit am wenigsten ähnlich ist.
>> > 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 )]
Um die Ergebnisse zu diversifizieren, können wir Maximal Margin Relevance (MMR) verwenden, um Schlüsselwörter/Schlüsselphrasen zu erstellen, die ebenfalls auf Kosinusähnlichkeit basieren. Die Ergebnisse mit hoher Diversität :
>> > 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 )]
Die Ergebnisse mit geringer Diversität :
>> > 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 unterstützt viele Einbettungsmodelle, die zum Einbetten der Dokumente und Wörter verwendet werden können:
Klicken Sie hier für eine vollständige Übersicht aller unterstützten Einbettungsmodelle.
Satztransformatoren
Sie können hier ein beliebiges Modell aus sentence-transformers
auswählen und es mit model
durch KeyBERT weiterleiten:
from keybert import KeyBERT
kw_model = KeyBERT ( model = 'all-MiniLM-L6-v2' )
Oder wählen Sie ein SentenceTransformer-Modell mit Ihren eigenen Parametern aus:
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
sentence_model = SentenceTransformer ( "all-MiniLM-L6-v2" )
kw_model = KeyBERT ( model = sentence_model )
Flair
Mit Flair können Sie nahezu jedes öffentlich verfügbare Einbettungsmodell auswählen. Flair kann wie folgt verwendet werden:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
Sie können eine beliebige auswählen? Transformatoren-Modell hier.
Zurück zum Inhaltsverzeichnis
Mit KeyLLM
können Sie nun die Schlüsselwortextraktion mit Large Language Models (LLM) durchführen. Die vollständige Dokumentation finden Sie hier, es gibt jedoch zwei Beispiele, die bei dieser neuen Methode üblich sind. Stellen Sie sicher, dass Sie das OpenAI-Paket über pip install openai
installieren, bevor Sie beginnen.
Zunächst können wir OpenAI direkt bitten, Schlüsselwörter zu extrahieren:
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 )
Dadurch wird jedes ChatGPT-Modell abgefragt und aufgefordert, Schlüsselwörter aus dem Text zu extrahieren.
Zweitens können wir Dokumente finden, die wahrscheinlich dieselben Schlüsselwörter haben, und Schlüsselwörter nur für diese extrahieren. Dies ist viel effizienter, als die Schlüsselwörter für jedes einzelne Dokument abzufragen. Es gibt wahrscheinlich Dokumente, die genau dieselben Schlüsselwörter haben. Das geht ganz einfach:
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 )
Mithilfe des threshold
können Sie entscheiden, wie ähnlich Dokumente sein müssen, um dieselben Schlüsselwörter zu erhalten.
Um KeyBERT in Ihrer Arbeit zu zitieren, verwenden Sie bitte die folgende Bibtex-Referenz:
@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 }
}
Nachfolgend finden Sie mehrere Ressourcen, die für die Erstellung von KeyBERT verwendet wurden. Am wichtigsten ist jedoch, dass dies erstaunliche Ressourcen für die Erstellung beeindruckender Schlüsselwortextraktionsmodelle sind:
Papiere :
Github-Repos :
MMR : Die Auswahl der Schlüsselwörter/Schlüsselphrasen wurde nach dem Vorbild von Folgendem modelliert:
HINWEIS : Wenn Sie ein Papier- oder Github-Repo finden, das eine benutzerfreundliche Implementierung von BERT-Einbettungen für die Schlüsselwort-/Schlüsselwortextraktion enthält, lassen Sie es mich wissen! Ich werde unbedingt einen Verweis auf dieses Repo hinzufügen.