🧬 Fine-tuned E5-small for Korean Drug Product Semantic Embedding
📘 Model Overview
이 모델은 intfloat/multilingual-e5-small 기반으로,
의약품 요약·상세 데이터(drug_summary, drug_details) 및 제품 유형 정의(drug_type_definition), DUR 규제 정의(drug_dur_type_definition)를 활용하여
한국어 의약품 도메인에 맞게 3단계 파인튜닝(fine-tuning) 된 SentenceTransformer 모델입니다.
- GitHub Repository: https://github.com/ryukato/fine-tuned-e5-drugmodel
🧩 Base Model Selection Rationale
이 프로젝트는 다국어 환경에서도 의약품 명칭, 효능, DUR 규제의 복잡한 의미 관계를 정확히 임베딩하기 위해
E5(multilingual-E5) 계열 모델 중 intfloat/multilingual-e5-small을 선택했습니다.
선정 이유는 다음과 같습니다:
-
다국어 문장 표현력
- 영어뿐 아니라 한국어, 일본어, 중국어, 독일어 등 다양한 언어에서 균형 잡힌 의미 표현 성능을 보여줍니다.
- 의약품 데이터는 외래어·학술용어가 혼합된 형태가 많기 때문에 multilingual encoder가 유리합니다.
-
효율적 성능 대비 파라미터 크기 (Small Variant)
small모델은 약 33M 파라미터로, M1/M2 맥북 등 로컬 환경에서도 안정적으로 fine-tuning 가능했습니다.- FP16 또는 bfloat16 지원으로 GPU·MPS 환경에서도 효율적인 연산을 제공합니다.
-
문장 단위 의미 검색(semantic retrieval)에 최적화
- E5 모델은 “문장 단위 의미 임베딩(Sentence Embedding)”을 위해 학습되어 있어,
단순 질의("기침약","열 내리는 약")와 제품명("판콜에이","타이레놀") 간 의미 매칭에 뛰어난 성능을 보입니다.
- E5 모델은 “문장 단위 의미 임베딩(Sentence Embedding)”을 위해 학습되어 있어,
-
Sentence-Transformers와 완벽한 호환성
SentenceTransformer인터페이스와 100% 호환되어, PyTorch 기반 pipeline 통합이 용이했습니다.
🔹 Step 1: Drug Type Semantic Alignment
- 데이터셋:
drug_type_def_list.csv - 목표:
"해열제" → "체온을 낮추는 약"과 같은 개념 매핑 학습 - 모델 결과:
/model/fine_tuned_e5_small_drugtype
🔹 Step 2: DUR Type Semantic Alignment
- 데이터셋:
drug_dur_type_similarity_train.csv - 목표:
"임부금기","노인주의","병용금기"등 DUR 타입과 전문적 설명 간 의미 매핑 학습 - 모델 결과:
/model/fine_tuned_e5_small_drugdurtype
🔹 Step 3: Drug Product Semantic Alignment
- 데이터셋:
drug_product_similarity_train.csv(약 3,000건 샘플) - 목표:
"판콜에이내복액"같은 실제 제품과"열을 내리는 약"같은 질의 간 의미 매칭 강화 - 모델 결과:
/model/fine_tuned_e5_small_drugproduct_accum
🔹 Experimental: Drug Ingredient + Product Type Fine-tuning
fine_tuned_e5_small_drugdurtype 모델을 기반으로,
의약품 성분(ingredient_name)과 제품 유형(product_type)을 결합한
임베딩 학습(fine_tuned_e5_small_drug_ptype_ingredients)을 추가로 수행하였습니다.
⚙️ 적용 내용
| 항목 | 값 |
|---|---|
| 학습 데이터 | "성분명은(는) 제품유형 제제에서 사용되는 의약 성분이다." |
| 샘플 사이즈 | 1,289 |
| 평균 손실 | 0.0012 |
| 유사도 평가 | 의미적 구분이 충분히 이루어지지 않음 |
| 관찰 예시 | “소염·진통제” 계열의 이부프로펜과 비관련 성분인 염화나트륨, 세티리진이 모두 0.91~0.94 수준의 유사도를 보임 |
📋 관찰 내용
- 모델은 안정적으로 수렴하였으나, 문장 패턴의 반복성과 Positive-only 데이터 구성으로 인해
효능군 간 의미적 경계가 제대로 형성되지 않았음. - 전체 유사도 분포가 과도하게 높게 수렴하여, 의미보다 문체 패턴을 중심으로 학습된 것으로 관찰됨.
- 결론적으로 본 모델은 성분-제품유형 결합 학습이 의미 검색 품질 개선에 실질적 이점을 제공하지 않음을 확인하였으며, 현재 파이프라인에는 적용하지 않기로 결정함.
🧠 Use Case Example
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("Yoonyoul/fine-tuned-e5-small-drugproduct")
query = "열을 내리는 약은?"
docs = [
"판콜에이내복액은 해열진통제입니다.",
"마이암부톨정은 항결핵제입니다.",
"지르텍정은 항히스타민제입니다."
]
emb_q = model.encode(query, convert_to_tensor=True)
emb_d = model.encode(docs, convert_to_tensor=True)
scores = util.cos_sim(emb_q, emb_d)[0]
for doc, score in zip(docs, scores):
print(f"{doc} → 유사도: {score.item():.4f}")
⚙️ Training Environment
| 항목 | 버전 |
|---|---|
| Python | 3.12.4 |
| torch | 2.4.1 |
| transformers | 4.44.2 |
| sentence-transformers | 3.0.1 |
| accelerate | 0.27.0 |
| pandas | 2.2.3 |
📅 Release Info
- Author: @Yoonyoul
- Base Model:
intfloat/multilingual-e5-small - Fine-tuned Model:
Yoonyoul/fine-tuned-e5-small-drugproduct - Repository: https://github.com/ryukato/fine-tuned-e5-drugmodel
- Last Updated: 2025-10-27