지난 글에서 표 형식 버그를 고치고 나서, 리포트 내용 자체를 다시 들여다봤다. 고객사 목록 중 하나가 유독 계속 눈에 밟혔다. 회사 이름이 일상적으로 쓰는 흔한 단어와 완전히 똑같았다 — 가상의 예를 들면, 회사 이름이 “어울림”이면 “동아리 어울림 행사” 같은 완전히 무관한 기사까지 전부 걸리는 식이었다.
도메인 키워드를 붙였지만 절반쯤은 여전히 틀렸다
전에 이미 한 번 손을 댄 문제였다. 그 회사가 속한 업종과 관련된 단어(예를 들면 “전기차”, “충전” 같은)가 기사에 같이 나오지 않으면 걸러내도록 규칙을 추가해뒀었다. 일반 단어로 쓰인 경우는 확실히 줄었다.
그런데 리포트를 다시 열어보니 여전히 이상한 기사들이 섞여 있었다. 그 회사가 속한 업종 전반에 대한 기사인데, 정작 그 회사 얘기는 한 줄도 없는 경우들이었다. 도메인 키워드는 “이 업종 얘기인가”는 걸러줬지만, “이 회사 얘기인가”는 걸러주지 못했다. 다른 회사의 공장 소식이나, 완전히 다른 업계의 기사에 우연히 그 단어가 섞여 들어온 경우까지 전부 통과하고 있었다.
규칙을 더 추가하는 대신, 다르게 접근했다
여기서 또 규칙을 하나 더 얹을 수도 있었다 — 예를 들면 본문에서 그 단어가 몇 번 나오는지 세어서, 일정 횟수 이상이어야 통과시키는 식으로. 실제로 비슷한 방식을 다른 고객사에는 이미 쓰고 있었다.
근데 그 방식에도 구멍이 있다는 게 이미 드러나 있었다. 진짜 관련 있는 기사인데 어쩌다 한 번만 언급된 경우(예: 다른 회사의 IPO 기사에서 비교 대상으로 잠깐 언급되는 식)는 이 규칙으로 걸러지지 않으면서도, 정작 붙잡아야 할 진짜 오탐은 여전히 통과하는 경우가 있었다. 규칙을 하나 더 추가해봐야, 이번엔 또 다른 예외가 나올 게 뻔했다.
리포트는 이미 기사 본문을 크롤링해서 LLM한테 요약을 시키고 있었다. 그럼 요약을 시키기 전에, “이 기사가 정말 이 회사에 대한 기사가 맞냐”부터 먼저 판단하게 하면 되지 않을까 싶었다. 관련 있으면 요약해서 돌려주고, 아니면 관련 없다는 신호만 돌려주는 식으로.
반영 전에, 먼저 비교부터 해봤다
바로 코드에 반영하지는 않았다. 기존 방식과 새 방식이 같은 기사에 대해 얼마나 다르게 판단하는지부터 보고 싶었다. 문제가 됐던 그 고객사부터 먼저 확인했다 — 이미 리포트에 실려 있던 기사 열세 건을 다시 크롤링해서, LLM한테 “이게 진짜 이 회사 얘기냐”를 하나씩 물어봤다.
결과가 확실했다. 기존 방식은 열세 건을 전부 통과시켰는데, LLM은 그중 여섯 건만 관련 있다고 판단했다. 나머지 일곱 건을 직접 읽어보니 전부 LLM 판단이 맞았다 — 다른 회사 얘기이거나, 업종 전체를 다루면서 그 회사는 스치듯 한 번 언급된 기사들이었다.
한 곳만 보고 결론 내리기는 일렀다. 그래서 그 리포트에 등록된 고객사 전체(십여 곳, 아흔 몇 건)를 같은 방식으로 다시 돌려봤다. 전체적으로 봐도 약 3분의 1이 LLM 기준으론 “그 회사 얘기가 아니다”로 판정됐다. 문제가 됐던 그 고객사만의 문제가 아니었다 — 회사 이름이 자주 다른 회사들과 나란히 언급되는 업계(가령 건설이나 금융권처럼 여러 회사가 한 기사에 같이 등장하는 경우)일수록 비슷한 정도로 새고 있었다.
순서는 그대로 두고, 판단 방식만 바꿨다
반영은 크게 두 가지였다. 첫째, 검색 결과 단계에서 걸러내는 값싼 필터는 그대로 뒀다 — 크롤링 자체를 아낄 수 있으니까. 둘째, 크롤링이 끝난 뒤의 판단 방식만 바꿨다. 본문 언급 횟수를 세는 규칙과, 제목에 있으면 무조건 통과시키던 예외 둘 다 걷어내고, 크롤링에 성공한 기사는 전부 예외 없이 LLM한테 “관련 있냐”부터 묻게 했다. 중복 기사를 걸러내는 단계는 그대로 LLM 호출보다 앞에 뒀다 — 어차피 같은 내용이면 판단을 두 번 시킬 필요가 없으니까.
배운 점
정규식이나 키워드 규칙은 “이 단어가 있냐 없냐”는 잘 잡아도, “이 글이 정말 이것에 대한 글이냐”는 근본적으로 다른 질문이다. 규칙을 하나씩 추가하는 방식으로는 계속 새로운 예외만 만들어낼 뿐, 이 질문 자체에 답하지 못한다. 그리고 아이디어가 그럴듯해 보여도 바로 코드에 반영하는 대신, 같은 데이터로 기존 방식과 새 방식을 나란히 돌려서 실제로 뭐가 달라지는지 눈으로 먼저 확인하는 게 나았다 — 그 비교 없이 반영했다면 “됐다” 싶은 느낌만 있었을 뿐, 실제로 얼마나 나아졌는지는 몰랐을 것이다.