๋ฒกํฐ ์๋ฒ ๋ฉ์ด๋ ?
์ฌ๋์ด ์ดํดํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ์ซ์(vector) ๋ก ๋ณํํ๋ ๊ณผ์ .
๋จ์ํ ์ซ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ด์๋๋ผ, ๋จ์ด ์ฌ์ด์ ์๋ฏธ์ ๊ด๊ณ (semantic meaning) ์ ๋ด์๋ธ๋ค๋ ๊ฒ์ด ํต์ฌ์.
์ค์นผ๋ผ(Scalar) : ๋จ์ผ ์ซ์, ํฌ๊ธฐ๋ง ์๊ณ ๋ฐฉํฅ์ ์๋ "ํ๋์ ์ซ์", ๋ณ์ ํ๋์ ๋ด๊ธด ๊ฐ.
๋ฒกํฐ(Vector) : ์ซ์์ ๋์ด, ์ฆ 1์ฐจ์ ๋ฐฐ์ด. ์ฌ๋ฌ ์ซ์๋ฅผ ์์๋๋ก ๋์ดํ ๊ฒ. "ํฌ๊ธฐ"์ "๋ฐฉํฅ"์ ๊ฐ์ง.
ํ๋ ฌ(Matrix) : ์ซ์์ ํ (2์ฐจ์ ๋ฐฐ์ด) : ๋ฒกํฐ๋ค์ ์ฌ๋ฌ๊ฐ ์์์ฌ๋ฆฐ ๊ฐ. ex. ์์ ์ํธ.
๋ฒกํฐ ๊ณต๊ฐ
๋ค์ฐจ์ ์ํ์ ๊ณต๊ฐ
๋จ์ํ ์ซ์ ๋์ด์ด ์๋, ๋ฐ์ดํฐ ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ํตํด ๊ด๊ณ๋ฅผ ์ ์ํ ์ ์๋ ์ด๋์ฅ.
์ธ๊ฐ์ ์ธ์์ด 3์ฐจ์์ผ๋, ai ์ ๋ฒกํฐ ๊ณต๊ฐ์ ์๋ฐฑ~์์ฒ์ฐจ์์.
์๊ฐํ ํ ์ ์๋ ๋ฒ์ฃผ์์ ๊ธฐ๊ณ๋ ๋ฏธ์ธํ ์๋ฏธ ์ฐจ์ด๋ฅผ ๊ตฌ๋ถํด๋.
์๋ฒ ๋ฉ ์ ์ฌ๋ ๊ณ์ฐ ํ๋ ์ํ๊ณต์ 3๊ฐ์ง.
1) ์ ํด๋ฆฌ๋ ๊ธฐํํ
- ๋ ์ ์ฌ์ด์ ์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ๋น๊ตํ๋ฉฐ ์์์๋ก ์ ์ฌํ ๊ฐ์. ๊ทธ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์์น๊ฐ ์ค์ํจ
- ex) ์ด๋ฏธ์ง ์ฒ๋ฆฌ(์ด๋ฏธ์ง ์ธ์)์์ ํฝ์
๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ ๋ ์ฃผ๋ก ์ฌ์ฉ.
(์ฌ์ง์ ๋ฌผ๋ฆฌ์ ์ธ ์ ๋ต์ด์กด์ฌํจ. ๋ฐ๋ฉด์ ํ
์คํธ๋ "๋ง์๋ ์ฌ๊ณผ๋ค", "์ฌ๊ณผ๊ฐ ๊ฟ๋ง์ด๋ค" ์ด ๋ค๋ฅด๊ฒ ์๊ธด ๋ ๋ฌธ์ฅ์ ์๋ฏธ๊ฐ ๋น์ทํจ. )
2) ์ฝ์ฌ์ธ ์ ์ฌ๋
- ๋ ํ์ดํ ์ฌ์ด์ "๊ฐ๋"๋ง์ผ๋ก ๋น๊ต. ๋ด์ ์ ๋จผ์ ๊ตฌํ ํ, ๊ทธ ๊ฐ๋๋ง ๋๊ณ ๋น๊ต. ๋ ์ ์ ๊ธธ์ด(๋ฐ์ดํฐ์ ํฌ๊ธฐ) ๋ ์ค์ํ์ง ์์.
- ex) RAG, LLM ๊ฒ์์ ํ์ค. "๋ฐฐ๊ณ ํ" vs "๋ฐฐ๊ณ ํ๋ฐ๋ญ ๋จน์๊น" ๋ ๋ฐฉํฅ์ด ๊ฐ์ผ๋ฏ๋ก, ์ ์ฌํ๋ค๊ณ ํ๋จ.
3) ๋ด์
- ๋ํ์ดํ์ ๊ธธ์ด๊ฐ "๊ฐ์๋" ๋ฐฉํฅ์ด ์ผ๋ง๋ ๋น์ทํ์ง. ๋ด์ ์ผ๋ก ๊ตฌํด์ ๋น๊ต. ๋ฐ์ดํฐ ํฌ๊ธฐ, ์ฆ ๊ธธ์ด์ ์์กด์ .
- ex) ์ ํ๋ธ/๋ทํ๋ฆญ์ค ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ. ๋ฐฉํฅ(์ฅ๋ฅด ์ ํธ๋) ๋ ๋ง์์ผ ํ์ง๋ง, ์กฐํ์/์์ฒญ ๊ธฐ๊ฐ์ด ํฐ ๋ฐ์ดํฐ๊ฐ ์๋จ์ ์์นํด์ผํจ.
์๋ฒ ๋ฉ ๋ชจ๋ธ์ ๋ฐ์ ๊ณผ์ (4๋จ๊ณ)
1๋จ๊ณ: ํต๊ณ ๊ธฐ๋ฐ (Sparse Embedding)
๊ฐ์ฅ ์์ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ๋จ์ด๊ฐ ๋ฌธ์ฅ์ ๋ํ๋๋ ๋น๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ซ์๋ฅผ ๋ถ์ฌํ์ต๋๋ค.
โข ํต์ฌ ๋ชจ๋ธ: TF-IDF, LSA(์ ์ฌ ์๋ฏธ ๋ถ์)
โข ํน์ง: ๋จ์ด์ฅ(Vocabulary) ํฌ๊ธฐ๋งํผ์ ๋ฒกํฐ ์ฐจ์์ด ํ์ํด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํ๊ณ (ํฌ์ ํ๋ ฌ), ๋จ์ด ๊ฐ์ ์๋ฏธ์ ์ ์ฌ์ฑ(์ฌ๊ณผ์ ๋ฐฐ๊ฐ ๋น์ทํ๋ค๋ ์ ๋ฑ)์ ์ ํ ํ์
ํ์ง ๋ชปํ์ต๋๋ค.
2๋จ๊ณ: ์ ๊ฒฝ๋ง ๊ธฐ๋ฐ ์ ์ ์๋ฒ ๋ฉ (Static Embedding)
2013๋
๊ตฌ๊ธ์ Word2Vec์ด ๋ฑ์ฅํ๋ฉฐ ํ๋ช
์ด ์์๋์์ต๋๋ค. ๋จ์ด๋ฅผ ์๋ฐฑ ์ฐจ์์ ๋ฐ์ง ๋ฒกํฐ(Dense Vector)๋ก ์์ถํ๋ฉด์๋ ์๋ฏธ๋ฅผ ๋ณด์กดํ๊ฒ ๋์์ต๋๋ค.
โข ํต์ฌ ๋ชจ๋ธ: Word2Vec, GloVe, FastText
โข ํน์ง: "์ - ๋จ์ + ์ฌ์ = ์ฌ์" ๊ฐ์ ๋ฒกํฐ ์ฐ์ฐ์ด ๊ฐ๋ฅํด์ง ์ ๋๋ก ๋จ์ด์ ์๋ฏธ ๊ด๊ณ๋ฅผ ์ ํ์
ํ์ต๋๋ค.
โข ํ๊ณ: ์์ ๋ง์๋๋ฆฐ ๋๋ก ๋ฌธ๋งฅ์ ๋ชจ๋ฆ
๋๋ค. "๋ฐฐ(ship)"์ "๋ฐฐ(pear)"๋ฅผ ๋๊ฐ์ ๋ฒกํฐ๋ก ํํํฉ๋๋ค.
3๋จ๊ณ: ๋ฌธ๋งฅ ๊ธฐ๋ฐ ๋์ ์๋ฒ ๋ฉ (Contextual Embedding)
2018๋
์ ํ๋ก ๋ฑ์ฅํ ๋ชจ๋ธ๋ค๋ก, ๋จ์ด ์์ฒด๊ฐ ์๋๋ผ ๋ฌธ์ฅ ์์์์ ์ญํ ์ ๋ฐ๋ผ ๋ฒกํฐ๊ฐ์ด ์ค์๊ฐ์ผ๋ก ๋ณํฉ๋๋ค.
โข ํต์ฌ ๋ชจ๋ธ: ELMo, BERT, GPT-1/2
โข ํน์ง: Transformer ๊ตฌ์กฐ๋ฅผ ์ฑํํ๋ฉด์ ๋ฌธ์ฅ ์ ์ฒด๋ฅผ ํ๊บผ๋ฒ์ ๋ณด๊ณ ๋จ์ด์ ์๋ฏธ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋๋ถ์ ๋์์ด์์ด ๋ฌธ์ ๋ฅผ ์๋ฒฝํ ํด๊ฒฐํ๊ณ , NLP์ ๊ฑฐ์ ๋ชจ๋ ๋ฒค์น๋งํฌ ์ ์๋ฅผ ๊ฐ์์น์ ์ต๋๋ค.
4๋จ๊ณ: ๊ฑฐ๋ ์ธ์ด ๋ชจ๋ธ ์๋ (LLM-based Embedding)
๋จ์ํ ๋จ์ด/๋ฌธ์ฅ ํํ์ ๋์ด, ๋ชจ๋ธ ์์ฒด๊ฐ ๊ฐ์ง ๊ฑฐ๋ํ ์ง์์ ์๋ฒ ๋ฉ์ ๋
น์ฌ๋
๋๋ค.
โข ํต์ฌ ๋ชจ๋ธ: OpenAI text-embedding-3, BGE-M3, HuggingFace์ ๊ฐ์ข
SBERT ๋ชจ๋ธ
โข ํน์ง:
โข ๋ค๊ตญ์ด ์ง์: ํ๊ตญ์ด๋ก ๊ฒ์ํด๋ ์๋ฌธ ๋ฌธ์๋ฅผ ์ฐพ์๋ด๋ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.
โข ๊ธด ๋ฌธ๋งฅ ์ฒ๋ฆฌ: ์์ฃผ ๊ธด ๋ฌธ์๋ ํ๋์ ๊ณ ํ์ง ๋ฒกํฐ๋ก ์์ฝํด ๋
๋๋ค.
โข RAG ์ต์ ํ: ์ง๋ฌธ(Query)๊ณผ ๋ฌธ์(Document) ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ ์ ๊ตํ๊ฒ ๋งค์นญํ๋๋ก ํ์ต๋์์ต๋๋ค.
LLM ๊ธฐ๋ฐ ์๋ฒ ๋ฉ ๋ชจ๋ธ (intfloat/multilingual-e5-large-instruct)
https://huggingface.co/intfloat/multilingual-e5-large-instruct
intfloat/multilingual-e5-large-instruct ยท Hugging Face
Weโre on a journey to advance and democratize artificial intelligence through open source and open science.
huggingface.co
์๋ฒ ๋ฉ ๋ชจ๋ธ - intfloat/multilingual-e5-large-instruct
๋ชจ๋ธ๋ช
: multilingual-e5-large-instruct
๊ฐ๋ฐ์ฌ: ๋ง์ดํฌ๋ก์ํํธ(MS) ์์ ๊ฐ๋ฐํ E5 (EmbEddings from Bidirectional Encoder Representations) ์๋ฆฌ์ฆ์ ๋ค๊ตญ์ด ๋ฒ์
์ฐธ๊ณ ๋
ผ๋ฌธ : https://arxiv.org/abs/2212.03533 <Text Embeddings by Weakly-Supervised Contrastive Pre-training> (2022)
1. ๋ชจ๋ธ์ ์ ์ฒด์ฑ ๋ฐ ๊ธฐ๋ฐ
๊ธฐ๋ฐ ๋ชจ๋ธ: xlm-roberta-large ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐํ
์ค๊ณ ๋ชฉ์ : 100๊ฐ ์ด์ ์ธ์ด ์ง์, ๋ค๊ตญ์ด ํ๊ฒฝ์์ ๊ฒ์ ์ฟผ๋ฆฌ์ ๋ฌธ์(passage) ๊ฐ์ ์ ์ฌ์ฑ์ ํ๊ฐํ๊ฑฐ๋, ๋ฌธ์ฅ์ ์๋ฏธ๋ฅผ ๋ฒกํฐ ๊ณต๊ฐ์ ๋งคํํ๋๋ฐ ์ต์ ํ๋จ.
๊ท๋ชจ:๋ ์ด์ด 24๊ฐ (Base: 12๊ฐ / Large: 24๊ฐ / ์ด๊ฑฐ๋ LLM: ๋ ์ด์ด 96๊ฐ ์ด์)
(๋ ์ด์ด๋ ๋๋์ ๊น์ด๋ฅผ ์๋ฏธํ๊ณ , ๋งค๊ฐ๋ณ์๋ ๋๋์ ์ฉ๋/์ง์์ ์์ ์๋ฏธ)
2. ํ์ต ๋จ๊ณ
1๋จ๊ณ (์ฌ์ ํ์ต): 10์ต ๊ฐ์ ๋ค๊ตญ์ด ํ
์คํธ ์์ ์ด์ฉํด ์ฝ์ง๋ ๋์กฐ ํ์ต(Weakly-supervised Contrastive Pre-training)์ ๊ฑฐ์ณค์ต๋๋ค.
2๋จ๊ณ (๋ฏธ์ธ ์กฐ์ ): E5-mistral ๋
ผ๋ฌธ์์ ์ฌ์ฉ๋ ๊ณ ํ์ง ๋ฐ์ดํฐ์
์ผ๋ก ์ง์์ด ํ๋(Fine-tuning)์ ์งํํ์ต๋๋ค.
3. ์ฌ์ฉ ๊ท์น : ์ง์์ด(Instruction)
์ง๋ฌธ(quury) : ๋ฐ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ๋ "์์
์ง์์ด" ๋ฅผ ํฌํจํด์ผํจ.
ex) "์น ๊ฒ์ ์ฟผ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ฉด, ์ง๋ฌธ์ ๋ตํ๋ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ฐพ์ผ์ธ์" ์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ง๋ฌธ ์์ ๋ถ์ฌ์ผ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ง์ ์ ์์.
*๊ธฐ์กด ์ฝ๋ ์์ ํจ (llm_project/app/services.py/ ํจ์ embed_query -> DEFAULT_INSTRUCT ์ถ๊ฐ)
def embed_query(text: str) -> List[float]:
"""์ง๋ฌธ ํ
์คํธ๋ฅผ ์๋ฒ ๋ฉ (E5 'query:' ์ ๋์ฌ ์ฌ์ฉ)"""
# PREFIX = getattr(settings, "EMBED_QUERY_PREFIX", "query: ")
# Instruct ๋ชจ๋ธ์ ๊ณต์ ๊ถ์ฅ ์ง์๋ฌธ ํ์
# settings์์ ๊ฐ์ ธ์ค๋, ์์ผ๋ฉด ๊ณต์ ์ธ์คํธ๋ญ์
์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํจ
DEFAULT_INSTRUCT = "Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery: "
PREFIX = getattr(settings, "EMBED_QUERY_PREFIX", DEFAULT_INSTRUCT)
try:
vec = services.embed_texts([PREFIX + text])[0]
return vec
except Exception as e:
print(f"[์ค๋ฅ] 'services.embed_texts' ํจ์ ์คํ ์คํจ: {e}")
sys.exit(1)
๋ฒกํฐ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ ์ ์ฌํ ๋ฒกํฐ๊ฐ์ ๋น ๋ฅด๊ณ , ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ.
- k-NN (k-์ต๊ทผ์ ์ด์): ์ ์์กฐ์ฌ ๋ฐฉ์ (์ ํ๋ 100%, ์๋ ๋๋ฆผ).
- ANN (๊ทผ์ฌ ์ต๊ทผ์ ์ด์): ์ง๋ฆ๊ธธ ์ฐพ๊ธฐ ๋ฐฉ์ (์ ํ๋์ ์๋์ ํํ).
- IVF (๋ฐฉ ๋๋๊ธฐ): ๊ณต๊ฐ์ ํด๋ฌ์คํฐ๋ก ๋๋์ด ํน์ ๊ตฌ์ญ๋ง ๊ฒ์.
- NSW (๊ฑฐ๋ฏธ์ค ํ์): ๋ฐ์ดํฐ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค์ ๊ธธ ์ฐพ๊ธฐ ๋ฐฉ์์ผ๋ก ๊ฒ์.
- HNSW (๊ณ์ธตํ ๊ฑฐ๋ฏธ์ค): NSW์ '๊ณ์ธต(Layer)' ๊ฐ๋
์ ๋์
ํ์ฌ ๊ณ ์๋๋ก์ฒ๋ผ ๋น ๋ฅด๊ฒ ์ด๋ํ ๋ค ์ ๋ฐ ํ์.
- ๋๋ถ๋ถ์ ๋ฒกํฐ DB ๋ ๊ฐ์ฅ ์งํ๋ ํํ์ธ HNSW ๋ฅผ ๊ธฐ๋ณธ์์ง์ผ๋ก ์ฑํํ๊ณ ์์.
'AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํผ์ ํธ๋ก (Perceptron) ์ด๋? (๋จ์ธต/๋ค์ธต ํผ์ ํธ๋ก ) (0) | 2026.02.27 |
|---|