5P by neo 3달전 | favorite | 댓글 1개
  • 광학 문자 인식(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 모델 필요)

사용 방법

  1. 프로젝트 디렉토리에 PDF 파일을 배치
  2. main() 함수의 input_pdf_file_path 변수를 PDF 파일명으로 업데이트
  3. 스크립트 실행:
    python llm_aided_ocr.py  
    
  4. 스크립트는 최종 후처리 텍스트를 포함한 여러 출력 파일을 생성

작동 방식

LLM-Aided OCR 프로젝트는 원시 OCR 출력을 고품질의 읽기 쉬운 텍스트로 변환하기 위해 다단계 프로세스를 사용:

  1. PDF 변환: pdf2image를 사용하여 입력 PDF를 이미지로 변환
  2. OCR: Tesseract OCR을 적용하여 이미지에서 텍스트 추출
  3. 텍스트 청킹: 원시 OCR 출력을 관리 가능한 청크로 분할
  4. 오류 수정: 각 청크는 LLM 기반 처리를 통해 OCR 오류를 수정하고 가독성을 향상
  5. Markdown 형식화(선택 사항): 수정된 텍스트를 깨끗하고 일관된 Markdown으로 재형식화
  6. 품질 평가: 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 오류를 수정하는 접근 방식에 대해 질문함

    • 채팅 모델 대신 완성 모델을 사용해 토큰별로 입력하고 다음 토큰 확률을 얻는 방법을 제안함
    • 이 방법이 환각을 크게 줄일 수 있을 것이라고 생각함