KeyBERT는 문서와 가장 유사한 키워드와 키프레이즈를 생성하기 위해 BERT 임베딩을 활용하는 최소한의 사용하기 쉬운 키워드 추출 기술입니다.
키워드 생성에 사용할 수 있는 방법이 이미 많이 있지만(예: Rake , YAKE! , TF-IDF 등) 저는 키워드와 키프레이즈를 추출하는 매우 기본적이면서도 강력한 방법을 만들고 싶었습니다. 여기에서 KeyBERT 가 등장합니다! BERT 임베딩 및 단순 코사인 유사성을 사용하여 문서에서 문서 자체와 가장 유사한 하위 문구를 찾습니다.
먼저 문서 수준 표현을 얻기 위해 BERT로 문서 임베딩을 추출합니다. 그런 다음 N-gram 단어/구에 대한 단어 임베딩이 추출됩니다. 마지막으로 코사인 유사도를 사용하여 문서와 가장 유사한 단어/구를 찾습니다. 그러면 가장 유사한 단어가 전체 문서를 가장 잘 설명하는 단어로 식별될 수 있습니다.
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)]
간단히 다음을 설정하여 문서에서 키워드를 강조 표시할 수 있습니다
hightlight.
keywords = kw_model.extract_keywords(doc, highlight=True)
참고 : 가능한 모든 변환기 모델에 대한 전체 개요는 문장 변환기를 참조하십시오 . 저는
"all-MiniLM-L6-v2"영어 문서나
"paraphrase-multilingual-MiniLM-L12-v2"다국어 문서 또는 다른 언어에 대해 조언을 드릴 것 입니다.
결과를 다양화하기 위해 2 x top_n 가장 유사한 단어/구를 문서에 가져옵니다. 그런 다음 2 x top_n 단어에서 모든 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(Maximal Margin Relevance)을 사용하여 코사인 유사도를 기반으로 하는 키워드/키프레이즈를 생성할 수 있습니다. 다양성 이 높은 결과 :
>>> 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를 통해 전달할 수 있습니다 .
sentence-transformers
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)
아무거나 선택할 수 있습니다
작업에서 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 생성에 사용된 여러 리소스를 찾을 수 있지만 가장 중요한 것은 인상적인 키워드 추출 모델을 생성하기 위한 놀라운 리소스입니다.
논문 :
Github 저장소 :
MMR :
키워드/키프레이즈 선택은 다음을 모델로 했습니다.
참고 : 키워드/키프레이즈 추출을 위한 사용하기 쉬운 BERT 임베딩 구현이 있는 논문 또는 github 리포지토리를 찾으면 알려주십시오! 이 리포지토리에 대한 참조를 추가하겠습니다.