Loadingโฆ
Loadingโฆ
์ด ๋ชจ๋ธ์ intfloat/multilingual-e5-small ๊ธฐ๋ฐ์ผ๋ก,
์์ฝํ ์์ฝยท์์ธ ๋ฐ์ดํฐ(drug_summary, drug_details) ๋ฐ ์ ํ ์ ํ ์ ์(drug_type_definition), DUR ๊ท์ ์ ์(drug_dur_type_definition)๋ฅผ ํ์ฉํ์ฌ
ํ๊ตญ์ด ์์ฝํ ๋๋ฉ์ธ์ ๋ง๊ฒ 3๋จ๊ณ ํ์ธํ๋(fine-tuning) ๋ SentenceTransformer ๋ชจ๋ธ์
๋๋ค.
์ด ํ๋ก์ ํธ๋ ๋ค๊ตญ์ด ํ๊ฒฝ์์๋ ์์ฝํ ๋ช
์นญ, ํจ๋ฅ, DUR ๊ท์ ์ ๋ณต์กํ ์๋ฏธ ๊ด๊ณ๋ฅผ ์ ํํ ์๋ฒ ๋ฉํ๊ธฐ ์ํด
E5(multilingual-E5) ๊ณ์ด ๋ชจ๋ธ ์ค intfloat/multilingual-e5-small์ ์ ํํ์ต๋๋ค.
์ ์ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ค๊ตญ์ด ๋ฌธ์ฅ ํํ๋ ฅ
ํจ์จ์ ์ฑ๋ฅ ๋๋น ํ๋ผ๋ฏธํฐ ํฌ๊ธฐ (Small Variant)
small ๋ชจ๋ธ์ ์ฝ 33M ํ๋ผ๋ฏธํฐ๋ก, M1/M2 ๋งฅ๋ถ ๋ฑ ๋ก์ปฌ ํ๊ฒฝ์์๋ ์์ ์ ์ผ๋ก fine-tuning ๊ฐ๋ฅํ์ต๋๋ค. ๋ฌธ์ฅ ๋จ์ ์๋ฏธ ๊ฒ์(semantic retrieval)์ ์ต์ ํ
"๊ธฐ์นจ์ฝ", "์ด ๋ด๋ฆฌ๋ ์ฝ")์ ์ ํ๋ช
("ํ์ฝ์์ด", "ํ์ด๋ ๋") ๊ฐ ์๋ฏธ ๋งค์นญ์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์
๋๋ค.Sentence-Transformers์ ์๋ฒฝํ ํธํ์ฑ
SentenceTransformer ์ธํฐํ์ด์ค์ 100% ํธํ๋์ด, PyTorch ๊ธฐ๋ฐ pipeline ํตํฉ์ด ์ฉ์ดํ์ต๋๋ค.drug_type_def_list.csv "ํด์ด์ " โ "์ฒด์จ์ ๋ฎ์ถ๋ ์ฝ" ๊ณผ ๊ฐ์ ๊ฐ๋
๋งคํ ํ์ต /model/fine_tuned_e5_small_drugtypedrug_dur_type_similarity_train.csv "์๋ถ๊ธ๊ธฐ", "๋
ธ์ธ์ฃผ์", "๋ณ์ฉ๊ธ๊ธฐ" ๋ฑ DUR ํ์
๊ณผ ์ ๋ฌธ์ ์ค๋ช
๊ฐ ์๋ฏธ ๋งคํ ํ์ต /model/fine_tuned_e5_small_drugdurtypedrug_product_similarity_train.csv (์ฝ 3,000๊ฑด ์ํ) "ํ์ฝ์์ด๋ด๋ณต์ก" ๊ฐ์ ์ค์ ์ ํ๊ณผ "์ด์ ๋ด๋ฆฌ๋ ์ฝ" ๊ฐ์ ์ง์ ๊ฐ ์๋ฏธ ๋งค์นญ ๊ฐํ /model/fine_tuned_e5_small_drugproduct_accumfine_tuned_e5_small_drugdurtype ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก,
์์ฝํ ์ฑ๋ถ(ingredient_name)๊ณผ ์ ํ ์ ํ(product_type)์ ๊ฒฐํฉํ
์๋ฒ ๋ฉ ํ์ต(fine_tuned_e5_small_drug_ptype_ingredients)์ ์ถ๊ฐ๋ก ์ํํ์์ต๋๋ค.
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ํ์ต ๋ฐ์ดํฐ | "์ฑ๋ถ๋ช
์(๋) ์ ํ์ ํ ์ ์ ์์ ์ฌ์ฉ๋๋ ์์ฝ ์ฑ๋ถ์ด๋ค." |
| ์ํ ์ฌ์ด์ฆ | 1,289 |
| ํ๊ท ์์ค | 0.0012 |
| ์ ์ฌ๋ ํ๊ฐ | ์๋ฏธ์ ๊ตฌ๋ถ์ด ์ถฉ๋ถํ ์ด๋ฃจ์ด์ง์ง ์์ |
| ๊ด์ฐฐ ์์ | โ์์ผยท์งํต์ โ ๊ณ์ด์ ์ด๋ถํ๋กํ๊ณผ ๋น๊ด๋ จ ์ฑ๋ถ์ธ ์ผํ๋ํธ๋ฅจ, ์ธํฐ๋ฆฌ์ง์ด ๋ชจ๋ 0.91~0.94 ์์ค์ ์ ์ฌ๋๋ฅผ ๋ณด์ |
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}")
| ํญ๋ชฉ | ๋ฒ์ |
|---|---|
| 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 |
intfloat/multilingual-e5-smallYoonyoul/fine-tuned-e5-small-drugproductintfloat/multilingual-e5-small