Task
Auto completion은 기본적으로 코드 컨텍스트가 주어졌을때 다음으로 나올 코드 Sequence를 예측한다. 이때 max probability를 갖는 코드 Sequence 뿐만 아니라 다른 sequence들도 추천을 하게된다.
Recommendation Evaluation
Top-k Accuracy [1, 2] (* 는 Metric이 제안된 논문)
Top-k accuracy는 아래와 같이 정의되며 한개의 테스트 샘플에 대해서 추천한 예측들 중 정확히 동일한 추천이 있다면 카운팅한다. Q는 전체 테스트 샘플 수를 의미하며 N은 한개의 샘플에 대한 K개의 예측 중에 정답이 있던 샘플의 수이다.
Mean Reciprocal Rank (MRR) [1, 3, 4, 5, 6]
MRR은 모델의 예측중에서 정답을 맞췄을때 해당 예측의 순위를 반영한다. rank는 맞춘 예측의 순위이다. 후보가 없을 경우 0으로 계산한다.
Partial-matching MRR (PMRR) [4, 5*] in Query Auto-Completion (QAC)
QAC Task에서 모델을 평가하는 방법으로 쓰인다. QAC 문제는 단어의 일부 prefix가 주어졌을 때 나머지 부분을 완성하는 문제이다. 검색어 자동완성 정도로 생각할수 있다.
기존의 MRR은 정답과 Exact matching되는 후보에 대해서만 순위를 얻지만 QAC 문제의 특성상 스페이스가 포함되어 단어의 연속으로 이루어진 정답의 일부분을 예측하더라도 순위를 얻는다. 예를 들어 real estate 가 정답이고 가능한 candidate가 [1:real, 2:reals, 3:recipes, ...] 라면 이때 MRR에서는 후보안에 real estate는 없지만 real은 부분적으로 맞음을 인정한다. 따라서 이때 PRR은 1/1 이다. 후보가 없을 경우 0으로 계산한다.
아래 식에서 m은 평가대상인 모델을 말하며 Qtest는 테스트 데이터셋이다. q는 정답 쿼리이며 p는 쿼리의 일부분으로 모델에 인풋으로 들어가는 prefix이다. m(p)는 모델의 아웃풋으로 완성된 쿼리의 후보 리스트이다.
Perplexity (PP, PPL) [2, ]
낮을 수록 좋으며 내부 평가 지표로 별도의 ground truth가 필요하지 않다. perplexity가 10이면 의미적으로 10번안에 정답을 예측한다. 정도로 해석가능하다.
Other Evaluation
Mean Recoverable length (MRL) [4*, ] in QAC
RL은 정답 쿼리에서 오른쪽부터 왼쪽으로 문자를 한개씩 지우면서 모델의 인풋으로 넣어 아웃풋으로 쿼리 후보들을 예측했을 때 정답이 후보리스트에 없을때까지 지운 문자수에 + 1이다. 즉, 원래 쿼리로부터 많은 정보가 없더라도 잘 예측하면 MRL이 높다. 구체적으로 1개를 지웠을때는 모델이 정답쿼리를 포함한 후보들을 출력했고 2일때도 출력했으나 3개를 지웠을때 예측하지 못한다면 이때 RLm(q)는 2이다.
Applicability Evaluation
Model size: RAM consumption [3, ]
모델의 파라미터 개수로 측정하며 parameter의 데이터 타입을 고려한다. (float32, float16)
Execution Time: mainly at CPU [3, 4]
한번의 추천을 하기 위해서 걸리는 시간을 측정한다.
References
- PYTHIA: AI-ASSISTED CODE COMPLETION SYSTEM, KDD'19
- LEARNING PYTHON CODE SUGGESTION WITH A SPARSE POINTER NETWORK, ICLR'17
- Fast and Memory-Efficient Neural Code Completion, Arxiv'2004
- Subword Language Model for Query Auto-Completion, IJCNLP'19
- A Neural Language Model for Query Auto-Completion, SIGIR'17
- Personalized Language Model for Query Auto-Completion, ACL'18