spaCy로 의미 유사도 측정

spaCy로 배우는 자연어 처리

Azadeh Mobasher

Principal Data Scientist

의미 유사도 방법

 

  • 텍스트를 분석하여 유사성을 식별하는 과정
  • 텍스트를 사전 정의된 범주로 분류하거나 관련 텍스트를 탐지
  • 유사도 점수는 두 텍스트의 유사 정도를 측정

 

What is the cheapest flight from Boston to Seattle?
Which airline serves Denver, Pittsburgh and Atlanta?
What kinds of planes are used by American Airlines?
spaCy로 배우는 자연어 처리

유사도 점수

  • 텍스트에 정의된 측정 지표
  • 유사도는 코사인 유사도단어 벡터로 측정
  • 코사인 유사도는 0과 1 사이의 값

코사인 유사도와 벡터

spaCy로 배우는 자연어 처리

토큰 유사도

  • spaCy는 토큰(Token) 객체 간 유사도 점수를 계산합니다
nlp = spacy.load("en_core_web_md")
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

token1 = doc1[2] token2 = doc2[4] print(f"Similarity between {token1} and {token2} = ", round(token1.similarity(token2), 3))
>>> Similarity between pizza and pasta =  0.685
spaCy로 배우는 자연어 처리

스팬 유사도

  • spaCy는 두 Span 객체의 의미 유사도를 계산합니다
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

span1 = doc1[1:]
span2 = doc2[1:]

print(f"Similarity between \"{span1}\" and \"{span2}\" = ", round(span1.similarity(span2), 3))
>>> Similarity between "eat pizza" and "like to eat pasta" =  0.588
print(f"Similarity between \"{doc1[1:]}\" and \"{doc2[3:]}\" = ",
        round(doc1[1:].similarity(doc2[3:]), 3))
>>> Similarity between "eat pizza" and "eat pasta" =  0.936
spaCy로 배우는 자연어 처리

문서 유사도

  • spaCy는 두 문서 간 유사도 점수를 계산합니다
nlp = spacy.load("en_core_web_md")

doc1 = nlp("I like to play basketball")
doc2 = nlp("I love to play basketball")
print("Similarity score :", round(doc1.similarity(doc2), 3))
>>> Similarity score : 0.975
  • 높은 코사인 유사도는 의미가 매우 비슷함을 나타냅니다
  • Doc 벡터는 기본적으로 단어 벡터의 평균입니다
spaCy로 배우는 자연어 처리

문장 유사도

  • spaCy는 주어진 키워드와 관련된 내용을 찾습니다
  • 단어 price와 비슷한 고객 질문 찾기:
sentences = nlp("What is the cheapest flight from Boston to Seattle? 
                 Which airline serves Denver, Pittsburgh and Atlanta? 
                 What kinds of planes are used by American Airlines?")

keyword = nlp("price")

for i, sentence in enumerate(sentences.sents): print(f"Similarity score with sentence {i+1}: ", round(sentence.similarity(keyword), 5))
>>> Similarity score with sentence 1:  0.26136
Similarity score with sentence 2:  0.14021
Similarity score with sentence 3:  0.13885
spaCy로 배우는 자연어 처리

연습해 봅시다!

spaCy로 배우는 자연어 처리

Preparing Video For Download...