이론공부/딥러닝

Dense / Multi-Vector / Lexical retrieval

넹넹선생님 2025. 3. 14. 11:02
728x90
반응형

Retrieval 방식( Dense / Multi-Vector / Lexical)이 수식적으로는 어떻게 표현되는지 간단히 보여드리겠습니다. 설명을 위해 예시 문장을 “The cat sat on the mat.” 로 잡았습니다.


1. Dense Retrieval

핵심 개념

  • 입력 문장(쿼리든 문서든)을 하나의 벡터로 요약(임베딩)한 뒤, 그 벡터들 간의 유사도(점곱, 코사인 등)를 구해 점수가 높은 순으로 검색하는 방식입니다.

예시 & 수식

  1. 토큰화 & Transformer 출력
    • 문장 S=\text{S} = "The cat sat on the mat."
    • 이를 BERT 계열 모델(BGE-M3 등)에 입력하면, 마지막 레이어에서 각 토큰마다 hi∈Rd\mathbf{h}_i \in \mathbb{R}^d (차원 dd)의 벡터가 나옵니다.
    • 전체를 묶어 H=[h1,h2,…,hn]\mathbf{H} = [\mathbf{h}_1, \mathbf{h}_2, \dots, \mathbf{h}_n] 라고 할 수 있습니다.
  2. 단일 임베딩 만들기 (Mean Pooling 예시)v  =  1n∑i=1nhi∈Rd \mathbf{v} \;=\; \frac{1}{n} \sum_{i=1}^{n} \mathbf{h}_i \quad \in \mathbb{R}^d
    • 즉, 문장 전체를 대표하는 하나의 벡터 v\mathbf{v}를 얻는 거죠(이 과정을 Dense Embedding이라고 부름).
    • ([CLS]\text{[CLS]} 토큰 벡터를 사용하는 등의 다른 방법도 있으나, 개념은 비슷합니다.)
  3. 문서 대 문서(혹은 쿼리 대 문서) 유사도
    • 쿼리(질의) 문장과 문서 각각을 위 방식으로 q,p\mathbf{q}, \mathbf{p}라는 단일 벡터로 만든 뒤, s(q,p)  =  q⊤p(또는 Cosine Similarity) s(\mathbf{q}, \mathbf{p}) \;=\; \mathbf{q}^\top \mathbf{p} \quad \text{(또는 Cosine Similarity)}
    • 이렇게 스칼라값을 얻고, 그 값이 클수록 두 문장이 의미적으로 유사하다고 판단하여 검색 순위를 매깁니다.

2. Multi-Vector Retrieval

핵심 개념

  • 문장(쿼리/문서)을 여러 개의 벡터(보통 토큰 단위)로 유지하면서 검색에 활용합니다.
  • 모든 토큰 벡터 쌍을 비교해 최종 점수를 산출(max, 평균, 합 등).

예시 & 수식

  1. 토큰 단위 벡터 유지
    • “The cat sat on the mat.” → 토큰이 6개라고 하면, 모델 마지막 레이어에서 나온 h1,h2,…,h6\mathbf{h}_1, \mathbf{h}_2, \dots, \mathbf{h}_6를 그대로 사용.
    • 즉, 이 문장 자체가 {h1,h2,…,h6}\{\mathbf{h}_1, \mathbf{h}_2, \dots, \mathbf{h}_6\}라는 6개 벡터로 표현됨.
  2. 토큰-토큰 유사도 계산
    • 문서(혹은 다른 문장)도 토큰별로 {p1,p2,…,pm}\{\mathbf{p}_1, \mathbf{p}_2, \dots, \mathbf{p}_m\}라고 할 때,
    • 토큰 쌍별 유사도: s(hi,pj)  =  hi⊤pj(혹은 코사인 유사도) s(\mathbf{h}_i, \mathbf{p}_j) \;=\; \mathbf{h}_i^\top \mathbf{p}_j \quad (\text{혹은 코사인 유사도})
  3. 최종 점수 집계
    • 여러 가지 방식이 있지만, 예를 들어 최대 매칭을 취하는 식이면: s(문장1,문장2)  =  max⁡i,j(hi⊤pj) s(\text{문장}_1, \text{문장}_2) \;=\; \max_{i, j}\Big(\mathbf{h}_i^\top \mathbf{p}_j\Big)
      • 즉, 두 문장 간 가장 유사한 토큰 쌍을 찾아 그 유사도만 대표값으로 삼는 경우.
    • 혹은 각 토큰에 대해 최고 유사도를 구한 뒤 합/평균을 낼 수도 있습니다. 예: s(문장1,문장2)  =  ∑i=1nmax⁡1≤j≤m(hi⊤pj) s(\text{문장}_1, \text{문장}_2) \;=\; \sum_{i=1}^{n} \max_{1 \le j \le m} \Big(\mathbf{h}_i^\top \mathbf{p}_j\Big)
    • 이렇게 토큰 레벨에서 더 세밀한 매칭을 하기 때문에, Dense Retrieval보다 정밀하게 문맥을 비교할 수 있다는 장점이 있습니다(대신 계산량이 많아짐).

728x90

 

3. Lexical Retrieval

핵심 개념

  • 전통적인 키워드 기반 검색으로, “토큰(단어)의 정확한 일치”와 해당 단어의 빈도/가중치(TF-IDF, BM25 등)에 따라 스코어를 매긴 후 정렬합니다.

예시 & 수식

  1. 문장 토큰
    • “The cat sat on the mat.” → (불용어 제거/소문자화/스테밍 등 단순화하면) {“cat”, “sat”, “mat”} 정도로 추려진다고 합시다.
  2. 전통적 TF-IDF
    • TF(문서 내 단어 빈도), IDF(전체 문서 중 해당 단어 등장 비율 역수) 등을 이용해, score(query,doc)  =  ∑w∈query(TF(w,doc)  ×  log⁡NDF(w)) \text{score}(\text{query}, \text{doc}) \;=\; \sum_{w \in \text{query}} \Big( \text{TF}(w, \text{doc}) \;\times\; \log \frac{N}{\text{DF}(w)} \Big)
      • NN: 전체 문서 수, DF(w)\text{DF}(w): 단어 ww를 포함하는 문서 수.
  3. BM25 (TF-IDF를 발전시킨 대표 모델)
    • BM25 공식은 조금 더 복잡하지만, 원리는 “쿼리와 문서가 공유하는 단어가 많고, 그 단어가 문서에서 중요한(자주 등장하지만 전체적으로는 희귀한) 단어일수록 점수↑”.
    • 예: s(query,doc)=∑w∈queryIDF(w)  ⋅  tf(w,doc)⋅(k+1)tf(w,doc)+k(1−b+b⋅∣D∣avgdl) s(\text{query}, \text{doc}) = \sum_{w \in \text{query}} \text{IDF}(w)\;\cdot\; \frac{\text{tf}(w,\text{doc}) \cdot (k+1)}{\text{tf}(w,\text{doc}) + k\left(1-b + b \cdot \frac{|D|}{\text{avgdl}}\right)}
    • 위 식에서 k,bk, b는 하이퍼파라미터, ∣D∣|D|는 문서 길이, avgdl\text{avgdl}은 평균 문서 길이 등등.

정리하자면, Lexical Retrieval는 **“정확히 일치하는 토큰”**을 기준으로 스코어를 매기고, Dense / Multi-Vector는 **“의미적 유사도(벡터 간 거리)”**를 통해 스코어를 매긴다는 차이가 있습니다.


한눈에 정리

  • Dense 문장→[h1,…,hn]→Poolingv⟹s(q,p)=q⊤p \text{문장} \to [\mathbf{h}_1,\dots,\mathbf{h}_n] \xrightarrow{\text{Pooling}} \mathbf{v} \quad\Longrightarrow\quad s(\mathbf{q}, \mathbf{p}) = \mathbf{q}^\top \mathbf{p}
  • Multi-Vector 문장→[h1,…,hn]⟹s(q,p)=∑i=1nmax⁡j(hi⊤pj)  (예시) \text{문장} \to [\mathbf{h}_1,\dots,\mathbf{h}_n] \quad\Longrightarrow\quad s(\mathbf{q}, \mathbf{p}) = \sum_{i=1}^{n} \max_{j}\big(\mathbf{h}_i^\top \mathbf{p}_j\big) \;\text{(예시)}
  • Lexical s(query,doc)=∑w∈queryWeight(w,doc)(TF-IDF, BM25 등) s(\text{query},\text{doc}) = \sum_{w \in \text{query}} \text{Weight}(w,\text{doc}) \quad(\text{TF-IDF, BM25 등})

이렇게 같은 문장도 어떤 방식으로 “벡터/토큰을 처리”하고, “어떻게 스코어를 계산하느냐”에 따라 Dense / Multi-Vector / Lexical Retrieval로 나뉘게 됩니다.

728x90
반응형

'이론공부 > 딥러닝' 카테고리의 다른 글

SBERT  (0) 2024.05.03
어텐션, Attention  (0) 2024.05.03
관계 추출 모델: Transformer  (0) 2024.05.03
Attention, Self-Attention  (1) 2024.05.03
t-SNE  (0) 2022.11.15