의미론적 코드 검색 (Semantic code search)은 학계와 산업계 모두에서 널리 채택되어 왔습니다. 이러한 접근 방식은 자연어 쿼리 (natural-language queries)와 코드 스니펫 (code snippets)을 공유 임베딩 공간 (shared embedding space)에 임베딩하고 벡터 유사도 (vector similarity)를 기반으로 결과를 검색합니다. 벤치마크 데이터셋에서 강력한 성능을 보임에도 불구하고, 이러한 방식은 설명 가능성 (explainability)과 일반화 (generalization) 능력이 부족한 경우가 많습니다. 검색된 코드는 의미론적으로는 유사해 보일 수 있으나 쿼리의 핵심적인 기능적 요구사항 (functional requirements)을 놓칠 수 있으며, 결과가 왜 검색되었는지에 대한 설명을 제공하지 못합니다. 더욱이, 모델이 보지 못한 벤치마크에 일반화하기 어려워지는 분포 변화 (distribution shift) 상황에서는 이러한 실패가 더욱 심각해집니다.
본 연구에서는 본질적으로 설명 가능한 코드 검색 프레임워크인 XSearch를 제안합니다. 우리의 핵심 통찰은 기존의 검색기 (retrievers)가 전역 임베딩 유사성 (global embedding similarity)에 의존함으로써 본질적으로 귀납적 관점 (inductive view)을 취한다는 점입니다. 즉, 이들은 쿼리의 기능적 요구사항을 진정으로 이해하기보다는 통계적 패턴을 학습합니다. 우리는 코드 검색을 연역적 개념 정렬 (deductive concept alignment) 문제로 재정의함으로써 이 문제를 해결합니다. XSearch는 (i) 쿼리 내의 기능적 개념 (functional concepts)을 식별하고, (ii) 이를 대응하는 코드 문장 (code statements)과 명시적으로 정렬합니다. 이러한 '설명 후 예측 (explain-then-predict)' 설계는 내재적인 개념 수준의 설명을 생성하며, 분포 외 일반화 (out-of-distribution generalization)를 해치는 지름길 학습 (shortcut learning)을 완화합니다.
우리는 명시적인 개념 정렬 목적 함수 (concept-alignment objectives)를 사용하여 인코더 (encoder)를 학습시키며, 쿼리 개념과 코드 문장 사이의 명시적 매칭을 통해 검색을 수행합니다. 실험 결과, GraphCodeBERT (125M 파라미터)를 사용하여 CodeSearchNet 데이터셋으로 학습된 XSearch는 8개의 최첨단 (state-of-the-art) 검색기 대비 분포 외 (out-of-distribution) 벤치마크 성능을 0.02에서 0.33으로(15배) 향상시켰으며, 최대 7B 파라미터를 가진 인코더 및 디코더 기반 베이스라인 모델들을 일관되게 능가했습니다. 사용자 연구를 통해 개념 정렬 설명이 사용자로 하여금 검색된 결과를 더 빠르고 정확하게 평가할 수 있게 함을 입증했습니다.