Upstage의 기업 프로젝트로 데이터 사진으로부터 자동으로 필요한 정보를 추출하는 Post OCR Parsing 시스템을 AI 모델로 해결하는 프로젝트이다. 진행한 프로젝트는 명함 사진에서 이름, 전화번호, 직책, 이메일주소를 추출하는 모델 서비스를 제작하는 것이었다. 이를 위해 데이터 수집 과정부터 모델 성능 지표 설정 및 평가까지의 모든 과정을 정의하고 서비스를 구현하였다.
구글 설문을 이용해 188개의 이미지를 수집했고, 7개를 제외하고 학습에 52개는 학습 과정에서 활용하고 129개는 모델 성능 평가에 활용했다.
필수정보(한글 이름, 직책과 소속), 부가정보(전화번호, 팩스번호, 핸드폰번호, 이메일, 주소), 그 외의 정보(회사명, 영어이름, 웹 주소, 로고, 구분자)를 랜덤으로 생성 후, 제작한 형식에 맞춰 명함 이미지를 생성했다. 명함 이미지에 사용한 정보들은 BIO Tag를 함께 생성하여 AI 모델 학습에 사용했다.
Rule 기반 모델과 AI 모델을 각각 제작해 두 모델의 성능을 평가하고, 각각의 장단점을 확인하였다.
OCR API 결과에서 텍스트들을 grouping하는 과정을 거친 후, 각 텍스트의 카테고리를 분류하는 모델을 개발했다. 카테고리 사이의 간격이 짧다면 다른 카테고리의 단어가 묶인 경우에는 묶인 단어의 일부가 한 카테고리에 해당되면 다른 부분을 다시 Rule 기반 모델로 검사하는 반복 작업을 만들어 해결하였다.
OCR API로 추출한 텍스트들을 한 줄로 직렬화하고, 각 텍스트에 대해서 미리 정의한 카테고리로 분류하는 문제로 접근할 수 있다고 생각해 개체명 인식(NER; Named Entity Recognition)으로 해결하기 위해 모델을 설계했다. 개체명 인식 문제로 해결하는 방식 중 보편적인 BIO Tagging 방식을 채택했고, 분류 태그는 총 9개 태그로 구분하도록 했다.
평가 지표는 OCR API의 오류를 감안해 CER 기준 0.2 내의 오차는 수용하는 보정된 F1 score를 사용했다.
구창회 | 김지원 | 전민규 | 정준우 |
데이터 수집, 프론트엔드 개발 | Rule 기반 모델 구현, 수집 데이터 labeling, 발표 | PM, 데이터 생성 및 labeling, 발표 | OCR output 직렬화, AI 모델 구현 |
.
├─ ai_model/ # AI 모델 구현 관련 폴더
| ├─ data.py
| ├─ dataset.py
| ├─ main.py
| ├─ model.py
| ├─ ner_utils.py
| └─ utils.py
├─ app/ # Rule 기반 모델/AI 기반 모델 결과 도출 프론트엔드 구현 폴더
| ├─ static/
| | ├─ index.js
| | └─ style.css
| template/
| | └─ test.py
| ├─ grouping.py
| ├─ main.py
| └─ pyproject.toml
├─ data/ # 데이터 생성 및 제작 관련 폴더
| ├─ font/
| | └─ *.ttf
| ├─ pickle/
| | ├─ *.pickle
| | └─ tmp.ipynb
| ├─ create_info.py
| ├─ tmp.ipynb
| └─ utils.py
├─ md_res/ # markdown resource 저장 폴더
| └─ *.png
├─ rule_based_model/ # Rule 기반 모델 구현 폴더
| ├─ file_name.py
| ├─ metric.py
| ├─ rule_based_model.py
| └─ serialize.py
├─ .gitignore
└─ README.md