KeyBERT — это минимальный и простой в использовании метод извлечения ключевых слов, который использует встраивания BERT для создания ключевых слов и фраз, наиболее похожих на документ.
Соответствующий средний пост можно найти здесь.
Вернуться к оглавлению
Хотя уже существует множество методов генерации ключевых слов (например, Rake, YAKE!, TF-IDF и т. д.), я хотел создать очень простой, но мощный метод для извлечения ключевых слов и ключевых фраз. Вот тут-то и приходит на помощь KeyBERT ! Который использует BERT-вложения и простое косинусное сходство для поиска подфраз в документе, наиболее похожих на сам документ.
Сначала с помощью BERT извлекаются вложения документов, чтобы получить представление на уровне документа. Затем для N-граммных слов/фраз извлекаются вложения слов. Наконец, мы используем косинусное сходство, чтобы найти слова/фразы, наиболее похожие на документ. Затем наиболее похожие слова можно было бы определить как слова, которые лучше всего описывают весь документ.
KeyBERT ни в коем случае не уникален и создан как быстрый и простой метод создания ключевых слов и фраз. Хотя существует множество отличных статей и решений, в которых используются BERT-вложения (например, 1, 2, 3,), я не смог найти решение на основе BERT, которое не нужно было бы обучать с нуля и которое можно было бы использовать новичкам. ( поправьте меня, если я ошибаюсь! ). Таким образом, целью было pip install keybert
и использовать не более 3 строк кода.
Вернуться к оглавлению
Установка может быть выполнена с помощью 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 x top_n наиболее похожих на документ слов/фраз. Затем мы берем все комбинации 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 позволяет выбрать практически любую общедоступную модель встраивания. Flair можно использовать следующим образом:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
Вы можете выбрать любой? Модели трансформеров здесь.
Вернуться к оглавлению
С помощью 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 : Выбор ключевых слов/ключевых фраз был смоделирован по образцу:
ПРИМЕЧАНИЕ . Если вы найдете репозиторий на бумаге или на GitHub, в котором есть простая в использовании реализация BERT-вложений для извлечения ключевых слов/ключевых фраз, дайте мне знать! Я обязательно добавлю ссылку на это репо.