GN⁺: Show HN: LLM-Aided OCR – LLM으로 Tesseract OCR 오류 수정
(github.com/Dicklesworthstone)- 광학 문자 인식(OCR) 출력의 품질을 크게 향상시키기 위해 설계
- 최신 자연어 처리 기술과 대형 언어 모델(LLM)을 활용하여 원시 OCR 텍스트를 매우 정확하고 잘 형식화된 읽기 쉬운 문서로 변환
기능
- PDF를 이미지로 변환
- Tesseract를 사용한 OCR
- LLM(로컬 또는 API 기반)을 사용한 고급 오류 수정
- 효율적인 처리를 위한 스마트 텍스트 청킹
- Markdown 형식 옵션
- 헤더 및 페이지 번호 억제(선택 사항)
- 최종 출력의 품질 평가
- 로컬 LLM 및 클라우드 기반 API 제공자(OpenAI, Anthropic) 지원
- 성능 향상을 위한 비동기 처리
- 프로세스 추적 및 디버깅을 위한 상세 로깅
- 로컬 LLM 추론을 위한 GPU 가속
요구 사항
- Python 3.12+
- Tesseract OCR 엔진
- PDF2Image 라이브러리
- PyTesseract
- OpenAI API(선택 사항)
- Anthropic API(선택 사항)
- 로컬 LLM 지원(선택 사항, 호환 GGUF 모델 필요)
사용 방법
- 프로젝트 디렉토리에 PDF 파일을 배치
-
main()
함수의input_pdf_file_path
변수를 PDF 파일명으로 업데이트 - 스크립트 실행:
python llm_aided_ocr.py
- 스크립트는 최종 후처리 텍스트를 포함한 여러 출력 파일을 생성
작동 방식
LLM-Aided OCR 프로젝트는 원시 OCR 출력을 고품질의 읽기 쉬운 텍스트로 변환하기 위해 다단계 프로세스를 사용:
-
PDF 변환:
pdf2image
를 사용하여 입력 PDF를 이미지로 변환 - OCR: Tesseract OCR을 적용하여 이미지에서 텍스트 추출
- 텍스트 청킹: 원시 OCR 출력을 관리 가능한 청크로 분할
- 오류 수정: 각 청크는 LLM 기반 처리를 통해 OCR 오류를 수정하고 가독성을 향상
- Markdown 형식화(선택 사항): 수정된 텍스트를 깨끗하고 일관된 Markdown으로 재형식화
- 품질 평가: LLM 기반 평가를 통해 최종 출력 품질을 원래 OCR 텍스트와 비교
GN⁺의 정리
- LLM-Aided OCR 프로젝트는 최신 자연어 처리 기술과 대형 언어 모델을 활용하여 OCR 출력의 품질을 크게 향상시키는 시스템임
- PDF를 이미지로 변환하고, Tesseract를 사용하여 텍스트를 추출한 후, LLM을 통해 오류를 수정하고 Markdown 형식으로 재구성함
- 로컬 및 클라우드 기반 LLM을 모두 지원하며, 비동기 처리를 통해 성능을 최적화함
- 이 프로젝트는 OCR 출력의 정확성과 가독성을 높이기 위해 다양한 고급 기능을 제공하며, 특히 대형 문서 처리에 유용함
- 유사한 기능을 제공하는 프로젝트로는 ABBYY FineReader, Adobe Acrobat OCR 등이 있음
Hacker News 의견
-
새로운 schnell 모델 출시로 SOTA 비전 모델을 생산할 수 있는 데이터셋 확보 가능성 있음
- 현재 대부분의 비전 모델은 오래된 CLIP/BLIP 캡션에 기반하고 있음
- LLAVA나 phi-llava 같은 모델도 여전히 사전 학습된 비전 컴포넌트에 의해 제한받고 있음
- Tessy와 LLM의 파이프라인이 효과적이며, 다국어 모델이 디지털화된 작업을 읽고 번역할 수 있는 가능성 열림
- LLAVA-PHI3는 히브리어를 일관되게 전사할 수 있지만 환각 문제 있음
- 새로운 SOTA 비전 모델이 나오면 품질이 크게 향상될 것으로 기대됨
-
과학 논문에서는 meta의 nougat 모델이 가장 적합함
- 청구서와 기록에서는 donut 모델이 더 나음
- 두 모델 모두 일부 경우 실패할 수 있으며, LLM을 사용해 문제를 해결해야 함
- OCR 과정에서 세부 사항이 손실되므로 표와 차트를 정확히 처리하기 어려움
- Google Gemini가 이미지에 대한 미세 조정 기능을 제공하지만 시도해보지 않음
- 몇 번의 샷 프롬프트가 LLM의 환각을 방지하고 요청된 형식에 맞추는 데 도움됨
-
과거에 시도해본 결과, 90%의 경우 잘 작동함
- 임대 계약서와 같은 문서에서는 숫자와 이름(사람이나 장소의 이름/주소)에서 어려움이 있음
- LLM이 정확히 임대료를 알거나 특정 사람의 이름을 알 수 없음
-
PDF 페이지를 PNG로 변환하고 gpt4에 이미지를 전사하도록 요청하면 매우 정확함
- Tesseract나 고전적인 OCR보다 더 정확함
-
10년 전 Tesseract를 사용해 중국어를 OCR로 인식하려고 시도했음
- 영어 텍스트 인식 후 정리하기 쉬움
- 중국어는 글자 하나가 잘못 인식되면 오류를 감지하기 어려움
- 이미지 마법을 사용해 이미지를 변형하고 Tesseract에 보내 인식된 문장의 통계적 빈도를 기반으로 승자를 투표함
- 정확도가 크게 향상됨
-
PaddlePaddle을 사용해 더 나은 결과를 얻었음
- PPOCRv3를 사용해 단어 수준으로 책을 자르는 Python 구현을 작성함
- PPOCRv4는 픽셀 크기 제한이 없으므로 "바로 사용할 수 있음"
- PPOCRv3 탐지 모델이 더 잘 작동했음
-
다른 OCR 패키지를 사용해보았는지 질문함
- Tesseract가 "77"을 "7"로 읽는 문제를 겪었음
-
프롬프트를 조정해 모델이 더 명확하게 이해하도록 하는 것이 중요함
- LLM과 문서에 대해 많은 생각을 함
- OCR이 곧 완전히 해결될 문제라고 생각함
- 복잡한 문서의 모호성과 세부 사항을 AI 모델에 효과적으로 설명하는 것이 도전 과제임
-
rubrics와 학생 제출물을 파싱하는 유사한 작업을 하고 있음
- GPT-4V와의 통합에 관심 있음
- 이메일로 연락을 원함
-
"fix this text" 프롬프트를 사용해 OCR 오류를 수정하는 접근 방식에 대해 질문함
- 채팅 모델 대신 완성 모델을 사용해 토큰별로 입력하고 다음 토큰 확률을 얻는 방법을 제안함
- 이 방법이 환각을 크게 줄일 수 있을 것이라고 생각함