오뚝이개발자

텍스트로부터 키워드 추출하기(KeyBERT) 본문

AI/AI 개발

텍스트로부터 키워드 추출하기(KeyBERT)

땅어 2022. 2. 21. 22:33
728x90
300x250

 

 

연구 주제와 관련하여 텍스트에서 키워드를 추출해야 할 일이 있었다. 이를 위해 BERT embedding을 사용한 KeyBERT를 써보았는데 관련하여 방법을 정리해둔다. 여기서 설명하지는 않지만 여러 문서에서의 키워드를 추출하는 방법, 키워드 추출의 diversity를 부여하는 방법 등이 공식 문서에 나와있다. 이 외에도 다양한 옵션을 사용할 수 있다. 공식 문서는 이곳을 참고하면 된다. 

 

사용 방법


사용 방법은 간단하다.

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)

위와 같이 KeyBERT 모델을 load하고 키워드를 추출하고자 하는 텍스트를 extract_keywords() 메소드의 input으로 넣어주면 된다. output은 아래와 같이 리스트의 형태로 나오게 된다.

[('learning', 0.4604),
 ('algorithm', 0.4556),
 ('training', 0.4487),
 ('class', 0.4086),
 ('mapping', 0.3700)]

각 요소의 0번째 문자열이 키워드고, 1번째 수는 해당 키워드가 문서를 얼마나 대표하는지에 대한 수치를 나타낸다.

 

Sentence Embedding Model 선택


from keybert import KeyBERT
kw_model = KeyBERT(model="all-MiniLM-L6-v2")

위와 같이 model 파라미터를 통해 문장 임베딩 모델을 선택할 수 있다. 사용할 수 있는 여러 모델들이 있는데 이와 관련해서는 이곳을 참고하면 된다. 링크를 통해 접속하면 아래와 같이 사용할 수 있는 여러 sentence embedding model들이 나온다.

아무것도 지정해주지 않으면 default값은 "all-MiniLM-L6-v2"가 된다. 여기서 성능이나 처리 속도를 보고 용도에 맞게 골라 사용하면 된다. (공식 문서에서는 영어를 사용하는 경우 되도록이면 "all-MiniLM-L6-v2"을 사용하라고 한다. 아마 성능이 준수하고 그에 비해 속도가 타모델보다 많이 빠르기 때문인 것 같다.) 다른 모델도 시도해보았는데 사실 default로 해도 왠만큼 준수하게 키워드가 잘 뽑힌다.

 

추출할 키워드 갯수 지정해주기, 불용어(stopwords) 제거


아래와 같이 extract_keywords() 메소드의 top_n 파라미터를 지정해주면 해당 갯수만큼의 키워드를 추출할 수 있다. stop_words 파라미터를 지정해주면 불용어를 제거하고 키워드를 추출할 수 있다.(default는 'english')

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, top_n=7, stop_words='english')

 

 

 

728x90
300x250
Comments