--- id: [[P-Reinforce|P-Reinforce]]-AUTO-SMS-001 category: AI_and_ML confidence_score: 1.00 tags: [auto-reinforced, semantic-search, vector-search, nlp, bert, llm] last_reinforced: 2026-05-04 --- # [[Semantic Search|Semantic Search]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "단어λ₯Ό λ„˜μ–΄μ„  μ˜λ„μ˜ 검색: μ‚¬μš©μžκ°€ μž…λ ₯ν•œ ν‚€μ›Œλ“œμ˜ λ‹¨μˆœ 일치 μ—¬λΆ€κ°€ μ•„λ‹ˆλΌ, κ·Έ 뒀에 μˆ¨κ²¨μ§„ '의미(Semantics)'와 'λ¬Έλ§₯(Context)'을 μ΄ν•΄ν•˜μ—¬ κ°€μž₯ μ ν•©ν•œ 정보λ₯Ό μ°Ύμ•„λ‚΄λŠ” μ°¨μ„ΈλŒ€ 검색 기술." ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) 의미둠적 검색(Semantic Search)은 μžμ—°μ–΄ 처리(NLP)와 λ¨Έμ‹ λŸ¬λ‹ μ•Œκ³ λ¦¬μ¦˜μ„ ν™œμš©ν•˜μ—¬ 단어 κ°„μ˜ 관계와 질문의 μ˜λ„λ₯Ό νŒŒμ•…ν•˜λŠ” 검색 λ°©μ‹μž…λ‹ˆλ‹€. 1. **λ™μž‘ 원리 (How it works)**: * **μ˜λ„ νŒŒμ•… (Intent Recognition)**: 질문이 정보λ₯Ό μ°ΎλŠ” 것인지, ꡬ맀λ₯Ό μœ„ν•œ 것인지, νŠΉμ • μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•˜λ €λŠ” 것인지 λΆ„μ„ν•©λ‹ˆλ‹€. * **λ¬Έλ§₯ 이해 (Contextual Awareness)**: '사과'κ°€ 과일인지 λΈŒλžœλ“œμΈμ§€ μ£Όλ³€ 단어λ₯Ό 톡해 νŒλ‹¨ν•©λ‹ˆλ‹€. * **벑터 λ³€ν™˜**: 질문과 λ¬Έμ„œλ₯Ό [[Vector Embedding|Vector Embedding]]으둜 λ³€ν™˜ν•˜μ—¬ μˆ˜ν•™μ  거리 기반의 [[Vector Search|Vector Search]]λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. 2. **핡심 기술**: * **[[BERT|BERT]] / Transformer**: μ–‘λ°©ν–₯ λ¬Έλ§₯ 이해λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜μ—¬ 검색 ν’ˆμ§ˆμ„ ν˜μ‹ ν•œ λ”₯λŸ¬λ‹ λͺ¨λΈμž…λ‹ˆλ‹€. * **Knowledge Graph**: μ—”ν‹°ν‹°(인물, μž₯μ†Œ, κ°œλ… λ“±) κ°„μ˜ 관계λ₯Ό κ΅¬μ‘°ν™”ν•˜μ—¬ μ§€λŠ₯적인 닡변을 μ œκ³΅ν•©λ‹ˆλ‹€. * **Dense Retrieval**: ν‚€μ›Œλ“œ 맀칭이 μ•„λ‹Œ 벑터 κ³΅κ°„μ—μ„œμ˜ κ·Όμ ‘μ„± 검색을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 3. **이점 (Benefits)**: * λ™μ˜μ–΄ 및 μœ μ˜μ–΄ 처리 λŠ₯λ ₯이 νƒμ›”ν•©λ‹ˆλ‹€. * μžμ—°μ–΄ ν˜•νƒœμ˜ κΈ΄ 질문(Long-tail Query)에 맀우 κ°•ν•©λ‹ˆλ‹€. * μ˜€νƒ€λ‚˜ λΆ€μ •ν™•ν•œ ν‘œν˜„μ—λ„ μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•©λ‹ˆλ‹€. ## βš–οΈ Trade-offs & Caveats * **μ»΄ν“¨νŒ… λΉ„μš©**: λ”₯λŸ¬λ‹ λͺ¨λΈ μΆ”λ‘ κ³Ό 벑터 μ—°μ‚°μœΌλ‘œ 인해 전톡적 검색보닀 훨씬 λ§Žμ€ μ—°μ‚° μžμ›μ΄ ν•„μš”ν•©λ‹ˆλ‹€. * **고유 λͺ…사 μ·¨μ•½μ„±**: μ œν’ˆ μ‹œλ¦¬μ–Ό λ²ˆν˜Έλ‚˜ 특수 μ½”λ“œμ™€ 같은 'μ •ν™•ν•œ 일치'κ°€ ν•„μš”ν•œ λ°μ΄ν„°μ—μ„œλŠ” 였히렀 μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. * **λΈ”λž™λ°•μŠ€ 문제**: νŠΉμ • κ²°κ³Όκ°€ μ™œ 상단에 λ…ΈμΆœλ˜μ—ˆλŠ”μ§€ λ…Όλ¦¬μ μœΌλ‘œ μ„€λͺ…ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. ## πŸ’» μ‹€μ „ κ΅¬ν˜„ μ½”λ“œ (Boilerplate) `sentence-transformers`λ₯Ό ν™œμš©ν•˜μ—¬ 의미둠적 μœ μ‚¬λ„λ₯Ό 기반으둜 검색을 μˆ˜ν–‰ν•˜λŠ” 기초 μ˜ˆμ‹œμž…λ‹ˆλ‹€. ```python from sentence_transformers import SentenceTransformer, util # 1. λͺ¨λΈ λ‘œλ“œ (λ‹€κ΅­μ–΄ 지원) model = SentenceTransformer('jhgan/ko-sroberta-multilingual') # 2. 지식 베이슀 μ •μ˜ docs = [ "인곡지λŠ₯ μ—μ΄μ „νŠΈλŠ” 자율적으둜 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.", "둜컬 LLM은 데이터 ν”„λΌμ΄λ²„μ‹œ λ³΄ν˜Έμ— μœ λ¦¬ν•©λ‹ˆλ‹€.", "μ˜΅μ‹œλ””μ–Έμ€ κ°•λ ₯ν•œ λ…ΈνŠΈ μ—°κ²° κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€." ] doc_embeddings = model.encode(docs) # 3. μ‚¬μš©μž 질의 처리 query = "λ‚˜μ˜ 지식을 μ™ΈλΆ€λ‘œ μœ μΆœν•˜μ§€ μ•Šκ³  AIλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άμ–΄." query_embedding = model.encode(query) # 4. 의미둠적 μœ μ‚¬λ„ 검색 hits = util.semantic_search(query_embedding, doc_embeddings, top_k=1) best_idx = hits[0][0]['corpus_id'] print(f"Query: {query}") print(f"Top Semantic Result: {docs[best_idx]} (Score: {hits[0][0]['score']:.4f})") ``` ## πŸ”— 지식 μ—°κ²° (Graph) * **μƒμœ„ κ°œλ…**: [[Information Retrieval (IR)|Information Retrieval (IR)]], [[Natural Language Processing (NLP)|NLP]] * **기반 기술**: [[Vector Embedding|Vector Embedding]], [[Vector Search|Vector Search]], [[BERT|BERT]] * **보완 기술**: [[Hybrid Search|Hybrid Search]] (Keyword + Semantic) --- *Last updated: 2026-05-04*