AI 기반 지식 앱을 위한 Reddit 및 Wikipedia 활용하기
요약
Reddit의 실시간 커뮤니티 인사이트와 Wikipedia의 구조화된 사실을 결합하여 RAG 시스템을 구축하는 실무 가이드를 제공합니다. 데이터 수집부터 정제, 벡터 임베딩, LLM 기반 Q&A API 구축까지의 전체 파이프라인을 다룹니다.
핵심 포인트
- PRAW와 Pushshift를 활용한 Reddit 데이터 수집 전략
- MediaWiki API를 이용한 Wikipedia 지식 추출 및 캐싱 기법
- 노이즈가 많은 Reddit 텍스트를 정제하여 지식 청크로 변환하는 방법
- 저비용으로 실행 가능한 프로덕션 수준의 RAG 파이프라인 구축
개발자, 창업자 및 AI 빌더를 위한 실무 가이드
Solace Harbor - Compounding-Asset Specialist 작성
Reddit과 Wikipedia는 인간 지식의 가장 방대하고 지속적으로 업데이트되는 두 가지 소스입니다. 이 둘을 결다면, **잘 구조화된 백과사전적 사실 (Wikipedia)**에 기반을 둔 **실시간 커뮤니티 인사이트 (Reddit)**를 얻을 수 있습니다. 이 가이드에서는 이러한 원시 스트림을 제품, 연구 도구 또는 스타트업을 위한 데이터 기반 기능으로 출시할 수 있는 검색 증강 생성 (RAG, Retrieval-Augmented Generation) 시스템으로 변환하는 완전한 프로덕션 준비 단계의 파이프라인을 살펴봅니다.
요약 (TL;DR): 이 포스트의 끝에서 여러분은 (1) Reddit 댓글/게시물을 가져오고, (2) Wikipedia 문맥으로 이를 풍부하게 하며, (3) 벡터 임베딩 (Vector Embeddings)으로 모든 것을 인덱싱하고, (4) LLM 기반 Q&A를 위한 빠른 API를 제공하는 재현 가능한 노트북을 갖게 될 것입니다. 모든 코드는 오픈 소스이며, 단일 GPU에서 실행되고, 일반적인 클라우드 제공업체에서 월 $30 미만의 비용이 듭니다.
1️⃣ 데이터 수집 - Reddit 및 Wikipedia에서 신호 추출하기
1.1 Reddit: PRAW 및 Pushshift 사용하기
Reddit의 공식 API (PRAW를 통해 제공)는 속도 제한(대부분의 엔드포인트에 대해 분당 60회 요청)이 있습니다. 과거의 대량 덤프(Bulk dumps)를 위해서는 단일 요청으로 수백만 개의 게시물을 쿼리할 수 있는 무료 아카이브인 Pushshift.io를 보완하여 사용하겠습니다.
# 종속성 설치
!pip install praw pushshift-py tqdm
...
예상 수치:
| Subreddit | 30일 게시물 수 (약) | 게시물당 평균 댓글 수 |
|---|---|---|
| r/MachineLearning | 12 k | 45 |
| ... |
전체 댓글 스레드가 필요한 경우, Reddit의 제한 내에 머물 수 있도록 초당 1회 요청으로 스로틀링(Throttling)하며 PRAW의 submission.comments.list()를 사용하십시오.
1.2 Wikipedia: MediaWiki API + wikipedia-api
Wikipedia는 매달 업데이트되는 구조화된 덤프 (Structured dump) (XML/JSON)를 제공하지만, 대부분의 사용 사례에서는 RESTful MediaWiki API만으로도 충분하며 훨씬 더 간단합니다.
!pip install wikipedia-api tqdm
import wikipediaapi
...
Tip: 반복적인 API 호출을 피하기 위해 Wikipedia 조회 결과(look-ups)를 로컬에 캐싱(예: sqlite 또는 diskcache 사용)하세요. 10,000페이지 분량의 캐시는 약 200 MB를 차지하며, 조회당 지연 시간(latency)을 5 ms 미만으로 줄여줍니다.
2️⃣ 데이터 정규화 및 풍부화 (Data Normalization & Enrichment)
가공되지 않은 Reddit 게시물은 마크다운(markdown), 이모지(emojis), URL, 커뮤니티 속어(slang) 등으로 인해 노이즈가 많습니다. 반면, Wikipedia는 깔끔하지만 매우 격식적입니다. 우리는 이 둘을 LLM이 소화할 수 있는 하나의 "지식 청크 (knowledge chunk)"로 **병합 (merge)**할 것입니다.
2.1 Reddit 텍스트 정제 (Cleaning Reddit Text)
import re
import html
from bs4 import BeautifulSoup
...
2.2 개체명 추출 및 Wikipedia 연결 (Entity Extraction & Wikipedia Linking)
NER(개체명 인식)을 위해 spaCy (v3)를 사용한 다음, 퍼지 검색(fuzzy search, Levenshtein distance ≤ 2)을 통해 각 개체를 Wikipedia 페이지로 연결(resolve)합니다. 이를 통해 Reddit -> Wikipedia, Wikipedia -> Reddit으로 이어지는 **양방향 맵 (bidirectional map)**이 생성됩니다.
!pip install spacy rapidfuzz tqdm
!python -m spacy download en_core_web_sm
...
결과 데이터 모델 (JSON):
{
"reddit_id": "t3_abcdef",
"title": "Understanding Transformers",
...
3️⃣ 임베딩 및 벡터 인덱싱 (Embedding & Vector Indexing)
정제되고 풍부해진 청크를 사용하여 이제 **밀집 임베딩 (dense embeddings)**을 생성하고, 이를 **벡터 데이터베이스 (vector database)**에 저장하여 1초 미만의 유사도 검색(similarity search)을 수행할 수 있습니다.
3.1 임베딩 모델 선택 (Choosing an Embedding Model)
| 모델 | 제공업체 | 차원 (Dim) | 비용 (1 M 토큰당) | 지연 시간 (GPU) |
|---|---|---|---|---|
text-embedding-3-large | OpenAI | 3072 | $0.13 | ~ 30 ms |
| ... |
**프로덕션 프로토타입 (production prototype)**을 위해서는 **OpenAI의 text-embedding-3-large**를 권장합니다 (높은 품질, 단일 A100 기준 낮은 지연 시간). 비용에 민감하다면 all-MiniLM-L6-v2로 시작한 후 나중에 업그레이드하세요.
!pip install openai tqdm faiss-cpu
import openai, os, numpy as np, faiss, json, tqdm
...
3.2 FAISS 인덱스 구축 (Building a FAISS Index)
FAISS (Facebook AI Similarity Search)는 단일 GPU에서 10 M개 이상의 벡터로 확장 가능하며 10 ms 미만의 쿼리 지연 시간을 갖는 IVF-Flat 인덱스를 제공합니다.
dim = vectors.shape[1]
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기