구글 Gemini 모델의 문서 OCR 평가 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인공지능
대상자
- 대상자: AI 개발자, 데이터 과학자, OCR 시스템 구축자
- 난이도: 중급~고급 (API 사용, JSON 처리, 성능 평가 기법 필요)
핵심 요약
- Gemini 1.5 Pro/Flash 모델은 다중 모달성(텍스트/이미지/비디오 처리)을 통해 구조화된 인вой스 데이터(invoice_number, total_amount 등)를 JSON 형식으로 추출
- Hugging Face
invoices-donut-data-v1
데이터셋을 사용해 Character Error Rate (CER) 및 필드별 정확도를 평가 flatten_dict
함수를 통해 중첩된 JSON 구조를 평탄화하고, 필드별 CER 계산 및 완전 일치율(Exact Match) 측정
섹션별 세부 요약
1. 인вой스 처리 문제와 OCR의 중요성
- 문제: 수작업 인вой스 처리는 오류 발생 가능성과 시간 소모가 높음
- OCR의 역할: 스캔된 문서를 구조화된 JSON 데이터로 변환, 필드별 추출(invoice_number, line_items 등)
- Gemini의 차별점: 다중 모달성으로 시각적 레이아웃 + 텍스트 패턴 이해
2. 평가 데이터셋: `invoices-donut-data-v1`
- 구성 요소:
image
: 인вой스 이미지ground_truth
: 수작업으로 추출된 JSON 형식의 정답 데이터 (예:"gt_parse.invoice_number": "12345"
)- 사용 목적: Gemini의 OCR 정확도와 필드 일치율 평가 기준
3. Gemini API 통합 및 Python 코드
- API 호출 예시:
```python
import google.generativeai as genai
model = genai.GenerativeModel('gemini-pro-vision')
prompt = "Extract invoice details in JSON format: {\"gt_parse\": {\"invoice_number\": \"\", ...}}"
response = model.generate_content([prompt, image])
```
- 필수 구성 요소:
- API_KEY 인증
- JSON 형식의 필드 구조 명시 (예:
line_items[0].description
)
4. 평가 지표 및 코드 구현
- CER 계산:
```python
from jiwer import cer
field_cer = cer(gt_val, pred_val) # 0.0은 완전 일치
```
- 정확도 계산:
```python
acc = correct_matches / total_fields # 필드별 완전 일치 비율
```
flatten_dict
함수:
```python
def flatten_dict(d, parent_key='', sep='.'):
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, dict):
items.extend(flatten_dict(v, new_key, sep=sep).items())
elif isinstance(v, list):
for i, item in enumerate(v):
items.extend(flatten_dict(item, f"{new_key}[{i}]", sep=sep).items())
else:
items.append((new_key, str(v)))
return dict(items)
```
결론
- Gemini 모델 평가 시:
- 구조화된 JSON 형식의 프롬프트를 사용해 필드별 추출 지시
invoices-donut-data-v1
데이터셋으로 CER과 완전 일치율 측정flatten_dict
함수를 통해 중첩된 JSON 구조를 평탄화해 평가- 정확도 개선: 필드별 CER 최소화 및 완전 일치율 증대를 목표로 하며, API 호출 시 JSON 형식의 필드 명시 필요