File size: 5,888 Bytes
4898d42 70cd2da 4898d42 70cd2da 4898d42 70cd2da ad4c10a 70cd2da ad4c10a 70cd2da f2350c7 70cd2da abbffd7 70cd2da abbffd7 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da abbffd7 70cd2da abbffd7 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 38e3e29 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da faeac6e 70cd2da abbffd7 70cd2da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
---
language: ko
license: mit
tags:
- sentence-transformers
- semantic-search
- medical
- pharmaceutical
- korean
datasets:
- drug_product_similarity_train
library_name: sentence-transformers
pipeline_tag: feature-extraction
base_model: intfloat/multilingual-e5-small
model_name: Yoonyoul/fine-tuned-e5-small-drugproduct
model_type: sentence-transformer
---
# ๐งฌ Fine-tuned E5-small for Korean Drug Product Semantic Embedding
## ๐ Model Overview
์ด ๋ชจ๋ธ์ **[intfloat/multilingual-e5-small](https://huggingface.co/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](https://github.com/ryukato/fine-tuned-e5-drugmodel)
---
## ๐งฉ Base Model Selection Rationale
์ด ํ๋ก์ ํธ๋ ๋ค๊ตญ์ด ํ๊ฒฝ์์๋ **์์ฝํ ๋ช
์นญ, ํจ๋ฅ, DUR ๊ท์ ์ ๋ณต์กํ ์๋ฏธ ๊ด๊ณ๋ฅผ ์ ํํ ์๋ฒ ๋ฉ**ํ๊ธฐ ์ํด
**E5(multilingual-E5)** ๊ณ์ด ๋ชจ๋ธ ์ค `intfloat/multilingual-e5-small`์ ์ ํํ์ต๋๋ค.
์ ์ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. **๋ค๊ตญ์ด ๋ฌธ์ฅ ํํ๋ ฅ**
- ์์ด๋ฟ ์๋๋ผ ํ๊ตญ์ด, ์ผ๋ณธ์ด, ์ค๊ตญ์ด, ๋
์ผ์ด ๋ฑ ๋ค์ํ ์ธ์ด์์ ๊ท ํ ์กํ ์๋ฏธ ํํ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค.
- ์์ฝํ ๋ฐ์ดํฐ๋ ์ธ๋์ดยทํ์ ์ฉ์ด๊ฐ ํผํฉ๋ ํํ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ multilingual encoder๊ฐ ์ ๋ฆฌํฉ๋๋ค.
2. **ํจ์จ์ ์ฑ๋ฅ ๋๋น ํ๋ผ๋ฏธํฐ ํฌ๊ธฐ (Small Variant)**
- `small` ๋ชจ๋ธ์ ์ฝ **33M ํ๋ผ๋ฏธํฐ**๋ก, M1/M2 ๋งฅ๋ถ ๋ฑ ๋ก์ปฌ ํ๊ฒฝ์์๋ ์์ ์ ์ผ๋ก fine-tuning ๊ฐ๋ฅํ์ต๋๋ค.
- FP16 ๋๋ bfloat16 ์ง์์ผ๋ก GPUยทMPS ํ๊ฒฝ์์๋ ํจ์จ์ ์ธ ์ฐ์ฐ์ ์ ๊ณตํฉ๋๋ค.
3. **๋ฌธ์ฅ ๋จ์ ์๋ฏธ ๊ฒ์(semantic retrieval)์ ์ต์ ํ**
- E5 ๋ชจ๋ธ์ โ๋ฌธ์ฅ ๋จ์ ์๋ฏธ ์๋ฒ ๋ฉ(Sentence Embedding)โ์ ์ํด ํ์ต๋์ด ์์ด,
๋จ์ ์ง์(`"๊ธฐ์นจ์ฝ"`, `"์ด ๋ด๋ฆฌ๋ ์ฝ"`)์ ์ ํ๋ช
(`"ํ์ฝ์์ด"`, `"ํ์ด๋ ๋"`) ๊ฐ ์๋ฏธ ๋งค์นญ์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์
๋๋ค.
4. **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
```python
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](https://github.com/ryukato/fine-tuned-e5-drugmodel)
- Last Updated: **2025-10-27**
|