โบ [Remind] ํ๋กฌํํธ์ ์์ฒญ์ ๋งฅ๋ฝ ์ ๋ณด๋ฅผ ์ถ๊ฐํด LLM์ ์์ฑ ํ์ง์ ํฅ์ํ๋ RAG
โบ [Key] ํ ์คํธ๋ฅผ ์ซ์๋ก ํํํ๋ ค๋ ๋ค์ํ ์๋ > AI๋ถ์ผ์์๋ ํ ์คํธ๋ฅผ ์๋ฏธ๋ฅผ ๋ด์ ๋ ์์ถ์ ์ธ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํด์ด
1. ํ ์คํธ ์๋ฒ ๋ฉ ์ดํดํ๊ธฐ
โบ RAG์์ ์ง๋ฌธ๊ณผ ๋งฅ๋ฝ ์ ๋ณด์ ํ ์คํธ๊ฐ ์ ํํ ์ผ์นํ์ง ์๋๋ผ๋ ๊ฒ์์ด ๊ฐ๋ฅํ ๊ฒ์ '์๋ฒ ๋ฉ' ํํ ๋ฐฉ์ ๋๋ฌธ์ด๋ค. ํ ์คํธ ์๋ฒ ๋ฉ(=๋ฌธ์ฅ ์๋ฒ ๋ฉ) ๋ชจ๋ธ์ ๋ฌธ์ฅ์ ์๋ฏธ๋ฅผ ๋ด์ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ก ๋ณํํ๋ฏ๋ก, ๋ฌธ์์ด์ด ๋์ผํ์ง ์๋๋ผ๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ์ ์ฌ๋ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ Semantic search (์๋ฏธ๊ฒ์)์ด๋ผ๊ณ ํ๋ค.
โบ ์๋ฒ ๋ฉ : ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ์์ถํ ์ซ์ ๋ฐฐ์ด
1.1 ๋ฌธ์ฅ์๋ฒ ๋ฉ ๋ฐฉ์์ ์ฅ์
โ ํ ์คํธ ์๋ฒ ๋ฉ (=๋ฌธ์ฅ์๋ฒ ๋ฉ)
โช๏ธ ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ์ซ์๋ก ํํํ ์ ์๋ค๋ฉด, ๋ฐ์ดํฐ๊ฐ ์๋ก ์ ์ฌํ์ง, ๊ด๋ จ์๋์ง ๋ฑ์ ์ค์ํ ์ ๋ณด๋ฅผ ํ์ฉ ๊ฐ๋ฅ
โช๏ธ ๋ฌธ์ฅ ์๋ฒ ๋ฉ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฝ์ฌ์ธ์ ์ฌ๋ ๋ฑ์ ํตํด ๋จ์ด๋ ๋ฌธ์ฅ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ณ์ฐํ ์ ์๋ค (ex. ํ๊ต-๊ณต๋ถ : 0.6๋งํผ ์ ์ฌ, ํ๊ต-์ด๋ : 0.3๋งํผ ์ ์ฌ)
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
# SentenceTransformer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ฌธ์ฅ์๋ฒ ๋ฉ ๊ตฌํ
smodel = SentenceTransformer('snunlp/KR-SBERT-V40K-klueNLI-augSTS')
dense_embeddings = smodel.encode(['ํ๊ต', '๊ณต๋ถ', '์ด๋'])
cosine_similarity(dense_embeddings) # ์ฝ์ฌ์ธ ์ ์ฌ๋
# array([[1.0000001 , 0.5950744 , 0.32537547],
# [0.5950744 , 1.0000002 , 0.54595673],
# [0.32537547, 0.54595673, 0.99999976]], dtype=float32)
1.2 ์ํซ์ธ์ฝ๋ฉ
โ ์ํซ์ธ์ฝ๋ฉ
โช๏ธ ํ๊ต = [1, 0, 0] , ๊ณต๋ถ = [0, 1, 0], ์ด๋ = [0, 0, 1] ์์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ํซ์ธ์ฝ๋ฉ์ ๋ฒ์ฃผํ ๋ฐ์ดํฐ ์ฌ์ด์ ์๋ํ์ง ์์ ๊ด๊ณ๊ฐ ๋ด๊ธฐ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ถฉ๋ถํ ๊ด๋ จ์ด ์๋ ๋จ์ด ์ฌ์ด์ ๊ด๊ณ๋ ํํํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค. ๊ฐ๋ น, ํ๊ต์ ๊ณต๋ถ ์ฌ์ด์๋ '๋ฐฐ์ด๋ค' ๋ ๊ณตํต์ ์ด ์์ผ๋ ์ํซ์ธ์ฝ๋ฉ์์๋ ๊ทธ ์๋ฏธ๋ฅผ ์ด๋ฆด ์ ์๋ค.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
word_dict = {"school": np.array([[1, 0, 0]]),
"study": np.array([[0, 1, 0]]),
"workout": np.array([[0, 0, 1]])
}
# ๋ ๋จ์ด ์ฌ์ด์ ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐํ๊ธฐ
cosine_school_study = cosine_similarity(word_dict["school"], word_dict['study']) # 0
cosine_school_workout = cosine_similarity(word_dict['school'], word_dict['workout']) # 0
โช๏ธ ํ๊ต์ ๊ณต๋ถ์ ์ ์ฌ๋, ํ๊ต์ ์ด๋์ ์ ์ฌ๋๊ฐ ๋ชจ๋ 0์ผ๋ก ๋์จ๋ค.
1.3 ๋ฐฑ์ค๋ธ์์ฆ
โ ๋ฐฑ์ค๋ธ์์ฆ

โช๏ธ ๋น์ทํ ๋จ์ด๊ฐ ๋ง์ด ๋์ค๋ฉด ๋น์ทํ ๋ฌธ์ฅ ๋๋ ๋ฌธ์๋ผ๋ ๊ฐ์ ์ ํ์ฉํด ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ๋ค. "๋จ์ด์ ์์์ ๊ด๊ณ์์ด" ํด๋น ๋ฌธ์์ ๋ฑ์ฅํ ๋จ์ด์ ๊ทธ "๋ฑ์ฅ ํ์" ๋ฅผ ์ง๊ณํ๋ค. ๊ฐ๋ น, ๊ฒฝ์ ๊ธฐ์ฌ์๋ '๋์ถ', '๋ถ๋์ฐ', '์ฆ์'๋ผ๋ ๋จ์ด๊ฐ ์์ฃผ ๋ฑ์ฅํ๊ณ , IT๊ธฐ์ฌ์๋ ๊ฒฝ์ ๊ธฐ์ฌ๋ณด๋ค '๋ถ๋์ฐ' ๋ฑ์ฅ ํ์๋ ๋ฎ์ ๊ฒ์ด๋ค.
โช๏ธ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํด์ ์์ฃผ ์ฌ์ฉํ๋, ๋ฐฑ์ค๋ธ์์ฆ ๋ฐฉ์์ ์ด๋ค ๋จ์ด๊ฐ ๋ง์ด ๋์๋ค๊ณ ํ์ฌ ๋ฌธ์์ ์๋ฏธ๋ฅผ ํ์ ํ๋ ๋ฐ ํฌ๊ฒ ๋์์ด ๋์ง ์๋ ๋ฌธ์ ๊ฐ ์๋ค. ๊ฐ๋ น ์/๋/์ด/๊ฐ ๊ฐ์ ์กฐ์ฌ๋ ๊ฑฐ์ ๋ชจ๋ ํ๊ตญ์ด ๋ฌธ์์ ๋ฑ์ฅํ๋ค. ๋ํ ๋ฒ์ฉ์ ์ผ๋ก ์์ฃผ ์ฐ์ด๋ ๋จ์ด๋ (ex.AI) ๋ฌธ์์ ์๋ฏธ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ด๋ ต๊ฒ ๋๋ค.
1.4 TF-IDF
โ TF-IDF

โช๏ธ BoW์ ํ๊ณ์๋ '์ด๋ ๋ฌธ์์๋ ๋์ค๋ ๋จ์ด' ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด, ํน์ ๋ฌธ์์์ ํน์ ๋จ์ด๊ฐ ๋ฑ์ฅํ ํ์์, ํน์ ๋จ์ด๊ฐ ๋ฑ์ฅํ ๋ฌธ์์ ์๋ฅผ ํ์ฉํด, ์ด๋ ๋ฌธ์์๋ ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด๋ ์ค์๋๋ฅผ ์๊ฒํ๋ ๊ณ์ฐ์์ ์ฌ์ฉํ๋ค.
โ ํฌ์๋ฒกํฐ (Sparsity)
โช๏ธ ์ํซ์ธ์ฝ๋ฉ, ๋ฐฑ์ค๋ธ์์ฆ, TF-IDF๋ ๋ฌธ์์ ๋ฑ์ฅํ๋ ๋จ์ด์ ์๋งํผ ์ฐจ์์ด ์ปค์ง๊ธฐ ๋๋ฌธ์, ๋ง์ฝ ์ด 10,000๊ฐ์ ๋จ์ด๊ฐ ์ ์ฒด ๋ฌธ์์์ ์ฌ์ฉ๋์๋ค๋ฉด, ํ๋์ ๋ฌธ์ฅ๊ณผ ๋ฌธ์๋ฅผ ํํํ๊ธฐ ์ํด 10,000์ฐจ์์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์ด ํ์ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ์๊ฐ 0์ธ ๋ฒกํฐ(ํฌ์๋ฒกํฐ)๊ฐ ๋๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํฌ์ํ ๋ฒกํฐ๋ ์๋ฏธ๋ฅผ '์์ถ'ํด์ ๋ด๊ณ ์์ง ๋ชปํ๋ฏ๋ก ๋ฒกํฐ์ ๋ฒกํฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํ์ฉํ๊ธฐ ์ด๋ ต๋ค.
โ ๋ฐ์ง์๋ฒ ๋ฉ (Dense embedding)
โช๏ธ ์๋ํฌ๋ฒก๊ณผ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ ๋ณดํต 100~1000์ฐจ์ ์ ๋๋ก ํจ์ฌ ์์ถ๋ ํํ์ธ๋ฐ, ํฌ์ํ ๋ฒกํฐ์ ๋๋นํด ๋ฐ์ง์๋ฒ ๋ฉ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
1.5 ์๋ํฌ๋ฐฑ
โ Word2Vec
โช๏ธ ๋จ์ด๊ฐ 'ํจ๊ป ๋ฑ์ฅํ๋ ๋น๋' ์ ๋ณด๋ฅผ ํ์ฉํด ๋จ์ด์ ์๋ฏธ๋ฅผ ์์ถํ๋ ๋จ์ด ์๋ฒ ๋ฉ ๋ฐฉ๋ฒ (ex. AI&ML, ํ๊ฐ&์์ ๊ฑฐ)
โช๏ธ ํน์ ๋จ์ด ์ฃผ๋ณ์ ์ด๋ค ๋จ์ด๊ฐ ์๋์ง ์์ธกํ๋ ๋ชจ๋ธ์ ํตํด, ๋จ์ด์ ์๋ฏธ๋ฅผ ํํํ ์๋ฒ ๋ฉ์ ๋ชจ๋ธ์ด ์์ฑํ๋๋ก ํ๋ค.

โช๏ธ CBOW : ์ฃผ๋ณ ๋จ์ด๋ก ๊ฐ์ด๋ฐ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ฐฉ์
โช๏ธ SkipGram : ์ค๊ฐ ๋จ์ด๋ก ์ฃผ๋ณ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ฐฉ์

โช๏ธ ์ฃผ๋ณ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ฐฉ์์ ์ฌ์ฉํด ํ์ตํ ๋ชจ๋ธ๋ก ๋จ์ด๋ฅผ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ก ๋ณํํ์ ๋, '์ฌ์'๋ผ๋ ๋จ์ด์ '๋จ์'๋ผ๋ ๋จ์ด์ ์๋ฒ ๋ฉ ๋ฒกํฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ด '์ฌ์'๊ณผ '์' ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๋ฐ ๋ฐฉํฅ๊ณผ ๋น์ทํ๊ฒ ๋์๋ค. ๋จ์ด์ ์๋ฏธ๋ฅผ ์์ถํด ์ซ์๋ก ํํํ๋ฉด ๋จ์ด์ ๋จ์ด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ณ์ฐํ ์ ์๊ณ , ๊ทธ ๊ด๊ณ์๋ ์๋ฏธ๊ฐ ๋ด๊ฒจ์ ธ ์๋ค.
2. ๋ฌธ์ฅ ์๋ฒ ๋ฉ ๋ฐฉ์
2.1 ๋ฌธ์ฅ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
โ ๋ฌธ์ฅ์๋ฒ ๋ฉ
โช๏ธ ํ ์คํธ๋ฅผ ํ์ฉํ ๋๋ ๋จ์ด๋จ์๋ณด๋ค๋, ๋ฌธ์ฅ์ด๋ ๋ฌธ๋จ ๋จ์ ๊ฐ์ ๋ ํฐ ๋จ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ ํ์ฉํ๋ฉด ๋ฌธ์ฅ ์ฌ์ด์ ์ ์ฌ๋๋ ๊ด๋ จ์ฑ์ ๋ฒกํฐ ์ฐ์ฐ์ ํตํด ์ฝ๊ฒ ๊ณ์ฐํ ์ ์๋ค.
โช๏ธ ํธ๋์คํฌ๋จธ ์ธ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ BERT๋ ์ ๋ ฅ ๋ฌธ์ฅ์ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ผ๋ก ๋ณํํ๋๋ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
โ BERT์ ๋ฌธ์ฅ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์

โช๏ธ 1) ๊ต์ฐจ์ธ์ฝ๋
โ ๋ ๋ฌธ์ฅ์ ํจ๊ป BERT ์ ๋ ฅ์ผ๋ก ๋ฃ๊ณ ๋ชจ๋ธ์ด ์ง์ ๋ ๋ฌธ์ฅ ์ฌ์ด์ ๊ด๊ณ๋ฅผ 0๊ณผ 1์ฌ์ด์ ๊ฐ์ผ๋ก ์ถ๋ ฅํ๋ค.
โ ๊ณ์ฐ๋์ด ๋ง์ง๋ง, ๋ ๋ฌธ์ฅ์ ์ํธ์์ฉ์ ๊ณ ๋ คํ์ฌ ๋ ์ ํํ ๊ด๊ณ ์์ธก์ด ๊ฐ๋ฅํ๋ค.
โ ๊ทธ๋ฌ๋, ๋ค๋ฅธ ๋ฌธ์ฅ๊ณผ ๊ฒ์ ์ฟผ๋ฆฌ์ ์ ์ฌ๋๋ฅผ ์๊ณ ์ถ์ ๋ ๋์ผ ์ฐ์ฐ์ ๋ฐ๋ณตํด์ผ ํด์ ๋ชจ๋ ๋ฌธ์ฅ ์กฐํฉ์ ๋ํด ์ ์ฌ๋๋ฅผ ๊ณ์ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค.
โช๏ธ 2) ๋ฐ์ด์ธ์ฝ๋
โ ๊ฐ ๋ฌธ์ฅ์ ๋ ๋ฆฝ์ ์ผ๋ก BERT ์ ๋ ฅ์ผ๋ก ๋ฃ๊ณ , ๋ชจ๋ธ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ธ ๋ฌธ์ฅ ์๋ฒ ๋ฉ ๋ฒกํฐ ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ์ฝ์ฌ์ธ์ ์ฌ๋์ ๊ฐ์ ๋ณ๋์ ๊ณ์ฐ์ ํตํด ๊ตฌํ๋ค.
โ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ฒ ๋ฉ์ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์, ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ณ ์ถ์ ๋ฌธ์ฅ์ด ๋ฐ๋๋๋ผ๋ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ด ํ์ ์๋ค.
2.2 ๋ฐ์ด์ธ์ฝ๋ ๋ชจ๋ธ ๊ตฌ์กฐ
โ ๋ฐ์ด์ธ์ฝ๋

โช๏ธ ๋ฐ์ด์ธ์ฝ๋๋ BERT๋ชจ๋ธ์ ์ถ๋ ฅ์ ํ๋ง์ธต์ ํตํด ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ผ๋ก ๋ง๋ ๋ค.
โช๏ธ BERT๋ ์ ๋ ฅ ํ ํฐ๋ง๋ค ์ถ๋ ฅ ์๋ฒ ๋ฉ์ ์์ฑํ๋ค. ๋ฐ๋ผ์ ์ ๋ ฅํ๋ ๋ฌธ์ฅ ๊ธธ์ด๊ฐ ๋ฌ๋ผ์ง ๊ฒฝ์ฐ ์ถ๋ ฅํ๋ ์๋ฒ ๋ฉ์๊ฐ ๋ฌ๋ผ์ง๋๋ฐ, ๋ฌธ์ฅ์ ๊ธธ์ด๊ฐ ์๋ก ๋ค๋ฅผ ๋ ๋ค๋ฅธ ๊ฐ์์ ์๋ฒ ๋ฉ์ด ๋ฐํ๋๋ค๋ฉด ๋ฌธ์ฅ ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ธฐ ์ด๋ ค์์ง๋ฏ๋ก ํ๋ง์ธต์ ์ฌ์ฉํด ๋ฌธ์ฅ์ ๋ํํ๋ 1๊ฐ์ ์๋ฒ ๋ฉ์ผ๋ก ํตํฉ์ํจ๋ค.
โช๏ธ ํ๋ง์ธต์ ์ฌ์ฉํด, ๋ฌธ์ฅ์ ๊ธธ์ด๊ฐ ๋ฌ๋ผ์ ธ๋ 1๊ฐ์ ๊ณ ์ ์ฐจ์์ด ๋ฐํ๋๋ฏ๋ก ์ฝ์ฌ์ธ์ ์ฌ๋ ์ฐ์ฐ์ ํ ๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ณ์ฐํ ์ ์๋ค.
โ Sentence-Transformers
โช๏ธ bi-encoder ๊ตฌํ์ด ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from sentence_transformers import SentenceTransformer, models
# ์ฌ์ฉํ BERT๋ชจ๋ธ
word_embedding_model = models.Transformer('klue/roberta-base')
# ํ๋ง ์ธต์ ํ ํฐ ์๋ฒ ๋ฉ ์ฐจ์ ์
๋ ฅํ๊ธฐ : models.Pooling()
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension())
# ๋ ๋ชจ๋ ๊ฒฐํฉ
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])
โช๏ธ model์ถ๋ ฅ์ ํด๋ณด๋ฉด 3๊ฐ์ง Pooling ๋ชจ๋๊ฐ ๋ณด์ธ๋ค. Pooling ๋ชจ๋๋ ์ธ์ด ๋ชจ๋ธ์ด ์ถ๋ ฅํ ๊ฒจ๋ก๊ฐ ์๋ฒ ๋ฉ์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ผ๋ก ํตํฉํ ๋ ํตํฉํ๋ ๋ฐฉ์์ ๋งํ๋ค.
โ 1) pooling_mode_cls_tokens : ์ฒซ๋ฒ์งธ ํ ํฐ์ธ [CLS] ํ ํฐ์ ์ถ๋ ฅ์๋ฒ ๋ฉ์ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ผ๋ก ์ฌ์ฉ
โ 2) pooling_mode_mean_tokens : BERT ๋ชจ๋ธ์์ ๋ชจ๋ ์ ๋ ฅ ํ ํฐ์ ์ถ๋ ฅ ์๋ฒ ๋ฉ์ ํ๊ท ํ ๊ฐ์ ๋ฌธ์ฅ์๋ฒ ๋ฉ์ผ๋ก ์ฌ์ฉ
โ 3) pooling_mode_max_tokens : BERT ๋ชจ๋ธ์ ๋ชจ๋ ์ ๋ ฅ ํ ํฐ์ ์ถ๋ ฅ ์๋ฒ ๋ฉ์์ ๋ฌธ์ฅ ๊ธธ์ด ๋ฐฉํฅ์์ ์ต๋๊ฐ์ ์ฐพ์ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ผ๋ก ์ฌ์ฉ
2.3 Sentence-Transformers๋ก ํ ์คํธ์ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ ์์ฑํด ๋ณด๊ธฐ
โ ํ๊ตญ์ด ๋ฌธ์ฅ ์๋ฒ ๋ฉ ๋ชจ๋ธ๋ก ์ ๋ ฅ ๋ฌธ์ฅ ์ฌ์ด์ ์ ์ฌ๋ ๊ณ์ฐ
โช๏ธ Sentence-Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๊น ํ์ด์ค ๋ชจ๋ธ์ ๋ถ๋ฌ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค. ๋ฐ๋ผ์ ํ๊น ํ์ด์ค ๋ชจ๋ธ ํ๋ธ์์ ์ ๊ณตํ๋ ๋ชจ๋ธ์ด๋ผ๋ฉด ํ ์คํธ ๋ฟ ์๋๋ผ ์ด๋ฏธ์ง ๋ชจ๋ธ๋ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค.
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('snunlp/KR-SBERT-V40K-klueNLI-augSTS')
# ํ๊ตญ์ด ๋ฌธ์ฅ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ๋ถ๋ฌ์ด
embs = model.encode(['์ ์ด ์ ์ต๋๋ค',
'์กธ์์ด ์ต๋๋ค',
'๊ธฐ์ฐจ๊ฐ ์ต๋๋ค']) # ๋ฌธ์ฅ ์ธ์ฝ๋ฉ
cos_scores = util.cos_sim(embs, embs) # ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
print(cos_scores)
# tensor([[1.0000, 0.6410, 0.1887],
# [0.6410, 1.0000, 0.2730],
# [0.1887, 0.2730, 1.0000]])
โ CLIP๋ชจ๋ธ์ ํ์ฉํ ์ด๋ฏธ์ง์ ํ ์คํธ ์๋ฒ ๋ฉ ์ ์ฌ๋ ๊ณ์ฐ
โช๏ธ ๊ณ ์์ด, ๊ฐ์์ง ์ด๋ฏธ์ง์, ์ด๋ฏธ์ง๋ฅผ ๋ฌ์ฌํ๋ ํ ์คํธ ์ฌ์ด์ ์ ์ฌ๋ ๊ณ์ฐ > ๋๋ฌผ ์ด๋ฏธ์ง์ ๋๋ฌผ ํ ์คํธ๋ผ๋ฆฌ ๋์ํ์ ๋ ์ ์ฌ๋๊ฐ ๋ ๋์ (๋ฐ๋๋ฉด ์ ์ฌ๋ ์ ์๊ฐ ๋ฎ์)
from PIL import Image
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('clip-ViT-B-32')
img_embs = model.encode([Image.open('dog.jpg'), Image.open('cat.jpg')])
text_embs = model.encode(['A dog on grass', 'Brown cat on yellow background'])
cos_scores = util.cos_sim(img_embs, text_embs)
print(cos_scores)
# tensor([[0.2771, 0.1509],
# [0.2071, 0.3180]])
2.4 ์คํ์์ค์ ์์ ์ฉ ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋น๊ตํ๊ธฐ
โ ์คํ์์ค๋ชจ๋ธ
โช๏ธ Sentence-Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ฌ์ ํ์ต ๋ชจ๋ธ์ ๋ถ๋ฌ์ ํ์ฉํ๋ ๋ฐฉ์
โช๏ธ ์์ ์ ๋ฐ์ดํฐ์ ๋ง์ถฐ fine-tuning์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์
โ ์์ ์ฉ๋ชจ๋ธ
โช๏ธ Open AI ์ text-embedding-ada-002
โช๏ธ ๋๋์ ๋ฐ์ดํฐ๋ก ํ์ต๋ ๋งํผ ์ฑ๋ฅ์ด ๋ฐ์ด๋จ
โช๏ธ LLM ํ ์คํธ ์์ฑ์ ๋นํด ๋ฎ์ ๋น์ฉ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅ
'1๏ธโฃ AIโขDS > ๐ LLM' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 11. ์์ ์ ๋ฐ์ดํฐ์ ๋ง์ถ ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ง๋ค๊ธฐ : RAG ๊ฐ์ ํ๊ธฐ (0) | 2025.10.19 |
|---|---|
| [์ฑ ์คํฐ๋] 10-(2). ์ค์ต : ์๋ฏธ๊ฒ์ ๊ตฌํํ๊ธฐ (0) | 2025.09.19 |
| [์ฑ ์คํฐ๋] 9. LLM ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐํ๊ธฐ (1) | 2025.09.08 |
| [์ฑ ์คํฐ๋] 8. sLLM ์๋นํ๊ธฐ (0) | 2025.09.06 |
| [์ฑ ์คํฐ๋] 7. ๋ชจ๋ธ ๊ฐ๋ณ๊ฒ ๋ง๋ค๊ธฐ (3) | 2025.08.23 |
๋๊ธ