[NLP] KeyBERT - 키워드 추출(Keyword extraction)

민정·2022년 11월 24일
0

NLP

목록 보기
5/6

키워드 추출(Keyword extraction) 이란?


원본 문서를 가장 잘 나타내는 중요한 용어 또는 구문을 찾아내는 작업

🤓 KeyBERT 란?

keyBERT란 토픽 모델링 중 키워드 추출을 위해 BERT를 적용한 오픈소스 파이썬 모듈이다.

keyBERT는 텍스트 임베딩 단계에서 BERT를 사용하기 때문에 BERT-based 모델이다.

KeyBERT의 원리는 BERT를 이용해 문서 레벨에서의 주제를 파악하도록하고, N-gram을 위해 단어를 임베딩한다.이후 코사인 유사도를 계산하여 어떤 N-gram또는 단어가 문서와 가장 유사한지 찾아낸다. 가장 유사한 단어들은 문서를 가장 잘 설명할 수 있는 키워드로 분류한다.

🙃 Embedding models


KeyBERT는 임베딩 모델을 저장하여 줄 수 있다.

(Default 모델은 “All-MiniLM-L6-v2”이다.

다음과 같은 임베딩 모델 라이브러리를 지원한다

여기서 각 모델에 대한 정보를 확인하여 볼 수 있다.

👾 문서와 키워드간 유사도 계산


문서와 가장 유사한 key words/phrases를 찾는 단계이다.

문서의 유사도를 계산하기 위해 벡터들 사이의 코사인 유사도를 사용한다.

이때, 벡터간 거리를 이용한 단순 접근 방식의 결과가 그다지 좋지 않을 때도 있어 ( 중복된 의미의 키워드가 너무 많을 수 있음) 두가지 옵션을 추가해서 사용할 수 있다 !!

⚪️ MMR (Maximal Marginal Relevance)

MMR이란 검색 엔진 내에서 본문 검색 관련하여 검색에 따른 결과의 다양성과 연관성을 조절하는 방법이다.

텍스트 요약 작업에서 중복성을 최소화하고 결과의 다양성을 극대화하기 위한 옵션 !
문서와 가장 유사한 키워드를 선택 → 문서와 비슷하면서도 이미 선택한 키워드와 비슷하지 않은 새 후보를 반복적으로 선택

⚪️ Max Sum Similarity

키워드 - 문서 간 거리는 최소로 하면서 , 키워드 - 키워드 간 거리는 최대로 함으로써 의미적으로 풍부한 키워드 set을 얻는다. 문서와 가장 유사한 words/phrase 2개를 사용하여 이 두개의 top_n 단어에서 모든 top_n combination 을 취해 코사인 유사도를 구한다. 여기서 유사도가 가장 낮은 조합을 추출한다 !

KeyBERT 실습

  1. KeyBERT 설치
!pip install keybert
  1. KeyBERT 호출 및 문서 불러오기
from keybert import KeyBERT

doc = """
주장 손흥민(토트넘)이 앞에서 공격을 이끌고 '괴물 수비수' 김민재(나폴리)가 뒤를 단단하게 틀어 잠근다.

파울루 벤투 감독이 이끄는 한국 축구대표팀은 24일 오후 10시(한국시간) 카타르 알라이얀의 에듀케이션 시티 스타디움에서 우루과이를 상대로 H조 조별리그 1차전을 치른다.

한국은 우루과이를 시작으로 가나(28일 오후 10시), 포르투갈(12월3일 0시)과 차례로 맞대결을 벌인다.

한국은 최대 변수였던 손흥민이 안와골절 부상에서 많이 회복돼 출격을 준비하고 있다는 게 큰 힘이다.

지난 16일 토트넘 구단에서 특별 제작한 검정 마스크를 들고 도하에 입성한 손흥민은 충분한 적응을 마쳤다.

벤투 감독은 우루과이전을 앞둔 기자회견에서 "손흥민이 마스크를 쓰는 것은 이제 익숙해져서 그렇게 불편하지 않을 것"이라며 "그를 활용한 훈련을 잘 소화했다. 손흥민이 최상의 기량을 발휘할 수 있기를 희망한다"고 말했다.

벤투 감독의 말과 그동안 손흥민이 보여준 의지 등을 살폈을 때 '캡틴'의 선발 출전 가능성이 높아 보인다.

다만 아직까지 부상에서 완벽하게 회복되지 않아 헤딩과 거친 몸싸움이 어렵다는 부분에서 벤투 감독이 손흥민을 최전방에 배치하는 일명 '손(SON) 톱(TOP)' 전략을 쓸지는 물음표가 붙는다.
그보다는 황의조(올림피아코스)나 조규성(전북)이 최전방에 서고 손흥민을 그 뒤에 섀도우 스트라이커에 배치하는 4-4-1-1, 또는 손흥민을 측면에 자리하게 하는 4-2-3-1 전술이 유력해 보인다.

측면에는 벤투 감독의 신임을 받는 이재성(마인츠)이 서고, 햄스트링 부상으로 출전이 어려운 반대편 날개 자원으로는 나상호(서울)나 독일 분데스리가에서 활약 중인 정우영(프라이부르크)의 출전이 예상된다.

중원에는 붙박이 미드필더인 황인범(올림피아코스)과 경험이 풍부한 정우영(알사드)이 호흡을 맞추고, 포백으로는 김진수(전북), 김영권(울산), 김민재, 윤종규(서울) 또는 김문환(전북)이 자리할 것으로 보인다.

골키퍼 장갑은 이변이 없는 한 김승규(알샤밥)가 낄 가능성이 매우 높다.

벤투호를 이끄는 베테랑 미드필더 정우영은 "월드컵 첫 경기를 앞두고 있어서 부담도 되고 긴장도 된다. 준비한 것을 최대한 발휘해서 좋은 경기를 펼치겠다"고 각오를 다졌다.
"""
  • 뉴스 본문은 네이버 뉴스를 참조하였습니다
  1. 모델 불러오기 및 키워드 추출
kw_model = KeyBERT()
keywords = keywords = kw_model.extract_keywords(doc,keyphrase_ngram_range=(2,4),use_maxsum = True,top_n = 20)

  • mmr로 옵셜 설정 후 실습 결과
keywords_mmr = kw_model.extract_keywords(doc,keyphrase_ngram_range=(2,4),use_mmr = True,top_n = 20,diversity = 0.3)
keywords_mmr

🥺 KeyBERT 의 한계점


  • 대용량 문서가 있고 실시간 결과가 필요한 경우 KeyBERT는 가장 좋은 방법이 아니다. BERT는 대용량 문서를 처리해야 할 때 거대하고 많은 리소스를 사용하기 때문! 그치만 모델을 불러와서 사용하기만 되어서 간단한 문서를 키워드 추출할 때 매우 편리한 것 같다 !

🙇 참조/레퍼런스

keyword extraction with KeyBERT
KeyBERT로 관련 키워드 추출하기

profile
공부 기록장

0개의 댓글