소소한 컴퓨터 이야기

Bi-encoder, Cross-encoder, Poly-encoder (이론)

by Cori

⊙ 해당 포스팅은 다른 분들이 작성한 내용을 최소한으로 요약 정리한 포스팅입니다.
⊙ 보다 자세한 내용 (수식 등)을 알고 싶으신 분들은 맨 아래 페이지의 참고 자료에 있는 사이트들을 참고해주세요.


0. Bi-encoder & Cross-encoder

- pairwise comparison task 문제를 해결하기 위한 인코더
- 다음에 올 문장을 예측하는 등의 작업에 사용됨
- 두 인코더 모두 Cross-Entropy Loss를 최소화도록 학습함


1) Bi-encoder

Context Encoder와 Candidate Encoder가 각각 context 문장과 해당 context 문장 다음에 올 후보 문장을 인코딩함

Bi-encoder 모델 구조

인코딩 결과로 Context Embedding(ctxt Emb), Candidate Embedding(Cand Emb)을 얻을 수 있음
두 벡터(Ctxt Emb, Cand Emb)의 내적 연산(dot-product)을 통해 다음에 올 후보 문장으로 적절한가에 대한 점수를 계산함
두 문장을 독립적으로 인코딩하는 구조 -> 미리 후보 문장들을 인코딩해서 문장별 Candidate Embedding 값을 계산해 둘 수 있음

 

2) Bi-encoder 장·단점

장점

- 추론 시 후보 문장이 아무리 많아도 (수백, 수천 만개) 후보 문장들을 미리 인코딩해 둘 수 있어 실제 추론 속도가 상당히 빠름

 

단점

- Context 문장과 Candidate 문장의 관계를 전혀 고려하지 않기 때문에, 정확도가 상당히 떨어짐

 

3) Cross-encoder

일반적인 BERT 방법론과 유사하며, Context 문장과 Candidate 문장을 이어 붙여서 인코딩함

Cross-encoder 모델 구조

인코딩 과정에서 context 문장과 candidate 문장의 self-attention 연산을 적용할 수 있으며, 인코더의 모든 계층에서 해당 연산 진행 인코더의 출력 값을 하나의 Cand Emb으로 취합하고, 이후 regression 연산을 적용하여 다음 문장으로 적절한 지에 대해 점수를 계산

 

4) Cross-encoder 장·단점

장점

- Bi-encoder와 달리 인코딩 과정에서 self-attention 연산을 수행할 수 있음

- Context 문장과 Candidate 문장 간의 관계를 훨씬 잘 파악함

 

단점

- Context와 Candidate 쌍이 주어져야 계산을 수행함 

- 메모리 상에 아무리 많은 Candidate 문장이 존재해도 Context 문장이 주어지지 않으면 무용지물

 

* Query를 통해 Context 문장이 들어오면 그때부터 Context와 각 Candidate를 쌍으로 인코딩하여 다음에 올 문장으로 적절한 지 계산 (하나의 Query 처리를 위해 수백, 수천만 번의 inference를 진행.. 엄청나게 느린 속도로 인해 실무에서는 거의 사용되지 않음)

 

1. Poly-encoder

- Bi-encoder 단점과, Cross-encoder의 단점을 보완하기 위해 등장한 인코더 (실무에서는 주로 poly-encoder 사용)
- Bi-encoder의 구조와 전체적으로 비슷하지만, Context Encoder 부분에서 약간의 차이가 있음

Poly-encoder는 Context Encoder의 출력 값과 Code vector와의 어텐션 연산을 수행하고, 이를 통해 여러 개의 벡터를 생성함 (Code vector는 일종의 latent 변수에 해당하며, 생성 시 랜덤하게 초기화 된 후 학습을 진행함에 따라 값이 업데이트 됨) 여기서 적용한 Attention 연산은 Self-attention으로, 모델 Output[0] 값을 Key, Value로 보고, Code를 Query로 보면 됨


이를 통해 얻어진 벡터들(Emb1 ~ Embm)에 대해 최종적으로 Cand emb와의 어텐션을 수행하고, Ctxt Emb 값을 구함. 이후 Ctxt Emb와 Cand Emb의 내적을 통해 최종 Score를 계산 

장점

- Bi-encoder와는 달리 attention 연산을 통해 Context 문장과 Candidate 문장 간의 관계를 보다 깊게 파악할 수 있음
- Context 문장과 Candidate 문장이 독립적으로 인코더를 거침

- Candidate Embedding을 미리 계산할 수 있어 추론 속도가 빠름

 

♣ 참고 자료

https://roomylee.github.io/poly-encoder/
https://velog.io/@aqaqsubin/Poly-Encoder

블로그의 정보

코딩하는 오리

Cori

활동하기