Hey Tech
[NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity) 본문
[NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)
Tony Park (토니) 2022. 4. 20. 09:09
📌 Text 빅데이터분석 플랫폼 베타테스트 참가자 모집 중!(네이버페이 4만 원 전원 지급)
👋 안녕하세요, 코딩이 필요 없는 AI/빅데이터 분석 All in One 플랫폼 <DATA101> 개발팀입니다.
😊 저희 서비스를 사용해 보시고 경험담을 들려주세요 :)
💸 참여해 주신 "모든" 분들께 네이버페이 4만 원 쿠폰을 지급해 드립니다.
👨💻 참여 희망 시 카톡플러스친구 1:1 채팅 or 인스타그램 DM 부탁드립니다 :)
📆 참여기간 : 11/25(월)~11/29(금) 11:00~21:00 중 택1 (1시간 1타임)
👉 참여장소 : 강남역 인근 스터디카페 미팅Room
📍 소요시간 : 총 40분 내외(서비스 체험 및 인터뷰 포함)
✅ 참가조건 : Text 빅데이터 분석 업무 경험자
👉 참가 가능일정 조회하기 : https://url.kr/n8k8gu
- 카톡플친 : http://pf.kakao.com/_SxltHG/chat
- 인스타그램 : https://www.instagram.com/data101.official/
📚 목차
1. 자카드 유사도 개념
2. 자카드 유사고 실습
1. 자카드 유사도 개념
자카드 유사도(Jaccard Similarity)는 \(2\)개의 집합 \(A\), \(B\)가 있을 때 두 집합의 합집합 중 교집합의 비율입니다. 즉, 두 집합이 완전히 같을 때는 자카드 유사도가 \(1\)이며, 두 집합에 교집합이 없는 경우는 \(0\)입니다. 자카드 유사도를 \(J\)라고 할 때 두 집합 간의 자카드 유사도 수식은 아래와 같습니다.
$$ J(A, B) = \frac{|A \cap B|}{|A \cup B|} = \frac{|A \cap B|}{|A| + |B| - |A \cap B|} $$
자카드 유사도 개념을 자연어처리 분야로 그대로 가져오면, 하나의 집합이 곧 하나의 문서가 해당하는 것입니다. 2개의 문서가 주어졌다면 자카드 유사도는 다음과 같이 계산할 수 있습니다.
$$ J(doc1, doc2) = \frac{doc1 \cap doc2}{doc1 \cup doc2} $$
즉, 자연어처리 분야에서는 자카드 유사도는 문서 간 단어 합집합의 원소 개수와 교집합의 원소 개수의 비율로 계산합니다. 이를 통해 알 수 있는 것은 다음과 같습니다. 자카드 유사도는 문서 간 얼마나 많은 종류의 단어가 중복되었는지에 집중하고, 단어마다 중복 횟수는 고려하지 않는다는 점입니다. 즉, 자카드 유사도는 특정 단어가 여러 번 겹쳐도 얼마나 다른 종류의 단어가 겹치는지에 따라 문서 유사도를 계산합니다.
2. 자카드 유사도 실습
파이썬을 활용하여 두 문서의 자카드 유사도를 계산해 봅니다.
Step 1. 문서 샘플
doc1 = "The fat cat sat on the mat"
doc2 = "The lovely dog slept on the table"
Step 2. 문서 토큰화
doc1_tokenized = doc1.split()
doc2_tokenized = doc2.split()
간단하게, 띄어쓰기를 기준으로 토큰화를 수행해 보겠습니다.
print(f"doc1 토큰화 결과: {doc1_tokenized}")
print(f"doc2 토큰화 결과: {doc2_tokenized}")
토큰화 결과를 확인해 보겠습니다.
doc1 토큰화 결과: ['The', 'fat', 'cat', 'sat', 'on', 'the', 'mat']
doc2 토큰화 결과: ['The', 'lovely', 'dog', 'slept', 'on', 'the', 'table']
Step 3. 합집합 계산
자카드 유사도는 두 문서 간 합집합 대 교집합의 비율을 구하는 것이라 했습니다. 합집합을 구해 봅니다.
doc_union = set(doc1_tokenized).union(set(doc2_tokenized))
합집합 결과를 확인해 봅니다.
print(f"합집합 결과: {doc_union}")
합집합 결과: {'lovely', 'cat', 'table', 'the', 'mat', 'on', 'dog', 'The', 'sat', 'fat', 'slept'}
Step 4. 교집합 계산
doc_intersection = set(doc1_tokenized).intersection(set(doc2_tokenized))
교집합 결과를 확인해 봅니다.
print(f"교집합 결과: {doc_intersection}")
교집합 결과: {'the', 'on', 'The'}
Step 5. 합집합 대 교집합 비율 계산
jaccard_similarity = len(doc_intersection) / len(doc_union)
print(f"자카드 유사도: {jaccard_similarity:.2f}")
자카드 유사도는 합집합의 개수 대 교집합의 개수로 집합 간 비율을 계산할 수 있습니다. 소수점 아래 2자리까지만 출력하여 결과를 확인해 봅니다.
0.27
이를 통해 자카드 유사도는 문서 간 단어 합집합의 원소 개수와 교집합의 원소 개수의 비율을 고려하기 때문에, 어떤 특정 단어가 몇 번씩이나 중복되었는지는 고려하지 않고 단지 얼마나 많은 다른 종류의 단어가 중복되었는지만 고려한다는 것을 알 수 있습니다.
📚 참고할 만한 포스팅
1. [NLP] Bag of Words(BoW) 개념 및 실습
2. [NLP] 문서 단어 행렬(DTM) 개념 이해
3. [NLP] TF-IDF 개념 및 계산 방법
4. [NLP] Word Embedding의 이해: (1) 희소표현 및 밀집표현
5. [NLP] 언어모델(Language Model)의 개념 및 특징
6. [NLP] N-gram 언어 모델의 개념, 종류, 한계점
7. [NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법
8. [NLP] Word2Vec: (1) 개념
9. [NLP] Word2Vec: (2) CBOW 개념 및 원리
10. [NLP] Word2Vec: (3) Skip-gram
11. [NLP] Word2Vec: (4) Negative Sampling
12. [NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity)
13. [NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)
14. [NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)
오늘은 자카드 유사도의 개념을 알아보고, 간단한 파이썬 실습을 진행해 봤습니다.
포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)
그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.
고맙습니다😊
'AI & 빅데이터 > 자연어처리(NLP)' 카테고리의 다른 글
Mecab 설치 에러 해결하기: "Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/" (3) | 2022.06.01 |
---|---|
[NLP] Pretrained 언어모델 기반 한국어 경제 뉴스 기사 감정 분류 (3) | 2022.05.31 |
[NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance) (0) | 2022.04.19 |
[NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity) (0) | 2022.04.18 |
[NLP] Word2Vec: (4) Negative Sampling 개념 및 소개 (0) | 2022.04.15 |