데이터 준비
download.sh 스크립트를 사용할 수 있습니다:
process.py는 다음과 같이 정의되어 있습니다:
seq 0 9 | ....
(위의 Python 스크립트는 매우 느리고(파일당 약 2~10분), 메모리를 많이 사용하며(파일당 41 GB), 결과로 생성되는 CSV 파일도 큽니다(각 10 GB). 따라서 주의하십시오. RAM이 충분하다면 더 높은 병렬 처리를 위해 -P1 값을 늘리십시오. 그래도 너무 느리다면 더 나은 수집 절차를 고려하십시오. 예를 들어 .npy 파일을 Parquet로 변환한 다음, 나머지 처리는 모두 ClickHouse에서 수행할 수 있습니다.)
테이블 생성
id 컬럼은 단지 예시를 위한 것이며, 스크립트가 중복된 값으로 채운다는 점에 유의하십시오.
브루트포스 벡터 유사도 검색 실행
target은 512개 요소로 이루어진 배열이며, 클라이언트 측 매개변수입니다.
이러한 배열을 쉽게 얻는 방법은 글의 마지막에서 소개합니다.
지금은 임의의 LEGO 세트 사진에서 추출한 임베딩을 target으로 사용해 볼 수 있습니다.
결과
벡터 유사성 인덱스를 사용해 근사 벡터 유사성 검색 수행하기
UDF를 사용한 임베딩 생성
target 벡터를 생성할 수 있습니다. 데이터를 생성할 때와 검색용 새 임베딩을 생성할 때는 반드시 동일한 모델을 사용해야 합니다. 다음 스크립트에서는 데이터셋의 기반 모델이기도 한 ViT-B/32 모델을 사용합니다.
텍스트 임베딩
user_scripts/ 디렉터리에 저장하고 실행 권한을 부여하세요(chmod +x encode_text.py).
encode_text.py:
<user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config>로 참조하는 위치에 encode_text_function.xml을 생성합니다.
SET param_target=...에 복사하면 쿼리를 쉽게 작성할 수 있습니다. 또는 encode_text() 함수를 cosineDistance 함수의 인수로 직접 사용할 수도 있습니다:
encode_text() UDF 자체도 임베딩 벡터를 계산하고 출력하는 데 몇 초 정도 걸릴 수 있다는 점에 유의하십시오.
이미지 임베딩
encode_image.py
encode_image_function.xml