9P by xguru 10일전 | favorite | 댓글과 토론
  • 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 디자인을 생성하는 대신 검색 인덱스에 필요한 데이터만 추출 및 삽입
    1. 로컬 검색 파이프라인 실행
    • 테스트 쿼리와 함께 데이터셋을 실행하여 검색 결과 생성
    1. 결과를 평가 모듈에 전달
    • 리콜(Recall) 및 정밀도(Precision) 메트릭 계산
  • 데이터 흐름 다이어그램
    • 평가 도구를 통해 데이터를 처리하는 전체 흐름을 시각적으로 보여주는 다이어그램 제공

결과 시각화하기

  • 시각화 도구 개발
    • Streamlit 기반 커스텀 도구를 사용하여 평가 결과를 효과적으로 시각화하고 비교할 수 있도록 지원
    • 엔지니어가 다양한 구성(configurations) 간의 리콜(Recall) 및 정밀도(Precision) 메트릭을 한눈에 비교 가능
  • 주요 기능
    1. 구성별 비교
      • 결과를 집계하여 다양한 설정의 성능을 나란히 비교
    2. 쿼리 유형 및 난이도별 성능 세분화
      • 특정 쿼리 타입이나 난이도에 따른 성능 분리 분석 가능
    3. 개별 쿼리 디버깅
      • 각 쿼리의 출력 결과를 확인하여 특정 사용 사례를 정밀히 디버깅 가능
  • 빠른 의사결정 지원
    • 평가가 완료되면 도구가 즉시 실행되며, 엔지니어가 성능 결과를 기반으로 신속히 의사결정을 내릴 수 있도록 도움
    • 엔지니어가 다른 팀원의 작업에 의존하지 않고 독립적으로 반복 실험 및 개선 가능

영향 및 향후 계획

  • 이상적인 상태에 얼마나 근접했는가?
    • 평가 데이터셋과 도구는 완전한 재현 가능성을 제공하며, 몇 분 내로 결과를 생성
    • 엔지니어는 현지(production) 동작과 일치하는 결과를 로컬에서 독립적이고 객관적으로 평가 가능
    • 고객의 디자인이나 쿼리를 전혀 열람하지 않고 프라이버시를 완벽히 보장
  • 성과 요약
    1. 빠른 반복
    • 1000개 이상의 테스트 케이스를 10분 이내에 처리
    • 2~3일이 걸리는 온라인 실험 기간 동안 300회 이상의 오프라인 평가 가능
    1. 오프라인-온라인 결과의 상관관계
    • 오프라인 평가 결과는 부적합한 아이디어를 배제하고 성공 가능성이 높은 변경사항만 온라인 실험으로 진행 가능하도록 설계
    • 개발 중 오프라인-온라인 결과 간의 동기화를 확인하는 여러 실험 수행
    • 성능 긍정적 또는 부정적 변경 모두 강력한 일치성 확인
    1. 로컬 디버깅 기능
    • 검색 파이프라인의 각 컴포넌트를 통한 테스트 케이스 흐름을 관찰할 수 있는 디버깅 지원
    • 기존 프로덕션 로그에 의존했던 디버깅 방식보다 훨씬 효율적
  • 향후 계획
    • 데이터셋 확장
      • 협업 그래프와 같은 더 현실적인 기능 추가
    • 도구 개선
      • 엔지니어가 필요에 따라 맞춤형 합성 데이터를 생성할 수 있도록 툴링 강화
    • 생성형 AI 활용 극대화
      • 합성 데이터가 제공하는 가능성을 활용하여 Canva의 검색 도구를 커뮤니티에 최적의 경험으로 발전시키는 목표 지속