실패 - LLM을 이용한 HTML 파싱 실패


개요

대충 웹사이트 크롤링을 할 때 목록 형태의 데이터를 JSON 형태로 가공하는 툴을 만들려고 했었는데, LLM의 할루시네이션이 마구 터져서 도저히 쓸 수 없었다. 별수없이 기존 방식으로 구현하면서 글을 쓰게 되었다.

의도 - Generic한 웹 사이트 파싱 툴

대충 아무 웹사이트나 넣어도, 뭐든지 목록 형태의 데이터가 보이면 그걸 JSON으로 가공하는 툴을 만들고 싶었다. 요새 LLM이 그런거 잘 한다고 하니까 대충 돌려보려고 해봤다.

구조

웹사이트를 그냥 HTML 파일로 저장한 다음, LLM에게 넘겨주고 적당히 프롬프트 짜서 뭐든지 목록 형태의 무언가가 보이면 JSON으로 알려달라고 해 봤다.

실패

내가 원하는 포맷이 안나옴

챗 API 형태로는 아무리 말로 잘 타일러도 결국 봇이 “쒸른뎅?” 하면서 이상한 미사여구를 답변 앞뒤에 붙여버리면 JSON으로 쓸 수가 없다. 요새는 몇몇 툴들이 답변 생성 과정에 Grammar를 붙일 수 있게 만들어서 내가 원하는 포맷을 강제할 수 있긴 한데, 고작 이런거 만들자고 그런 툴 만들어서 붙이긴 싫어서 일단 보류.

답변에 Hallucination이 너무 많음

실제 존재하지 않는 제목이나 링크가 너무 많이 나왔다. 원래 원하던 정답은 CSS selector를 추출하는 것과 다름없기 때문에 특정 부분의 문자열을 얻어내기만 하면 되는건데, Attention을 이용하는 LLM의 특성 상, 그런 selector를 동일하게 작동하게 만들기 쉽지는 않겠다는 생각이 들었다.

페이지에 목록이 여러개 있을 경우 원하는 목록을 선택하기가 쉽지 않음

LLM에게 큰 혼란을 주는 듯.

결론

그냥 CSS selector 정도는 직접 짜세요…