내 노가다 업무를 없애버린 경험을 공유하고자 고정닉 가입함. 2021년쯤 유입되어서 눈팅중.
내 업무환경
1. 주기적으로 문서가 들어옴. 대략 1주일에 문서 200장 ~ 500장이 들어옴. 마지막으로 세어봤을 때에는 1000장 약간 넘었다. 그림으로 나타내면 대충 이런 환경이다.
2. 현실적으로 200~500장을 따로따로 스캔할 수 없으므로 한번에 스캔. 즉 200~500장 짜리 pdf 파일이 아래 주황색 사각형처럼 1개 생성됨.
3. 위 주황색 사각형처럼 여러 문서가 한번에 스캔되어 있는데, pdf 열고 문서 하나하나 분리해야 함.
4. 분리된 파일 제목을 문서 번호로 지정해줘야 함. 예를들어,
1번 파일을 3장으로 추출해서 다른이름으로 저장 - 1.pdf
2번 파일을 15장으로 추출해서 다른이름으로 저장 - 2.pdf
3번 파일을 7장으로 추출해서 다른이름으로 저장 - 3.pdf
5. 여기까지 500장 정도에 1시간 45분정도가 걸림.
6. 그 뒤에는 문서를 보고 어떤 종류의 문서인지 파악한 뒤 양식에 맞추어 이름 변경해줘야 함. 날짜는 제일 첫장에 있으므로 그걸 보고 입력. 예를들어,
1.pdf 파일을 보고, 이건 '타입 A 문서'라고 판단한 다음, 이름 변경: A, 1, 2025-02-15.pdf
2.pdf 파일을 보고, 이건 '타입 C 문서'라고 판단한 다음, 이름 변경: C, 2, 2025-02-01.pdf
3.pdf 파일을 보고, 이건 '타입 A 문서'라고 판단한 다음, 이름 변경: A, 3, 2025-02-10.pdf
7. 그 뒤 파일들을 올바른 폴더에 넣고, 리스트에 적어줘야 함.
8. 여기까지 추가로 3시간정도 걸림. 그래서 500장정도 들어오면 총 4시간 45분정도 소요됨.
어떻게하면 딸깍을 할 수 있을까
1. 각 문서마다 페이지 수가 완전히 랜덤이라, 일괄로 나눌수 없었음. 예를들어 문서 하나가 2장이라면 모조리 2장으로 나눠버리면 되지만 그게 안됨.
2. o1에게 위와 같은 상황을 최대한 자세히 설명하고, 문제의 본질을 한발짝 떨어져서 같이 생각해봄. 크게 도움이 되지 않았지만, 프롬프트에 문제를 최대한 자세히 풀어서 생각하다보니 깨닫게 된 건, 이 문제는 "파일 뭉치 안에 수없이 많이 껴있는 '첫 장' 양식을 인식해야 하는 문제"임.
3. 일단 o1은 'OCR'(pdf 내 글자 인식)기능을 사용해볼것을 권함.
좆뺑이의 기록
1. o1에게서 파이썬 코드를 받음. 구글 검색해서 파이썬 어떻게 돌리는지 검색해보고, 파이썬으로 받은 코드를 돌려봄. 나는 파이썬 어떻게 할 줄 모름. 그대로 넣고 돌려봤는데 오류가 났음.
2. 오류 메시지가 길게 나왔는데 그대로 복붙해서 "이게 무슨 문제냐" 라고 물어봤다. o1은 "경로 지정이 안 되어 있다"고 했었음.
3. o1은 횟수 제한이 있는 걸로 알아서, 경로 지정은 어떻게 하는지 구글에 물어봄. 마침내 해결함.
4. 어째저째 고생 후 OCR을 각 페이지마다 돌려봤다. 문제는 너무 오래 걸렸고, 오류율도 너무 높았다. 좆구린 스캐너에서 나온 스캔본의 작은 글씨를 인식할 수 없었음.
5. o1에게 해당 문제를 말해봄. 4가지 정도의 테크닉을 알려줬고 그 중에 "open cv"의 "template matching" 을 써볼것을 제안함. 이미지 인식 알고리즘임.
6. 이미지 인식 알고리즘은 화면상의 이미지를 인식해서 내가 가지고 있는 이미지와 비교하는 것임. "첫 장" 인식의 문제를 해결할 수 있을 것 같음. 내가 받는 문서의 "첫 장"은 이렇게 생김
7. 문서 첫장을 어떻게 인식해야 하는지 o1에게 물어봄. o1은 "confidence"의 개념을 알려줌. 말 그대로 자신감임. 알고리즘이 "이 사진이 얼마나 타겟 사진과 비슷한가?"를 숫자로 알려줄 수 있음. 즉 지금 보는 이 페이지의 유사도가 허용치(Threshold)를 넘는 경우 "첫 장"이라 인식할 수 있음.
8. 간단하게 말했지만 코딩 문외한인 나에게는 진짜 머리에 쥐내리는 작업이었음. 모르면 새 대화 파서 이게 뭐냐 물어보기도 하고, 전통적으로 구글에다가 검색해서 테크닉을 알아보기도 하는 등 꽤나 어려웠음
9. 드디어 첫장 인식에 성공함 시발;;
10. o1은 처음에 "문서 제목"을 OCR로 인식하기를 바랬지만, 내가 OCR은 피해달라고 했음. 그리고 챗을 바꿔서 4o에게 "실마리가 될만한건 무엇이 있는가"라고 물어봤음.
11. 내가 생각치도 않았던 '바코드'를 인식하라고 함. 지나가는 사람이 이 문제를 보면 당연히 '야 바코드 인식은 안되겠냐?'가 처음으로 나왔을 거 같지만, 매일 문서에 파묻힌 나는 전혀 보지도 못했었음.
12. 4o에게 바코드 인식법을 물어봄. 파이썬으로 이렇게 하면 된다고 알려줌.
13. o1으로 가져가서 "이 코드에서 OCR 인식부분을 제거하고, 그 부분을 바코드 인식(4o가 준 것)으로 바꿔줘." 라고 말함.
14. 놀랍게도 ocr 부분이 제거되었고 바코드 인식으로 대체됨.
15. 장황하게 말했지만 즉 내가 한 건,
가. 수많은 페이지 속에 '첫 장'을 정확히 인식하고,
나. 그 '첫 장'이 몇 페이지인지 저장하고,
다. 그 '첫 장'속의 바코드 데이터를 읽어서,
라. 그 전의 첫장부터 지금 첫장까지 (즉 이전 문서의 시작부터 끝까지)를 따로 떼어내서,
마. 다른이름으로 저장하면서,
바. 바코드 데이터의 정보를 파일명으로 저장한 것임.
16. 물론 위가 끝이 아니지만 말이 더 길어질 것 같아서 자잘한건 생략하고, 큰 줄기는 위와 같음.
17. 예외 설정이 좀 있고 공부해야 할 것도 많아서 총 소요시간은 3일 (하루 5시간 정도, 15시간)정도 소요됨.
18. 다행히 영어를 할줄 알아서 prompt에 영어로 입력. 참고로 인공지능은 한국어로 설명시 이해력이 떡락함.
개선
1. 문서 9800장 넣고 백테스트 결과 오류율이 꽤 높았다.
2. 또 시간이 너무 걸림. 1장에 1초정도
3. 그래서 o1에게 (이쯤해서 o1 질문이 다시 충전됐던 것 같음) 알고리즘 개선 여지가 있나 물어봄.
4. 하지만 만족할만한 결과는 없었고 진정한 의미의 개선을 하지는 못했음.
5. 알트먼이 말했듯이 인공지능과 "협업"에 그 가치가 있다고 하지 않았음? 나도 나름 짱구를 굴려봤을때 바코드는 항상 우상단에 위치하므로 페이지를 잘라서 우상단만 보게하면 어떨까? 생각해봄
6. o1에게 페이지 우상단만 보면 속도가 개선될 것 같다고 말함.
7. 이새끼가 나를 칭찬하며 페이지를 우상단만 잘라서 그 부분만 비교하는 코드를 만들어줌.
8. 그 부분을 적용해봄. 또 가만 보다보니 오류도 개선함.
9. 1장에 1초정도 걸렸는데 재보니 0.05초정도로 속도가 믿을 수 없이 빨라짐. 이 이상은 사무용 컴퓨터라 빨라질것 같지도 않고, 만족함.
10. 9800장 넣고 백테스트 다시 진행해보니 오류율이 0%.
결과
1. 즉 일주일에 한번씩 의미없이 몇시간씩 꼴아박던거, 단 "5~10초"로 "딸깍" 성공.
2. 이 일이 중요도는 높은데, 단순 작업이고, 은근히 시간 많이 잡아먹는데, 자동화 할 수 없어서, 인턴 고용해서 이런 일 시켜 왔었음. 이번에 내가 인턴 자리를 없애버린 것임.
3. 미래에 내 자리도 이렇게 없어질거라 생각하니 마음이 좀 아프다... ㅠㅠ
4. 예전에 이 글 간략하게 한 번 쓴 적 있긴 한데 내가 어떻게 활용하고 있는지 공유하면 좋을거 같아서 써 봄.
5. 정확히 말해서 ai가 하는건 아니고 ai가 도와준건데, 대회 취지에 빗나가더라도 나랑 비슷한 사람 있으면 '이런 것도 되는구나' 했으면 싶어서 써봄.
특이점이 온다 갤러리
Copyright ⓒ 시보드 무단 전재 및 재배포 금지
본 콘텐츠는 뉴스픽 파트너스에서 공유된 콘텐츠입니다.

