임베딩을 줄이는 두 가지 방법: Matryoshka vs PCA
Honey, I shrunk the embeddings: Matryoshka vs. PCA

LLM을 자체 문서에 적용하면서 효율적인 저장과 검색이 중요해졌고, 벡터 데이터베이스가 표준 솔루션으로 자리 잡았다. 하지만 수천 차원의 벡터를 수백만 개 저장하면 검색이 느리고 비용이 커진다. OpenAI와 Cohere는 Matryoshka Representation Learning(MRL)을 도입해 차원을 줄이면서도 정확도를 유지하는 방법을 제시했다. 이 글에서는 MRL 기반 절단(truncation)과 PCA를 8개 BEIR 데이터셋에서 비교했다. 그 결과, PCA가 대부분의 차원에서 MRL 절단과 맞먹거나 더 나은 성능을 보였고, 특히 32차원에서 text-embedding-3-small의 경우 PCA가 65%의 성능을 유지한 반면 MRL 절단은 46%에 그쳤다. 또한 PCA는 MRL 학습이 되지 않은 모델에도 적용 가능하며, 학습 데이터 크기나 도메인 차이의 영향이 생각보다 작았다.
PCA는 MRL 학습이 되지 않은 모델에서도 MRL 학습 모델의 절단보다 더 나은 성능을 보였다 (32차원에서 59% vs 46%).
HN 토론
19- hanneshdc
좋은 벤치마크네요!
> 양자화를 절단(truncation)이나 PCA와 결합하면 더욱 줄일 수 있습니다. 결과 벡터는 훨씬 작아지면서도 놀라울 정도로 검색 품질을 유지할 수 있습니다.
직관에 반하지만, 양자화는 양자화 전에 무작위 회전 단계와 결합할 수도 있습니다. 무작위 회전은 정보를 더 많은 차원에 분산시켜 정확도를 잃지 않으면서 더 공격적인 양자화를 가능하게 합니다. 아이러니하게도 PCA와는 거의 반대입니다.
여기서 관련이 있는지 궁금하네요. 이는 임베딩에 "구조"가 있다는 것, 즉 주성분이 기저 벡터를 따라 있다는 것에 의존하는데, 텍스트 임베딩에서는 그렇지 않을 수 있습니다.
출처: https://research.google/blog/turboquant-redefining-ai-effici...
- stephantul
좋네요! 저도 비슷한 작업을 해왔고 비슷한 결과를 얻었습니다.
제 실험에서는 많은 임베딩 모델을 사용했는데 결과가 이 곡선만큼 균일하지는 않았습니다. 참고로 저는 API 기반 모델은 사용하지 않았습니다.
또한 정적 모델을 양자화할 때 PCA와 MRL을 사용한 정확한 비교에 대해서도 글을 썼습니다. 참조: https://stephantul.github.io/blog/mrl-pca/
- purplemoonx
여러 접두사 길이에서 손실을 한 번에 적용하여 모델을 훈련합니다: 처음 64차원, 처음 128차원 등. 이렇게 하면 마치 중첩된 마트료시카 인형처럼 가장 중요한 정보를 벡터의 시작 부분에 담도록 가르칩니다.
실험에서 보이는 것처럼 잘 작동한다면 정말 흥미롭습니다. 예를 들어, Seam Carving이나 Inpainting과 같은 고전적인 이미지 크기 조정 알고리즘과 비교하면 어떨까요: https://en.wikipedia.org/wiki/Seam_carving, https://en.wikipedia.org/wiki/Inpainting
(비교할 수 있을까요?)
압축/손실, 그리고 그 반대인 확대와 과도한 평활화는 매혹적입니다. 그 분야에서 아주 작은 혁신이라도 일어나면 다른 모든 기술이 하룻밤 사이에 개선되고, 새로운 기술들이 가능해지기 때문입니다.