토니의 연습장
cosine_similarity 본문
sentence1 = "안녕하세요? 반갑습니다."
sentence2 = "안녕하세요? 반갑습니다!"
sentence3 = "안녕하세요? 만나서 반가워요."
sentence4 = "Hi, nice to meet you."
sentence5 = "I like to eat apples."
from sklearn.metrics.pairwise import cosine_similarity
sentences = [sentence1, sentence2, sentence3, sentence4, sentence5]
embedded_sentences = embeddings.embed_documents(sentences)
def similarity(a, b):
return cosine_similarity([a], [b])[0][0]
return cosine_similarity([a], [b])[0][0] 부분은, cosine_similarity 함수가 (1 x 1) 형태의 2차원 배열을 반환하기 때문에 그 배열에서 실제 유사도 값(스칼라)만 추출하기 위해 [0][0]을 사용한 것입니다. 즉, cosine_similarity([a], [b]) 결과가 예컨대 [[0.85]]처럼 2차원 배열로 나오면, [0][0]을 통해 0.85 값을 반환하는 것이죠.
이 때, 인자를 a,b 로 넣지 않고 [ ] 로 감싸서 인자로 넣은 이유cosine_similarity 함수가 입력을 2차원 형태, 즉 (샘플 수, 특성 수) 형태의 배열(배열들의 리스트)로 받도록 설계되어 있습니다.
- 만약 a가 단 하나의 문장 벡터(예: 길이가 n인 1차원 배열)라면, a의 형태는 (n,)이 됩니다.
- cosine_similarity는 이 벡터를 하나의 샘플로 해석하도록 하기 위해, 2차원 형태인 (1, n)으로 만들 필요가 있습니다.
- 따라서 [a]와 같이 감싸면 결과적으로 [[특성1, 특성2, ...]] 형태가 되어 (1, n)이 되고, b 역시 동일합니다.
- 이후 cosine_similarity([a], [b])는 (1, 1) 모양의 2차원 배열을 반환하게 되고, [0][0]을 통해 그 안에 담긴 실제 스칼라 유사도 값을 가져오게 됩니다.
'언어 AI (NLP) > LLM & RAG' 카테고리의 다른 글
HyDE 와 Re-ranking (1) | 2025.01.09 |
---|---|
LangServe example (5) | 2025.01.09 |
LangChain Hub - handle (1) | 2024.12.18 |
transformer, sentence-transformers, torch 호환 버전 (3) | 2024.11.15 |
fine-tuning / instruction-tuning (0) | 2024.11.13 |