---
id: [[P-Reinforce|P-Reinforce]]-AUTO-KWS-001
category: Computer_Science_and_Theory
confidence_score: 1.00
tags: [auto-reinforced, keyword-search, bm25, tf-idf, information-retrieval, lexical-search]
last_reinforced: 2026-05-04
---

# [[Keyword Search|Keyword Search]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "검색의 고전이자 기준점: 사용자가 입력한 단어가 문서 내에 정확히 존재하는지를 기반으로 관련성을 측정하며, 고유 명사나 특정 식별자를 찾는 데 가장 강력한 성능을 발휘하는 텍스트 매칭 기법."

## 📖 구조화된 지식 (Synthesized Content)
키워드 검색(Keyword Search) 또는 어휘 검색(Lexical Search)은 문서 내의 텍스트 토큰과 검색어 간의 직접적인 일치 여부를 따지는 정보 검색의 가장 기본적인 방식입니다.

1.  **핵심 알고리즘**:
    *   **[[TF-IDF|TF-IDF]] (Term Frequency-Inverse Document Frequency)**: 단어가 문서 내에서 얼마나 자주 등장하는지(TF)와 전체 문서 집합에서 얼마나 희귀한지(IDF)를 곱해 중요도를 계산합니다.
    *   **[[BM25|BM25]] (Best Matching 25)**: TF-IDF의 한계를 보완(단어 빈도의 포화도 조절, 문서 길이 정규화 등)하여 현대 검색 엔진에서 가장 널리 쓰이는 표준 알고리즘입니다.

2.  **데이터 구조: [[Inverted Index|Inverted Index]]**:
    *   책 뒤의 색인처럼, 각 단어가 어떤 문서들에 포함되어 있는지를 미리 리스트업해두어 검색 속도를 극대화합니다.

3.  **장점 및 활용**:
    *   **정확한 일치 (Exact Match)**: 에러 코드, 제품 번호, 인명이 포함된 검색에서 탁월합니다.
    *   **예측 가능성**: 왜 이 문서가 검색되었는지(단어가 포함되어 있으므로) 논리적으로 명확히 설명할 수 있습니다.
    *   **저비용 고효율**: 벡터 검색에 비해 컴퓨팅 자원을 훨씬 적게 사용합니다.

## ⚖️ Trade-offs & Caveats
*   **어휘적 한계 (Vocabulary Mismatch)**: 사용자가 '컴퓨터'를 검색할 때 문서에 'PC'라고 적혀 있다면 검색 결과에서 누락됩니다.
*   **문맥 무시**: 단어의 순서나 의미적 맥락을 고려하지 못해 중의적인 표현을 처리하기 어렵습니다.
*   **검색 정교화의 어려움**: 복잡한 자연어 질문에 대해서는 관련성 낮은 결과를 반환할 확률이 높습니다.

## 💻 실전 구현 코드 (Boilerplate)
Python `rank_bm25` 라이브러리를 사용한 기본적인 키워드 랭킹 구현 예시입니다.

```python
from rank_bm25 import BM25Okapi

# 1. 말뭉치(Corpus) 준비 및 토큰화
corpus = [
    "Astra engine provides autonomous knowledge reinforcement.",
    "P-Reinforce protocol standardizes wiki documentation.",
    "ConnectAI handles multi-agent orchestration flows."
]
tokenized_corpus = [doc.split(" ") for doc in corpus]

# 2. BM25 인덱스 생성
bm25 = BM25Okapi(tokenized_corpus)

# 3. 질의 처리 및 검색
query = "autonomous engine"
tokenized_query = query.split(" ")

# 4. 관련성 점수 도출 및 상위 결과 획득
doc_scores = bm25.get_scores(tokenized_query)
top_n = bm25.get_top_n(tokenized_query, corpus, n=1)

print(f"Query: {query}")
print(f"Best Match: {top_n[0]}")
```

## 🔗 지식 연결 (Graph)
*   **상위 개념**: [[Information Retrieval (IR)|Information Retrieval (IR)]], [[Computer Science and Theory|Computer Science]]
*   **대칭 개념**: [[Semantic Search|Semantic Search]]
*   **통합 기법**: [[Hybrid Search|Hybrid Search]]

---
*Last updated: 2026-05-04*
