# 쿼리나 결과를 보지 않고 검색 품질 개선하기

> Clean Markdown view of GeekNews topic #18061. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18061](https://news.hada.io/topic?id=18061)
- GeekNews Markdown: [https://news.hada.io/topic/18061.md](https://news.hada.io/topic/18061.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-12-02T10:46:02+09:00
- Updated: 2024-12-02T10:46:02+09:00
- Original source: [canva.dev](https://www.canva.dev/blog/engineering/how-to-improve-search-without-looking-at-queries-or-results/)
- Points: 9
- Comments: 0

## Summary

Canva는 사용자의 디자인 검색 문제를 해결하기 위해 생성형 AI를 활용하여 프라이버시를 침해하지 않는 합성 데이터를 생성하고, 이를 통해 검색 품질을 개선합니다. 기존의 제한적인 테스트 방식에서 벗어나 생성형 AI(GPT-4o 등)를 사용해 현실적이면서도 완전히 합성된 콘텐츠와 쿼리를 생성하고, 새로운 데이터셋과 평가 파이프라인을 구축하여 엔지니어가 변경 사항을 객관적으로 평가할 수 있도록 하며, 이를 통해 빠른 반복과 프로덕션 환경과 유사한 결과를 제공하는 것이 목표입니다.

## Topic Body

- Canva가 MAU 2억 명을 달성, 300억 개 이상의 디자인을 보유하고 있으며 매초 약 300개의 새로운 디자인을 생성  
  - 사용자가 디자인을 검색하고 공유받은 파일을 찾는 것은 점점 더 중요한 문제로 대두됨  
- 퍼블릭 검색(웹/제품 검색) 에서는 사용자 쿼리와 검색 항목의 고정 세트를 기반으로 데이터셋을 구성  
  - 전문 심사자가 각 쿼리와 항목의 연관성을 평가해 레이블 지정  
  - 리콜(Recall) 및 정밀도(Precision) 메트릭을 통해 검색 엔진 성능 평가  
- 개인 검색에서는 (프라이버시를 보호하기 위해) 개인 디자인을 열람하지 않고, 사용자의 데이터를 평가 데이터셋으로 활용할 수 없음  
  - 해결책으로 생성형 AI(GPT-4o 등)를 사용해 현실적이면서도 완전히 합성된 콘텐츠와 쿼리를 생성  
  - 개인정보를 전혀 침해하지 않으면서도 검색 파이프라인 개선을 평가할 수 있는 방법 제공  
  
### 기존 상태: 제한적인 테스트 방법  
  
- **기존 테스트 프로세스**  
  - 엔지니어는 제한된 오프라인 테스트 방식을 사용  
  - 알려진 문제 쿼리를 Canva 계정에서 실행하여 코드 변경 전후의 성능을 비교  
    - 예: 철자 교정 개선 작업에서 "desgin" 같은 잘못된 쿼리를 테스트  
      - 변경 전: 결과 없음  
      - 변경 후: "design" 관련 문서 반환  
  - 오프라인 테스트를 통과한 변경사항은 온라인 테스트 단계로 진행  
    - Canva의 실험 프레임워크를 활용한 A/B 테스트 실행  
    - 변경사항 적용 사용자와 표준 검색 사용자 간의 검색 성공률 비교  
- **한계점**  
  - **오프라인 테스트의 통계적 유효성 부족**  
    - 제한된 쿼리로는 다양한 검색 동작을 대표하기 어려움  
  - **사용자에게 잠재적 악영향**  
    - 오프라인 테스트에서 검출되지 않은 성능 저하가 온라인 실험에 노출될 가능성 존재  
  - **온라인 실험의 시간 소모**  
    - 통계적 유의성을 확보하려면 최소 수일에서 수주가 필요  
    - 동시 실행 가능한 실험 수와 아이디어 테스트 속도 제한  
  
### 이상적인 상태: 새로운 데이터셋과 평가 파이프라인 구축  
  
- **목표** : 엔지니어가 온라인 테스트로 넘어가기 전에 변경 사항을 객관적으로 평가할 수 있는 맞춤형 데이터셋과 평가 파이프라인 필요  
- 주요 요구사항:  
  - **재현성**: 언제든 동일한 결과 제공  
  - **빠른 반복**: 엔지니어가 코드 변경 후 결과를 신속히 테스트 가능. 프로덕션 배포까지 기다릴 필요 없이 바로 평가 가능   
  - **생산 환경과 유사**: 실제 프로덕션 동작과 일치하는 결과 제공  
  - **비차단적 작업**: 팀원이 서로 방해받지 않고 독립적으로 코드 변경 사항을 실험 가능  
  
### 현실적인 데이터셋 생성: 생성형 AI 활용  
  
- **프라이버시를 준수한 평가 데이터셋**  
  - GPT-4o를 사용해 실제 사용자 데이터를 대체할 수 있는 합성 데이터를 생성  
  - 사용자 디자인을 복제하지 않고, 텍스트 길이와 같은 통계적 분포를 반영하여 현실적인 데이터를 만듦  
- **리콜 평가용 테스트 케이스 생성**  
  - 주제와 디자인 타입(문서, 프레젠테이션 등)을 기반으로 GPT-4o를 사용해 쿼리 및 대응 콘텐츠 생성  
  - 쿼리 난이도 조정:  
    - 철자 오류 포함  
    - 동의어로 대체  
    - 쿼리를 재구성  
- **정밀도 평가용 테스트 케이스 생성**  
  - 관련성과 비관련성 디자인을 포함한 데이터셋 생성  
  - 비관련성 디자인 생성 방법:  
    - 일부 키워드만 포함  
    - 디자인 템플릿 또는 초안 형태로 수정  
    - 오래된 디자인으로 설정  
  
### 생성형 AI 사용 시 발생한 문제  
  
- **LLMs의 장점과 한계**  
  - **장점**: 대규모 텍스트 데이터를 효율적으로 생성 가능  
    - 생성된 정적 평가 데이터셋은 반복 사용 가능하며, 일관되고 결정적인 평가 결과를 빠르게 제공  
  - **한계 제거**: 데이터셋 생성 후에는 LLM의 지연(latency)과 무작위성(randomness) 문제를 배제  
- **문제점**  
  - **긴 제목 생성 거부**  
     - 12-15단어 길이의 제목을 생성하도록 요청했으나 더 짧은 제목 반환  
       - 예:  
         - "Exploring the Latest Advancements in Screen Technology and Applications" (9단어)  
         - "Best Practices for Teachers: Presentation Tips for Meet the Teacher" (10단어)  
     - 이 문제는 실제 문서에서 긴 제목이 드물다는 점을 반영한 것일 가능성이 있음  
     - 결과적으로 제목 길이에 대한 기준을 재검토하게 됨  
  - **반복 및 환각 오류**  
    - 단어의 다양한 철자 오류를 생성하도록 요청했으나 중복 또는 비현실적 결과 반환  
      - 예: "Calendar"의 다른 철자 오류 생성 요청 시 반복적 결과 생성  
  - **비관련성 제목 생성 문제**  
    - 비관련성(nonrelevant) 디자인 제목 생성 시 지침을 정확히 따르지 못하는 사례 발생  
    - 반환된 제목 중 일부는 지정된 키워드를 포함하지 않거나, 단순히 "title string"을 포함하는 등 부정확한 결과 반환  
  
### 평가 실행: 로컬 환경에서의 테스트와 분석  
  
- **평가 데이터셋 활용**  
  - 생성된 합성 데이터셋을 검색 파이프라인에 적용하여 평가 메트릭을 산출  
  - 여러 실행 방법을 탐구한 결과, Testcontainers를 활용한 로컬 실행 방식을 채택  
- **Testcontainers 기반 로컬 파이프라인**  
  - **기존 Testcontainer 지원 활용**  
    - Canva의 서비스 지향 RPC 아키텍처에 Testcontainer 지원이 이미 구현되어 있음  
    - Elasticsearch와 같은 외부 컴포넌트를 내부 Testcontainer와 결합하여 파이프라인 구축  
  - **프로덕션 설정의 완전한 재현**  
    - 검색 파이프라인 및 지원 ML 모델을 로컬에서 실행하여 프로덕션과 동일한 환경 구성  
    - 엔지니어가 다양한 모델 변형을 실험 가능  
- **테스트 케이스 처리 과정**  
  1. 각 테스트 케이스에 필요한 상태(state) 생성  
    - Canva 디자인을 생성하는 대신 검색 인덱스에 필요한 데이터만 추출 및 삽입  
  2. 로컬 검색 파이프라인 실행  
    - 테스트 쿼리와 함께 데이터셋을 실행하여 검색 결과 생성  
  3. 결과를 평가 모듈에 전달  
    - 리콜(Recall) 및 정밀도(Precision) 메트릭 계산  
- **데이터 흐름 다이어그램**  
  - 평가 도구를 통해 데이터를 처리하는 전체 흐름을 시각적으로 보여주는 다이어그램 제공  
  
### 결과 시각화하기   
  
- **시각화 도구 개발**  
  - **Streamlit 기반 커스텀 도구**를 사용하여 평가 결과를 효과적으로 시각화하고 비교할 수 있도록 지원  
  - 엔지니어가 다양한 구성(configurations) 간의 리콜(Recall) 및 정밀도(Precision) 메트릭을 한눈에 비교 가능  
- **주요 기능**  
  1. **구성별 비교**  
     - 결과를 집계하여 다양한 설정의 성능을 나란히 비교  
  2. **쿼리 유형 및 난이도별 성능 세분화**  
     - 특정 쿼리 타입이나 난이도에 따른 성능 분리 분석 가능  
  3. **개별 쿼리 디버깅**  
     - 각 쿼리의 출력 결과를 확인하여 특정 사용 사례를 정밀히 디버깅 가능  
- **빠른 의사결정 지원**  
  - 평가가 완료되면 도구가 즉시 실행되며, 엔지니어가 성능 결과를 기반으로 신속히 의사결정을 내릴 수 있도록 도움  
  - 엔지니어가 다른 팀원의 작업에 의존하지 않고 독립적으로 반복 실험 및 개선 가능  
  
### 영향 및 향후 계획  
  
- **이상적인 상태에 얼마나 근접했는가?**  
  - 평가 데이터셋과 도구는 **완전한 재현 가능성**을 제공하며, 몇 분 내로 결과를 생성  
  - 엔지니어는 **현지(production) 동작과 일치하는** 결과를 로컬에서 독립적이고 객관적으로 평가 가능  
  - 고객의 디자인이나 쿼리를 전혀 열람하지 않고 프라이버시를 완벽히 보장  
- **성과 요약**  
  1. **빠른 반복**  
    - 1000개 이상의 테스트 케이스를 10분 이내에 처리  
    - 2~3일이 걸리는 온라인 실험 기간 동안 300회 이상의 오프라인 평가 가능  
  2. **오프라인-온라인 결과의 상관관계**  
    - 오프라인 평가 결과는 부적합한 아이디어를 배제하고 성공 가능성이 높은 변경사항만 온라인 실험으로 진행 가능하도록 설계  
    - 개발 중 오프라인-온라인 결과 간의 동기화를 확인하는 여러 실험 수행  
    - 성능 긍정적 또는 부정적 변경 모두 강력한 일치성 확인  
  3. **로컬 디버깅 기능**  
    - 검색 파이프라인의 각 컴포넌트를 통한 테스트 케이스 흐름을 관찰할 수 있는 디버깅 지원  
    - 기존 프로덕션 로그에 의존했던 디버깅 방식보다 훨씬 효율적  
- **향후 계획**  
  - **데이터셋 확장**  
    - 협업 그래프와 같은 더 현실적인 기능 추가  
  - **도구 개선**  
    - 엔지니어가 필요에 따라 맞춤형 합성 데이터를 생성할 수 있도록 툴링 강화  
  - **생성형 AI 활용 극대화**  
    - 합성 데이터가 제공하는 가능성을 활용하여 Canva의 검색 도구를 커뮤니티에 최적의 경험으로 발전시키는 목표 지속

## Comments



_No public comments on this page._
