proyector en Chile
유사도 측정 알고리즘 정교화 방법
따옹
2025. 1. 27. 23:24
1. 가중치 기반 유사도
지원서의 각 섹션(예: 대상 고객의 차별화, 운영 방식의 독창성, 제공하는 제품/서비스의 독창성)의 중요도를 반영하여 최종 유사도를 계산하는 방법입니다.
1. 섹션별 유사도 계산
- 각 지원서의 섹션별 텍스트를 임베딩 벡터로 변환 후 코사인 유사도를 계산합니다.
- 예:
from sklearn.metrics.pairwise import cosine_similarity career_similarity = cosine_similarity(clients_embedding_1, career_embedding_2) skills_similarity = cosine_similarity(operation_embedding_1, skills_embedding_2) introduction_similarity = cosine_similarity(product_embedding_1, introduction_embedding_2)
2. 섹션별 가중치 설정
- 도메인 전문가의 의견이나 경험적으로 섹션별 중요도를 설정합니다. 예:
- 대상 고객의 차별화: 50%
- 운영 방식의 독창성: 30%
- 제공하는 제품/서비스의 독창성: 20%
- 가중치 리스트를 정의:
weights = {"client": 0.5, "operation": 0.3, "product": 0.2}
3. 최종 유사도 계산
- 섹션별 유사도와 가중치를 곱해 최종 점수를 계산합니다.
final_similarity = ( weights["clients"] * career_similarity + weights["operation"] * skills_similarity + weights["product"] * introduction_similarity )
4. 결과 분석
- 최종 점수를 기준으로 유사도가 높은 지원자들끼리 그룹화하거나 상위 후보를 선정합니다.
2. Threshold 분석
유사도 점수를 기준으로 지원자 간 "비슷함" 여부를 결정하는 임계값(Threshold)을 설정하는 과정입니다.
1. 임계값 선택
- 코사인 유사도는 0~1의 범위를 가집니다. 특정 값을 기준으로 비슷함 여부를 판단합니다.
- 예: 유사도 ≥ 0.7이면 "비슷하다"로 분류.
2. Threshold 설정 및 테스트
- 여러 임계값을 테스트합니다:
- 0.5, 0.6, 0.7, 0.8 등.
- 각 임계값에서 지원자 간 그룹 수, 분포를 분석.
3. 임계값의 영향 평가
- Too Low (0.5 이하):
- 대부분의 지원자가 유사한 그룹으로 묶여 정보 손실 가능성.
- Too High (0.9 이상):
- 유사한 지원자도 다른 그룹으로 분리될 가능성.
4. 시각화
- 임계값 변화에 따른 그룹의 수나 분포를 시각화:
import matplotlib.pyplot as plt thresholds = [0.5, 0.6, 0.7, 0.8, 0.9] num_groups = [group_count(threshold) for threshold in thresholds] # 각 임계값에서 그룹 수 계산 plt.plot(thresholds, num_groups) plt.xlabel("Threshold") plt.ylabel("Number of Groups") plt.title("Threshold Analysis") plt.show()
5. 최적 Threshold 선택
- 도메인 지식과 결과 해석을 기반으로 최적의 임계값을 선택합니다.
3. 검증 데이터 활용
유사도 측정 결과의 신뢰도를 높이기 위해 검증 데이터를 활용하는 방법입니다.
1. 검증 데이터 준비
- 실제로 비슷하거나 다른 지원자 쌍에 대한 라벨링된 데이터:
- Positive Pair: 비슷하다고 판단된 지원자 (예: 1)
- Negative Pair: 다르다고 판단된 지원자 (예: 0)
- (지원서 A, 지원서 B, 1) # 비슷
- (지원서 A, 지원서 C, 0) # 다름
2. 검증 데이터로 모델 평가
- 코사인 유사도를 계산하고 예측 결과 생성:
predictions = (similarity_scores >= threshold).astype(int)
- 정답 데이터와 비교:
- Accuracy, Precision, Recall, F1-score 계산.
3. 모델 성능 지표
- 성능을 평가하기 위해 다음 지표를 계산합니다:
- Precision: 비슷하다고 예측한 쌍 중 실제 비슷한 쌍의 비율.
- Recall: 실제 비슷한 쌍 중 비슷하다고 예측한 비율.
- F1-score: Precision과 Recall의 조화 평균.
from sklearn.metrics import precision_score, recall_score, f1_score precision = precision_score(true_labels, predictions) recall = recall_score(true_labels, predictions) f1 = f1_score(true_labels, predictions) print(f"Precision: {precision}, Recall: {recall}, F1-score: {f1}")
4. Threshold 최적화
- 검증 데이터를 활용해 임계값을 최적화:
- 여러 임계값에 대해 성능 지표를 비교.
- F1-score를 최대화하는 임계값 선택.
5. 교차 검증
- 검증 데이터를 여러 폴드로 나누어 교차 검증(예: 5-fold cross-validation) 수행.
- 데이터 편향을 방지하고 일반화 성능 확인.
요약
- 가중치 기반 유사도는 섹션별 중요도를 반영해 더욱 정교한 유사도 계산을 수행합니다.
- Threshold 분석은 "비슷하다"를 정의하는 기준을 체계적으로 탐색하여 최적 임계값을 선택합니다.
- 검증 데이터 활용은 유사도 측정의 성능을 평가하고, 실제로 도메인에서 유효한 결과를 보장하기 위한 필수 단계입니다.
위 내용에 대해 구현이 필요하거나 추가적인 설명이 필요하다면 말씀해주세요!
정답 데이터를 만들고 성능을 측정해야함
하지만 정확하고 유용한 정답 데이터를 만들기 위해 몇 가지 조건을 논의해야 함
1. 데이터의 형태
- 데이터를 어떤 형식으로 제공할 계획인가요? (예: 텍스트, CSV 파일, JSON 등) -> Excel
- 각 데이터 샘플은 어떤 정보를 포함하고 있나요? (예: 지원서 전체 텍스트, 섹션별 분리된 텍스트 등)
1) 지원자 ID
2) 평가 기준 정보(내가 임의로 정한 기준)
3) 평가 기준에 따른 지원서 일부 텍스트
2. 정답 데이터의 기준
- 유사성을 판단할 기준이 명확해야 합니다.
- 어떤 경우를 "비슷하다(1)" 또는 "다르다(0)"로 판단해야 하나요?
- 예: 동일한 직업군, 유사한 기술 스택, 특정 키워드 포함 등.
동일한 직업군에 대해서 ActividadEconomicaDesc로 이미 분류가 되어 있으며,
해당 동일한 직업군에 해당하는 RutPostulante 끼리 유사도를 측정한다.
예시로 동일한 직업군에 해당하는 RutPostulante A, B, C가 있을때, 만약 특정한 다른 지원서들과 유사하면 코사인 유사도가 높게 나오고, 다른 지원서와 유사하지 않다면 코사인 유사도가 낮게 나온다. 그러므로 유사도는 0에서 1사이 값으로 나타내진다.
- 예: 동일한 직업군, 유사한 기술 스택, 특정 키워드 포함 등.
- 정답 데이터는 쌍(pair) 형태로 생성되나요? (예: (A, B, 1))
정답 데이터는 각 ActividadEconomicaDesc에 속하는 RutPostulante들끼리의 코사인 유사도 측정으로 코사인 유사도 값으로 생성된다(0에서 1사이 값)
- 어떤 경우를 "비슷하다(1)" 또는 "다르다(0)"로 판단해야 하나요?
3. 정답 데이터의 생성 방식
제가 데이터를 분석해 자동으로 라벨링하는 방식에는 몇 가지 옵션이 있습니다:
- 키워드 매칭: 특정 키워드(예: "Python", "Data Scientist")의 겹침 여부로 유사성을 판단.
- 문장 유사도: GTE-Multilingual 임베딩 또는 다른 모델로 코사인 유사도 계산 후 임계값에 따라 라벨링.
- 카테고리 기반 라벨링: 미리 정의된 카테고리를 기준으로 같은 카테고리에 속하면 "1", 다르면 "0".
2. 문장 유사도: GTE-Multilingual 임베딩 또는 다른 모델로 코사인 유사도 계산 후 임계값에 따라 라벨링.
-> 문장 유사도가 지원서에서 주장하는 내용과 동일함으로 간주할 수 있는가?
4. 출력 형식
- 정답 데이터를 어떤 형식으로 반환할까요? (예: CSV, JSON, Pandas DataFrame 등)
정답 데이터는 excel 형식으로 반환하면 될 거 같아.
5. 예시 데이터
가능하다면 작은 샘플 데이터를 제공해 주시면 그 데이터를 기반으로 정답 생성 과정을 보여드릴 수 있습니다. 이렇게 하면 더 명확하게 작업을 진행할 수 있습니다.
데이터는 생성했는데
잠깐.. 근데 GTE 모델이 GPT 모델의 성능과 어느정도 일치할까? 테스트를 해봐야할 거 같다