KeyBERT es una técnica de extracción de palabras clave mínima y fácil de usar que aprovecha las incrustaciones de BERT para crear palabras clave y frases clave que se parecen más a un documento.
La publicación mediana correspondiente se puede encontrar aquí.
Volver a ToC
Aunque ya hay muchos métodos disponibles para la generación de palabras clave (por ejemplo, Rake, YAKE!, TF-IDF, etc.), quería crear un método muy básico pero potente para extraer palabras clave y frases clave. ¡Aquí es donde entra KeyBERT ! Que utiliza incrustaciones BERT y similitud de coseno simple para encontrar las subfrases en un documento que son más similares al documento mismo.
Primero, las incrustaciones de documentos se extraen con BERT para obtener una representación a nivel de documento. Luego, se extraen las incrustaciones de palabras para palabras/frases de N-gramas. Finalmente, usamos la similitud del coseno para encontrar las palabras/frases que son más similares al documento. Las palabras más similares podrían identificarse como las que mejor describen todo el documento.
KeyBERT no es de ninguna manera único y se creó como un método rápido y sencillo para crear palabras clave y frases clave. Aunque existen muchos artículos y soluciones excelentes que utilizan incorporaciones de BERT (por ejemplo, 1, 2, 3,), no pude encontrar una solución basada en BERT que no tuviera que entrenarse desde cero y pudiera usarse para principiantes. ( ¡corrígeme si me equivoco! ). Por lo tanto, el objetivo era un pip install keybert
y como máximo 3 líneas de código en uso.
Volver a ToC
La instalación se puede realizar usando pypi:
pip install keybert
Es posible que desee instalar más dependiendo de los transformadores y los servidores de idioma que utilizará. Las posibles instalaciones son:
pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]
El ejemplo más mínimo se puede ver a continuación para la extracción de palabras clave:
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 )
Puede configurar keyphrase_ngram_range
para establecer la longitud de las palabras clave/frases clave resultantes:
>> > 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 )]
Para extraer frases clave, simplemente configure keyphrase_ngram_range
en (1, 2) o superior dependiendo de la cantidad de palabras que desee en las frases clave resultantes:
>> > 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 )]
Podemos resaltar las palabras clave en el documento simplemente configurando highlight
:
keywords = kw_model . extract_keywords ( doc , highlight = True )
NOTA : Para obtener una descripción completa de todos los modelos de transformadores posibles, consulte la frase transformador. Recomendaría "all-MiniLM-L6-v2"
para documentos en inglés o "paraphrase-multilingual-MiniLM-L12-v2"
para documentos multilingües o cualquier otro idioma.
Para diversificar los resultados, tomamos las 2 x top_n palabras/frases más similares al documento. Luego, tomamos todas las combinaciones top_n de las 2 x palabras top_n y extraemos las combinaciones que son menos similares entre sí por similitud de coseno.
>> > 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 )]
Para diversificar los resultados, podemos utilizar la relevancia del margen máximo (MMR) para crear palabras clave/frases clave que también se basan en la similitud del coseno. Los resultados con alta diversidad :
>> > 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 )]
Los resultados con baja diversidad :
>> > 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 admite muchos modelos de incrustación que se pueden utilizar para incrustar documentos y palabras:
Haga clic aquí para obtener una descripción general completa de todos los modelos de integración compatibles.
Transformadores de oraciones
Puede seleccionar cualquier modelo de sentence-transformers
aquí y pasarlo a través de KeyBERT con model
:
from keybert import KeyBERT
kw_model = KeyBERT ( model = 'all-MiniLM-L6-v2' )
O seleccione un modelo SentenceTransformer con sus propios parámetros:
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
sentence_model = SentenceTransformer ( "all-MiniLM-L6-v2" )
kw_model = KeyBERT ( model = sentence_model )
Instinto
Flair le permite elegir casi cualquier modelo de integración que esté disponible públicamente. Flair se puede utilizar de la siguiente manera:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
¿Puedes seleccionar cualquiera? modelo de transformadores aquí.
Volver a ToC
Con KeyLLM
puede realizar una nueva extracción de palabras clave con Large Language Models (LLM). Puede encontrar la documentación completa aquí, pero hay dos ejemplos que son comunes con este nuevo método. Asegúrese de instalar el paquete OpenAI mediante pip install openai
antes de comenzar.
Primero, podemos pedirle a OpenAI directamente que extraiga palabras clave:
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 )
Esto consultará cualquier modelo ChatGPT y le pedirá que extraiga palabras clave del texto.
En segundo lugar, podemos encontrar documentos que probablemente tengan las mismas palabras clave y solo extraer palabras clave para ellos. Esto es mucho más eficiente que preguntar las palabras clave para cada documento. Es probable que haya documentos que tengan exactamente las mismas palabras clave. Hacerlo es sencillo:
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 )
Puede utilizar el parámetro threshold
para decidir qué tan similares deben ser los documentos para recibir las mismas palabras clave.
Para citar a KeyBERT en su trabajo, utilice la siguiente referencia 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 }
}
A continuación, puede encontrar varios recursos que se utilizaron para la creación de KeyBERT pero, lo más importante, son recursos increíbles para crear impresionantes modelos de extracción de palabras clave:
Papeles :
Repositorios de Github :
MMR : La selección de palabras clave/frases clave se modeló a partir de:
NOTA : Si encuentra un repositorio en papel o en github que tenga una implementación fácil de usar de incrustaciones BERT para la extracción de palabras clave/frases clave, ¡avíseme! Me aseguraré de agregar una referencia a este repositorio.