갑자기 블로그 카테고리를 정리하는 이유
블로그에 글이 100개 넘게 쌓였습니다. 그런데 글들의 제목과 카테고리에 통일성이 없어서 지저분하게 보입니다. 마지막으로 카테고리를 정리한 게 언제인지 기억도 가물가물하네요. 코드가 길어지면 리팩토링을 해서 여러 파일로 나누는 것처럼, 카테고리를 '리팩토링'하기로 결심했습니다. 제가 카테고리를 리팩토링한 방법은 다음과 같습니다.
1. 현재 블로그에 있는 글 목록을 추출한다.
2. 추출한 글 목록 데이터를 전처리한다.
3. 비슷한 주제를 가진 글들끼리 군집화한다.
처음에는 글 제목 하나하나를 캡처해서 수동으로 글 목록을 추출하다가 너무 비효율적인 거 같아서 크롬에서 개발자 모드를 켠 후 코딩으로 추출했습니다. 데이터 전처리는 카테고라이징하지 않을 글들을 글 목록에서 제외하고 제목 앞에 붙은 [ ]를 제거하는 방식으로 진행했습니다. 마지막으로 군집화는 생성형 AI ChatGPT 4와 Claude 3.0를 사용한 뒤 '인간의 힘(직접함)'으로 마무리했습니다.
블로그에 있는 글 목록 추출하기
처음에는 아무 생각 없이 글 제목을 하나하나 캡처해서 피그잼에 붙여 넣었습니다. 피그잼을 사용하면 이미지를 움직이는 게 편해서 군집화하기 용이하다는 생각이 들었기 때문입니다. 그런데 100개가 넘는 글을 캡처 -> 붙여넣기 하려면 엄청나게 많은 시간이 낭비될 것 같아서 굳이 이렇게 해야 하나? 싶었습니다. 그래서 다른 방법을 고민했습니다.
var postConts = document.getElementsByClassName('post_cont')
var data = []
for (var i = 0; i < postConts.length; i++) {
var title = postConts[i].querySelector('.tit_post a').textContent;
var info = postConts[i].querySelectorAll('.txt_info');
var date = info[1].textContent;
data.push({
title: title,
date: date,
});
}
console.log(data)
잠깐 고민하고 코드로 해결했습니다. 관리자 페이지에서 '글 관리'를 누르면 글 정보가 동일한 태그의 동일한 속성에 규칙적으로 있기 때문입니다. 그리고 제목, 날짜 등 다양한 정보를 쉽고 빠르게 가져올 수 있습니다. 코드 사용법은 다음과 같습니다.
개발자 모드를 켜고 위 코드를 복사 붙여넣기 합니다. 그러면 가운데 사진과 같이 글 목록이 추출됩니다. 사실 카테고리를 정리하는데 날짜 정보는 필요 없지만, 카테고라이징과 별개로 날짜 정보를 사용할 곳이 따로 있어서 날짜 정보도 추출했습니다. 지금 사용한 방법의 단점은 현재 보고 있는 페이지의 정보만 추출할 수 있다는 것입니다. 하지만, 개발자 모드를 끄지 않고 페이지만 이동해서 계속 같은 명령어를 입력하면 오른쪽 사진과 같이 손쉽게 제목 목록을 가져올 수 있습니다.
추출된 글 정보 리스트에 마우스 우클릭을 하고 'Copy object'를 누르면 글 리스트가 복사됩니다. 복사한 것들은 메모장에 붙여두기 합니다. 저는 공개글과 비공개글을 따로 복사했습니다. 왜냐하면, 비공개글에서는 빼야 할 글들이 몇 개 있었기 때문입니다. 일종의 데이터 전처리를 하는 과정이라고 생각하면 될 것 같습니다.
이렇게 해서 글 목록 추출이 끝났습니다. 오랜만에 개발자 모드를 사용해보고 날짜 데이터도 추출할 수 있어서 나름 만족했습니다. 조금 더 생각해보면 더 효율적으로 글 정보를 가져올 수 있는 방법이 있을 거 같은데, 당장은 떠오르지 않네요.
글 목록 데이터 전처리하기
가장 먼저 위와 같이 비공개 글에서 공개하고 싶지 않은 글들을 목록에서 지웠습니다. 이 글들은 카테고리가 따로 없거나 다른 글들과 동일한 카테고리에 들어가도 되기 때문입니다.
그 후 공개 글에서 카테고리가 명확한 것들도 지웠습니다. 대표적으로 문제풀이와 관련된 글이 있습니다. 이 글들은 카테고리가 절대 바뀔 일이 없기 때문입니다.
마지막으로 bias를 방지하기 위해 제목 앞에 적은 [Label]들을 지웠습니다. 제목은 길어봤자 50글자 정도로 짧기 때문에 LLM이 Label들을 중요한 내용으로 인식해서 잘못된 결과를 낼 것이라고 생각했기 때문입니다.
예를 들어서 제목이 "[꿀팁] 조별과제에 도움이 되는 구글 문서 활용법 ① - 댓글 작성"이라면 [꿀팁]을 지우고 "조별과제에 도움이 되는 구글 문서 활용법 ① - 댓글 작성"로 수정했습니다.
하지만, 일부 Label들은 유지했습니다. 예를 들어서 '[GitHub/기초] Git과 GitHub' 같은 경우에는 Label을 지우든 말든 같은 결과를 낼 것 같아서 굳이 지우지 않았습니다.
비슷한 주제를 가진 글들끼리 군집화하기
그럼 대망의 군집화를 해보겠습니다.
사실 말이 군집화지... 그냥 LLM을 사용한 것에 불과합니다.
다음은 내가 블로그에 작성한 글들의 제목이야.
글들의 제목을 토대로 대분류, 소분류로 글들의 카테고리를 만들어줘.
그다음에 각 카테고리에 맞게 글들을 분류해 줘.
군집화는 ChatGPT 4와 Claude 3.0을 사용했습니다. 위 프롬포트를 각 챗봇에 입력했습니다.
결과는 놀라웠습니다. 처음에는 ChatGPT의 성능이 더 좋게 느껴졌습니다. 왜냐하면, ChatGPT는 제가 요구한 대로 카테고리를 먼저 만들고 그다음에 글을 배치해줬기 때문입니다. 또한, 개발과 관련해서 되게 세세하게 카테고라이징을 해줬습니다. 반면, Claude는 어떤 카테고리가 있을지 얘기하지 않고 바로 카테고라이징을 했기 때문에 제 명령을 무시했다는 생각이 들었습니다. 그런데 막상 카테고리화된 결과를 살펴보니 Claude가 더 잘했다는 생각이 들었습니다.
코딩하거나 서비스 기획할 때도 Claude의 성능이 더 좋다고 느꼈는데 GPT5가 나오기 전까지는
Claude를 쓰는 게 좋을 것 같습니다. 더구나 ChatGPT 보다 가격도 저렴하니 안 쓸 이유가 없다고 생각이 들어서 바로 결제했습니다.
하지만 두 당연하게도 AI 모두 완벽한 결과는 내지 못했기 때문에 두 AI의 결과를 참고해서 카테고라이징을 했습니다. 명함 관리 애플리케이션 '리멤버'도 OCR이 완벽하지 않기 때문에 타이피스트들이 명함 정보를 수동으로 입력해준다고 하는데, 비슷한 것을 한 것 같습니다.
결과
최종적으로 지금 여러분이 보는 블로그의 카테고리가 만들어졌습니다. 정말 깔끔해졌네요. 글들의 카테고리를 옮긴 다음에 그리고 글들 앞에 더 적절한 Label들을 붙였습니다. 코드 리팩토링이 그러하듯 완벽할 수는 없지만, 만족할 만한 결과가 나왔습니다.
마치며
만약 벡터 DB에다가 글의 제목과 글의 요약본을 넣은 다음에 유사한 것끼리 묶어서 뽑아낸다면 더 좋은 결과가 나올지도...? 그렇지만 이번에는 거기까지 하지는 않겠습니다. 언젠가 글이 500개 이상이 된다면 그렇게 할지도.
그리고 나중에 글이 더 많아지면 글목록 추출도 수동으로 하는 거에 한계가 있을 수 있기 때문에 글 목록 추출을 자동화해야겠습니다.
암튼 오랜만에 블로그 카테고리를 정리한 것도 좋았고, 하나의 TASK에 대해서지만 ChatGPT와 Claude의 성능을 비교하게 된 점도 좋았습니다.
그리고 다시 한번 느끼지만, 카테고리 분류에는 정답이 없는 거 같습니다...
마치 개발과 같달까?
'블로그' 카테고리의 다른 글
[블로그] 성과와 아쉬움, 그리고 향후 방향성 (2) | 2023.11.23 |
---|---|
[블로그 수익 창출] 티스토리 블로그에 구글 애드센스를 신청하는 법 (4) | 2023.10.24 |