자동 기사 생성 품질을 높이는 다층 처리 완성
목차
자동화 봇의 기사 생성 파이프라인에서 humanizer의 1층과 2층 처리를 연결했다. 영문 콘텐츠의 자연스러움을 높이기 위해 초안 생성에서 고도화 개선으로 이어지는 체인을 완성한 작업이다.
왜 다층으로 나눴나
콘텐츠 자동화의 품질 문제는 보통 한 단계의 처리로는 감당하기 어렵다. 초기 draft를 빠르게 만드는 것과 그걸 다듬어 자연스럽게 하는 것은 서로 다른 관심사이기 때문이다.
- 1층(기초 생성): 템플릿이나 기본 로직으로 기사 골격 작성 — 빠르고 일관적
- 2층(고도화): 문체 개선, 어순 조정, 자연스러움 검증 — 시간이 걸리지만 품질 향상
한 번에 양쪽을 다 하려면 로직이 복잡해지고, 각 단계별로 검증하기도 까다로워진다. 그래서 처음엔 1층만 동작하게 뒀는데, 영문 콘텐츠가 늘어나면서 2층 처리가 절실해졌다. 사용자들이 "자동생성이라고 느껴지지 않으려면" 단순 조합을 넘어야 했다.
1층+2층 연결의 구조
| 구분 | 1층(초안 생성) | 2층(개선) | 통합 효과 |
|---|---|---|---|
| 입력 | 원본 데이터 | 1층 결과물 | 단계적 처리 |
| 목표 | 기본 형식 맞추기 | 자연스러움 향상 | 품질 누적 |
| 시간 복잡도 | O(n) | O(n) 상대적 느림 | 전체 처리량 조정 필요 |
| 검증 방식 | 구조/필드 확인 | 읽음성/일관성 확인 | 이단계 QA |
이 구조의 핵심은 각 계층이 자기 책임만 진다는 점이다. 1층은 "기본 형식이 맞나"만 신경 쓰고, 2층은 "이미 유효한 결과를 더 좋게 만들 수 있나"에만 집중한다. 덕분에:
- 1층 로직을 개선해도 2층에 부작용을 주지 않음
- 2층 알고리즘은 1층의 세부 구현 변경과 독립적
- 필요시 1층 결과만 써야 하는 경우에도 쉽게 스킵 가능
seed_articles.py에서의 구현
기사 생성 초기화 스크립트에서 흔히 쓰는 흐름은 이런 식이다:
# 의사코드 — 실제 구현 세부와 무관
def generate_articles(raw_data):
# 1층: 기초 생성
draft_articles = layer1_generate(raw_data)
# 2층: 개선 처리 (humanizer)
polished_articles = layer2_humanize(draft_articles)
return polished_articles
주의할 점은:
- 2층의 입력은 반드시 1층이 검증한 valid한 결과만 (garbage in, garbage out)
- 2층이 1층 결과를 변형할 때도 기본 구조는 보존해야 함
- 처리 시간이 누적되므로 bottleneck 모니터링 필수
실무에서 배운 것
이 작업을 하면서 느낀 것은, 자동화 시스템의 품질을 높일 때 "한 번에 다 좋게" 보다 "점진적으로 층을 쌓기"가 훨씬 현실적이라는 거다.
팀이 커질수록 단계 분리가 중요해진다. 누군가는 1층의 처리 속도를 개선하고, 다른 누군가는 2층의 정확도를 높일 수 있다. 코드 리뷰도 "이건 1층 변경이니까 어디서부터 어디까지 영향을 봐야 해"라고 스코핑하기 쉬워진다. 병렬 작업이 가능해진다는 뜻이다.
롤아웃이 유연해진다. 초기엔 1층만 켜둔다. 2층의 품질이 확실해진 후, 또는 인프라가 준비된 후에 점진적으로 활성화할 수 있다. 리스크 관리 관점에서도 훨씬 낫다.
디버깅도 명확해진다. 결과물이 이상할 때 "1층에서 온 건가 2층에서 온 건가" 빠르게 좁혀진다. 로그도 레이어별로 분리해서 찍으면 추적이 훨씬 쉽다.
다음은 이 연결을 좀 더 동적으로 만드는 것을 생각 중이다. 예를 들어 처리 부하에 따라 2층을 선택적으로 띄운다든지, 샘플에 대해 A/B 테스트로 2층의 효과를 정량으로 측정한다든지. 단순히 "붙인다"에서 "지능적으로 활용한다"로 옮겨가는 게 목표다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.