안녕하세요.
안녕하세요. 모델 사용중에 질문이 있어서 남깁니다.
해당 모델로 sparse embedding을 해봤는데 len(values)가 14000정도가 나오는것을 확인했습니다.
이런 식으로 너무 많은 values가 0보다 크게 나오게 되면 dense vector를 사용하는 것보다 훨씬 많은 리소스를 사용하게 되어서 성능이 감소할 것 같은데 원래 이런 식으로 사용되는건지 확인할 수 있을까요?
chunk_size는 len으로 확인했을 때는 400이였습니다.
감사합니다.
안녕하세요. 우선 본 모델에 관심을 가져 주셔서 감사합니다.
결론부터 말씀드리면, 문의주신 많은 리소스 사용 현상은 Inference-free 모델의 의도된 설계가 맞습니다.
제가 SPLADE에 관해 작성한 글에서도 보실 수 있듯, Inference-free SPLADE는 Query Encoder 없이도 높은 성능을 내기 위해 Document의 term을 대폭 확장하여 저장하도록 설계되었습니다.
따라서 우려하신 대로 일반적인 Sparse 모델에 비해 Index(DB)의 용량을 더 많이 차지하게 됩니다. 이는 evaluation results표의 AVG_Corpus_Active_Dims 지표를 통해서도 확인하실 수 있습니다. (오른쪽으로 쭉 스크롤하시면 나옵니다.)
하지만 이 모델의 핵심 장점은 query가 입력되었을 때 모델의 Forward Pass(Inference) 과정 없이, 단순히 구축된 IDF Table 등을 lookup만 하면 되기 때문에 검색 속도가 비약적으로 빨라진다는 점입니다. 즉, 저장 공간을 희생하여 검색 속도를 극대화한 모델입니다.
사용 목적에 따라 아래와 같이 선택하시는 것을 추천해 드립니다.
- Storage 효율이 중요하고, 약간의 Inference Latency를 허용할 수 있다면: 일반 SPLADE 모델
- Storage 용량과 관계없이 검색 속도 최적화가 필요하다면: 현재 사용 중인 Inference-free SPLADE 모델
답변이 도움이 되었기를 바랍니다.
감사합니다.