# Hacker News 댓글 2,800만 건을 벡터 임베딩 검색 데이터세트로 제공

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24703](https://news.hada.io/topic?id=24703)
- GeekNews Markdown: [https://news.hada.io/topic/24703.md](https://news.hada.io/topic/24703.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-29T12:33:39+09:00
- Updated: 2025-11-29T12:33:39+09:00
- Original source: [clickhouse.com](https://clickhouse.com/docs/getting-started/example-datasets/hackernews-vector-search-dataset)
- Points: 4
- Comments: 1

## Topic Body

- **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차원 벡터 임베딩**을 포함  
  - 임베딩은 문장과 단락의 의미를 포착하기 위한 **로컬 임베딩 모델**을 사용  
- 이 데이터세트는 **사용자 생성 텍스트 데이터 기반의 대규모 벡터 검색 애플리케이션** 설계, 크기 산정, 성능 분석에 활용 가능  

### 데이터세트 세부 정보
- 전체 데이터는 **ClickHouse**가 제공하는 **단일 Parquet 파일**로, S3 버킷(`https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/hackernews_part_1_of_1.parquet`)에서 다운로드 가능  
- 사용자는 데이터 저장 및 메모리 요구량을 추정하기 위해 **ClickHouse 문서의 ANN 인덱스 가이드**를 참고하도록 권장됨  

### 데이터 로드 및 인덱스 구축 절차
- `hackernews` 테이블은 게시글 ID, 텍스트, 벡터, 작성자, 시간, 점수 등 다양한 속성을 포함하도록 생성  
- 데이터 로드는 다음 SQL 명령으로 수행  
  ```
  INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/hackernews_part_1_of_1.parquet');
  ```
  - 약 **2,874만 행 삽입**에 몇 분 소요  
- 벡터 유사도 인덱스는 **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, &lt;search vector&gt;)
  LIMIT 10
  ```
  - 인덱스 메모리 로드에는 수 초~수 분 소요 가능  

### Python 기반 의미 검색 예제
- Python 스크립트는 **SentenceTransformers**로 입력 쿼리의 임베딩을 생성하고, **ClickHouse Connect**를 통해 쿼리를 실행  
- `cosineDistance()` 함수를 사용해 입력 벡터와 데이터세트 벡터 간의 유사도를 계산  
- 예시 실행에서는 “Are OLAP cubes useful” 쿼리에 대해 상위 20개 관련 게시글을 출력  
  - 출력 결과는 각 게시글의 ID와 텍스트 일부(100자)로 구성  

### 요약 데모 애플리케이션
- ClickHouse를 이용한 **의미 검색 및 문서 검색** 예시 이후, **생성형 AI 기반 요약 애플리케이션**을 소개  
- 주요 단계  
  1. 사용자로부터 주제 입력  
  2. `SentenceTransformers all-MiniLM-L6-v2`로 주제 임베딩 생성  
  3. ClickHouse에서 벡터 유사도 검색으로 관련 게시글/댓글 조회  
  4. `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:” 형식으로 출력됨

## Comments



### Comment 46960

- Author: neo
- Created: 2025-11-29T12:33:40+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=46081053) 
- 새로운 벡터 임베딩 데이터셋에는 **all-MiniLM-L6-v2**를 사용하지 말 것을 권장함  
  이 모델은 초창기 튜토리얼에서 자주 쓰이던 **sentence-transformers** 기반의 실용적 모델이었지만, 이제는 오래되어 최신 **아키텍처와 학습 파이프라인**을 반영하지 못함  
  컨텍스트 길이도 512로 짧음. 대신 [EmbeddingGemma](https://huggingface.co/google/embeddinggemma-300m)를 추천함. 2k 컨텍스트 윈도우를 지원하고 벤치마크 성능이 매우 좋음  
  속도는 느리지만 가치가 있음. 절충안으로는 [bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5)나 [nomic-embed-text-v1.5](https://huggingface.co/nomic-ai/nomic-embed-text-v1.5)도 괜찮음
  - 요즘은 [Qwen3-Embedding-0.6B](https://huggingface.co/Qwen/Qwen3-Embedding-0.6B)를 선호함  
    **오픈 웨이트**, **다국어 지원**, 32k 컨텍스트를 제공함
  - 그래도 all-Mini의 장점은 **클라이언트 사이드에서 실행 가능**하다는 점임  
    약 70MB로 작아서 다운로드가 쉬움. EmbeddingGemma는 300MB 이상이라 부담됨  
    혹시 100MB 이하로 쓸만한 모델이 있을까 궁금함
  - EmbeddingGemma의 **라이선스 문제**가 아쉬움  
    ‘Gemma 라이선스’가 모호해서 법적 검토가 필요할 수도 있음  
    Google이 “제한된 사용” 목록을 바꾸면 언제든 사용 금지될 위험이 있음
  - 상용 임베딩 모델들 간의 비교가 궁금함  
    예를 들어 **Cohere vs OpenAI small vs OpenAI large** 같은 비교 자료가 부족함  
    어떤 기준으로 벤치마크해야 할지 모르겠음
  - 몇 주 전 **EmbeddingGemma**와 **nomic-embed-text-v1**를 AB 테스트했는데, nomic 쪽이 훨씬 좋은 결과를 냈음  
    CPU에서도 잘 동작함

- 2023년부터 모든 HN 댓글을 **BigQuery**에서 임베딩해 [hn.fiodorov.es](https://hn.fiodorov.es)에 호스팅 중임  
  소스 코드는 [GitHub](https://github.com/afiodorov/hn-search)에 공개되어 있음
  - 직접 사용해봤는데 꽤 괜찮은 답변을 줬음  
    “Who’s Gary Marcus”를 검색했더니 Google보다 **부정적**인 결과가 나왔음  
    운영 비용이 얼마나 드는지 궁금함
  - GitHub 레포의 **아키텍처 설명**이 인상적이었음. 멋진 프로젝트임
  - 어떤 **하드웨어**로 임베딩을 생성했고, 얼마나 걸렸는지 궁금함
  - 사용자들이 자신의 데이터 삭제를 요청할 수 있는 **이슈 제출 기능**이 있는지 알고 싶음

- HN의 **Privacy 및 Data Policy**에 따르면 댓글의 상업적 이용이 금지되어 있음  
  벡터 표현도 기술적으로는 **파생 저작물**에 해당함
  - [Y Combinator 이용 약관](https://www.ycombinator.com/legal/#tou)에 따르면  
    사이트 콘텐츠를 상업적으로 복제, 배포, 수정, 파생물 생성 등을 금지함  
    또한 **데이터 마이닝, 스크래핑** 등의 행위도 금지되어 있음
  - 물론 벡터는 파생물이지만, 내 기억도 마찬가지로 파생물임  
    나는 내 기억의 **외부 보조 장치**로 벡터 데이터베이스를 만드는 것이 권리라고 생각함
  - 농담이지만, 내 댓글 전부 삭제 요청하려던 참이었음. 이제 그럴 필요가 없겠음
  - 그럼 **OpenAI**에도 누가 알려줘야겠음

- HN에 **“비슷한 문장 보기”** 같은 우클릭 메뉴가 있으면 좋겠음  
  이전에 같은 제안이 있었는지도 알 수 있을 듯함
  - 댓글과 스레드를 **의미 기반으로 연결**하면 정말 흥미로울 것 같음  
    같은 논의가 다른 글에서 얼마나 반복되는지도 볼 수 있고,  
    내가 쓰려는 말에 대한 과거 반응을 미리 확인할 수도 있음  
    일종의 **semantic thread** 개념이 될 수 있음
  - 그 기능을 쓰면 아마 “tangential, orthogonal, anecdata, enshittification, razor…” 같은 단어들이 잔뜩 나올 듯함
  - 예전에 누군가 HN의 **부계정 식별 도구**를 만들었는데, 글쓰기 스타일만으로 거의 완벽히 찾아내서 무서웠음

- 혹시 **벡터 검색 vs 일반 텍스트 검색**을 비교한 논문이 있는지 궁금함  
  벡터 검색이 정말 그만한 가치가 있는지 고민됨
  - 일반 검색은 보통 **bm25**로 불림. 대부분의 검색 관련 논문에서 **bm25를 기준선**으로 사용함
  - 특정 논문은 모르지만, Bluesky의 [reachsumit.com 계정](https://bsky.app/profile/reachsumit.com)이 **RAG와 정보 검색** 관련 자료를 자주 다룸
  - 어떤 측면에서 비교하느냐가 중요함 — 서버 부하인지, 사용자 경험인지에 따라 다름

- HN 포스트와 임베딩 메타데이터가 합쳐서 **55GB**라는데, Parquet 파일이라면 그게 맞는지 궁금함
  - 대부분이 **임베딩 데이터**일 것 같음. 내 DB는 전체 HN 게시글과 댓글을 포함하는데, 압축 전 17.68GB, 압축 후 5.67GB 정도임
  - 놀라울 정도로 **압축 효율**이 좋음. Brotli 압축을 쓰면 수백만 페이지도 1~2GB로 줄어듦
  - 표를 보면 그 수치가 맞는 듯함. 나도 내 **업보트 데이터**를 임베딩해서 취향 분석을 해보고 싶음
  - 압축된 상태라면 충분히 **그럴듯한 크기**임

- 댓글이 **상업용 모델 학습**에 쓰이는 게 유일한 목적이라면 좀 씁쓸함  
  이런 상황이 앞으로 내 참여 의욕에 영향을 줄 수도 있을 것 같음
  - **LLM의 등장** 이후 인터넷에 유용한 글을 쓰고 싶은 마음이 줄었음  
    예전엔 낯선 사람을 돕는 기분이었는데, 이제는 내가 좋아하지 않는 사람을 돕는 느낌임
  - 나는 오히려 내 괴짜 같은 댓글이 **LLM의 잠재 공간에 흔적**으로 남는다는 생각이 재미있음  
    미래의 거대한 모델 속 어딘가에서 내 말이 미세하게 울릴지도 모름
  - 분위기 너무 진지함. 그냥 즐기자고 말하고 싶음

- **계정/댓글 삭제 기능**이 있었으면 좋겠음
  - 우리가 남긴 말은 이미 전 세계 수많은 장치에 복제되어 있음  
    사실상 **영구적 데이터**가 되었고, 언젠가 내 댓글은 고대의 지혜처럼 남을지도 모름
  - HN 데이터셋은 이미 여러 곳에 복제되어 있으니, 여기에 쓰는 글은 **공개 콘텐츠**로 생각해야 함

- 할 일 목록에서 하나를 지웠음 (이 프로젝트 덕분에)
- 친구가 묻는다고 치자면… 여기 댓글을 달면 그게 **벡터로 변환**되는 것임?
