-
Hacker News 데이터세트는 2,874만 개의 게시글과 댓글을 포함하며, 각 텍스트는 SentenceTransformers all-MiniLM-L6-v2 모델로 생성된 384차원 벡터 임베딩으로 구성
- 데이터는 ClickHouse에서 제공하는 단일 Parquet 파일(S3 버킷) 형태로 공개되어, 대규모 벡터 검색 애플리케이션 설계 및 성능 평가에 활용 가능
- 예시 SQL 코드로 테이블 생성, 데이터 로드, HNSW 기반 벡터 유사도 인덱스 구축 및 검색 쿼리 실행 과정을 단계별로 설명
- Python 예제에서는 SentenceTransformers로 쿼리 임베딩을 생성하고, ClickHouse에서 cosineDistance() 함수를 이용해 의미 기반 검색 수행
- 이어지는 요약 데모 애플리케이션은 LangChain과 OpenAI GPT-3.5-turbo를 활용해 검색된 게시글을 요약하며, 기업용 생성형 AI 활용 사례로 확장 가능성 제시
Hacker News 벡터 검색 데이터세트 개요
- 데이터세트는 Hacker News의 2,874만 개 게시물과 댓글을 포함하며, 각 항목은 SentenceTransformers all-MiniLM-L6-v2 모델로 생성된 384차원 벡터 임베딩을 포함
- 임베딩은 문장과 단락의 의미를 포착하기 위한 로컬 임베딩 모델을 사용
- 이 데이터세트는 사용자 생성 텍스트 데이터 기반의 대규모 벡터 검색 애플리케이션 설계, 크기 산정, 성능 분석에 활용 가능
데이터세트 세부 정보
데이터 로드 및 인덱스 구축 절차
-
hackernews 테이블은 게시글 ID, 텍스트, 벡터, 작성자, 시간, 점수 등 다양한 속성을 포함하도록 생성
- 데이터 로드는 다음 SQL 명령으로 수행
INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');
- 벡터 유사도 인덱스는 HNSW 알고리듬과 cosineDistance를 사용해 생성
ALTER TABLE hackernews ADD INDEX vector_index vector TYPE vector_similarity('hnsw', 'cosineDistance', 384, 'bf16', 64, 512);
ALTER TABLE hackernews MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2;
-
M=64, ef_construction=512로 설정되며, CPU 코어 수와 스토리지 대역폭에 따라 인덱스 구축에 수 분~수 시간 소요 가능
- 인덱스 구축 후, 벡터 검색 쿼리는 자동으로 인덱스를 활용
SELECT id, title, text
FROM hackernews
ORDER BY cosineDistance(vector, <search vector>)
LIMIT 10
- 인덱스 메모리 로드에는 수 초~수 분 소요 가능
Python 기반 의미 검색 예제
- Python 스크립트는 SentenceTransformers로 입력 쿼리의 임베딩을 생성하고, ClickHouse Connect를 통해 쿼리를 실행
-
cosineDistance() 함수를 사용해 입력 벡터와 데이터세트 벡터 간의 유사도를 계산
- 예시 실행에서는 “Are OLAP cubes useful” 쿼리에 대해 상위 20개 관련 게시글을 출력
- 출력 결과는 각 게시글의 ID와 텍스트 일부(100자)로 구성
요약 데모 애플리케이션
- ClickHouse를 이용한 의미 검색 및 문서 검색 예시 이후, 생성형 AI 기반 요약 애플리케이션을 소개
- 주요 단계
- 사용자로부터 주제 입력
-
SentenceTransformers all-MiniLM-L6-v2로 주제 임베딩 생성
- ClickHouse에서 벡터 유사도 검색으로 관련 게시글/댓글 조회
-
LangChain과 OpenAI gpt-3.5-turbo를 이용해 검색 결과 요약
- 실행 예시에서는 “ClickHouse performance experiences” 주제로 검색 후 GPT-3.5가 요약 생성
- 요약 내용은 ClickHouse의 성능, 단순성, 효율성, 대규모 분석 적합성을 강조하며, 일부 DML 및 백업 어려움도 언급
- 이 애플리케이션은 고객 감정 분석, 기술 지원 자동화, 회의록 요약, 금융 문서 분석 등 다양한 기업용 생성형 AI 활용 사례로 확장 가능
요약 애플리케이션 코드 구성
- Python 코드에서 SentenceTransformer, clickhouse_connect, LangChain, ChatOpenAI 등을 사용
- 검색 결과를 결합해 GPT-3.5 모델에 입력하고, 최대 10문장 이내의 요약문을 생성
- 입력 텍스트의 토큰 수에 따라 stuff 또는 map_reduce 체인을 선택해 처리
- 결과는 “Summary from chatgpt-3.5:” 형식으로 출력됨