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 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
에서 모델을 선택하고 model
사용하여 KeyBERT를 통해 전달할 수 있습니다.
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 )
무엇이든 선택할 수 있나요? 트랜스포머 모델이 여기에 있습니다.
ToC로 돌아가기
KeyLLM
사용하면 LLM(대형 언어 모델)으로 키워드 추출을 새로 수행할 수 있습니다. 여기에서 전체 문서를 찾을 수 있지만 이 새로운 방법에 공통적으로 적용되는 두 가지 예가 있습니다. 시작하기 전에 pip install openai
통해 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 생성에 사용된 여러 리소스를 찾을 수 있지만 가장 중요한 것은 인상적인 키워드 추출 모델을 생성하기 위한 놀라운 리소스라는 것입니다.
논문 :
Github 저장소 :
MMR : 키워드/키프레이즈 선택은 다음을 모델로 했습니다.
참고 : 키워드/키프레이즈 추출을 위한 BERT 임베딩을 쉽게 구현한 문서나 github 저장소를 찾으면 알려주세요! 이 저장소에 대한 참조를 추가하겠습니다.