Skip to content

문장 BERT를 이용한 키워드 추출

전처리는 토픽 모델링을 위한 전처리를 참조

sentence_transformers

colab에서 실습 시 런타임 → 런타임 유형 변경 → GPU

설치

!pip install sentence_transformers

임포트

from sentence_transformers import SentenceTransformer

모델 로딩

model = SentenceTransformer('jhgan/ko-sroberta-multitask')

비슷한 문서 보기

문장 임베딩

doc_emb = model.encode(df['abstract'])

0번 문서와 비슷한 문서 보기

from sklearn.metrics.pairwise import cosine_distances
import numpy as np

doc_idx = 0
dists = cosine_distances(doc_emb[[doc_idx]], doc_emb).flatten()
df.iloc[np.argsort(dists)[:10]]
status ko_title en_title abstract
0 등록 개운죽 잎 및 줄기 추출물을 함유하는 컨디셔닝 샴푸 조성물 및 이를 이용한 컨디셔닝... Conditioning shampoo composition containing le... 본 발명은 개운죽 잎 및 줄기 추출물을 함유하여 모발의 윤기와 부드러움의 지속력을 ...
179 등록 생약추출액이 함유된 샴푸조성물 Shampoo composition 본 발명은 두피와 모발의 세정효과가 우수할 뿐만 아니라 두피와 모발의 건강을 유지시...
133 등록 천연 추출물이 함유된 기능성 샴푸 조성물 제조방법 Hair shampoo composition including natural ext... 본 발명은 집중 한방추출물을 복합적으로 적용하여 두피와 모발의 건강을 유지함은 물론...
182 등록 두피 및 모발 상태 개선용 샴푸 조성물 Shampoo composition for improving state of sca... 본 발명은 두피 및 모발 상태 개선용 샴푸 조성물에 관한 것으로, 더욱 상세하게는 ...
113 공개 친환경 원료를 사용한 두피 건강용 샴푸 Scalp health shampoo using eco-friendly ingred... 본 발명은 편백잎, 솔잎, 잣나무잎, 녹차잎 및 병풀을 전해환원수와 혼합하여 발효시...
196 등록 식물 추출물 및 천연 계면활성제를 함유하는 천연 샴푸 조성물 Natural shampoo composition comprising plant e... 본 발명은 편백잎, 솔잎, 잣나무잎, 녹차잎 및 병풀을 전해환원수와 혼합하여 발효시...
198 등록 탈모 방지 및 모발 개선 기능을 갖는 샴푸 조성물 Shampoo composition for preventing hair loss a... 본 발명은, 약용식물워터를 포함하는 샴푸 조성물에 관한 것으로, 상기 약용식물워터는...
111 등록 탈모방지 및 발모 촉진용 샴푸 A shampoo for promoting a growith of a hair an... 본 발명은 자생 식물 추출물과 천연 한약재 추출물을 주요 유효 성분으로 하여 비듬을...
107 등록 황련추출물, 박하추출물 및 사해미네랄을 함유하는 비듬방지용 샴푸 조성물 The Dandruff Preventing Hair Cleaner Compositi... 본 발명은 자생 식물 추출물과 천연 한약재 추출물을 주요 유효 성분으로 하여 비듬을...
206 등록 샴푸 조성물 SHAMPOO COMPOSITION 본 발명은 샴푸 조성물에 관한 것으로, 정제수, 글루카메이트, 폴리쿼터, 판테놀, ...

키워드 추출

words = cv.get_feature_names_out()
word_emb = model.encode(words)
dists = cosine_distances(doc_emb[[doc_idx]], word_emb).flatten()
for i in np.argsort(dists)[:5]:
    print(words[i])
첨가제
추출물
추출액
화합물
계면활성제

Max Sum Similarity

from scipy.special import factorial
n = 10
k = 5
factorial(n)/factorial(n-k)/factorial(k)
252.0
from itertools import combinations

max_dist = 0
max_combi = None
candidates = np.argsort(dists)[:n]
for combi in combinations(candidates, k):
    word_dists = cosine_distances(word_emb[list(combi)])
    sum_dist = word_dists.sum()
    if sum_dist > max_dist:
        max_dist = sum_dist
        max_combi = combi
max_dist
10.816771
for i in max_combi:
    print(words[i])
추출액
계면활성제
보습제
천연
두피

Maximal Marginal Relevance

초기화

첫번째 키워드는 문서와 가장 비슷한 것으로 선택

from sklearn.metrics.pairwise import cosine_similarity
diversity = 0.5
keyword, *candidates = np.argsort(dists)[:n].tolist()
keywords = [keyword]

나머지 키워드를 하나씩 추가

for _ in range(k - 1):
    # 문서와 유사도 계산
    doc_sims = cosine_similarity(doc_emb[[doc_idx]], word_emb[candidates])[0]
    # 키워드와 유사도 계산
    keyword_sims = cosine_similarity(word_emb[keywords], word_emb[candidates])
    # 가장 높은 키워드 유사도를 선택
    keyword_sims = np.max(keyword_sims, axis=0)
    # MMR: 문서와는 비슷하고, 기존 키워드와는 달라야함
    mmr = (1 - diversity) *  doc_sims - diversity * keyword_sims
    # MMR이 가장 높은 키워드 위치
    most_similar_idx = np.argmax(mmr)
    # 후보에서 해당 키워드를 선택
    keyword = candidates[most_similar_idx]
    # 새 키워드 추가
    keywords.append(keyword)
    # 추가된 키워드는 후보에서 제거
    candidates.remove(keyword)
for i in keywords:
    print(words[i])
첨가제
두피
천연
보습제
추출액