728x90

구조화되는 데이터 추출의 필요성

 오늘 공부할 내용은 템플릿 화해되어 있는 문서에서 구조화되는 데이터 추출하기(Extracting Structured Data from Templatic Documents)에 대한 내용입니다. 다양한 사업분야에서 영수증, 주문서 등의 템플릿 호된 문서들을 많이 사용하는데, 이를 정리하는 데 노력이 많이 들고 현재의 자동화된 시스템은 에러도 많고 불안정합니다. 하나의 문서 종류도 회사나 부서에 따라 여러 가지의 템플릿 호될 수 있지만 그 문서들 안에는 같은 콘텐츠들(=필드)을 대부분 공유하고 있습니다. 필드 예시에는 송장 날짜, 항목 합계 등이 있습니다. 이런 콘텐츠(날짜와 가격 같은)를 모두 추출해 주는 자동화 시스템이 만들어진다면 수작업으로 하는 노력도 줄어들고 오류도 줄일 수 있어 효율적인 일처리에 도움이 될 것으로 기대됩니다.

 

NLP와 CV 모두를 아우르는 문제

 이게 쉽게 해결될 수 있는 문제라는 생각이 들 수 있지만 NLP와 CV 모두를 아우르는 문제로서 상당히 어려운 문제임을 알 수 있습니다. NLP의 문제라기에는 문서 안에 제대로 구성된 문장들이 별로 없고, 표나 여러 서식들이 포함되어 이를 이해하는 데 어려움이 있습니다. 단순 CV 문제로 풀기에는 문서 안의 의미적인 부분들이 해석되지 않는 것도 어려움을 증가시킵니다.

 

제안한 추출 시스템의 구조

 전반적인 추출 시스템을 만들기에 앞서, 두 가지의 인풋이 준비되어야 합니다. ① 타깃 스키마 (<추출할 필드(field) 목록, 필드의 타입>, 필드의 타입은 미리 정해놓거나 Google Knowledge Graph 참고합니다), ② 필드들이 레이블 된 학습 데이터를 준비해야 합니다. 일단 이 두 가지를 이용하여 값이 주어질 때 해당 필드에 부합하는 것에 대한 학습을 미리 해놓는 것으로 가정합니다.

 추출 시스템은 크게 세 가지 단계로 이루어집니다. ① Candidate Generator : OCR(사진에서 텍스트 추출해 내는 기술)로 추출된 텍스트 중에서 알아내고자 하는 필드(송장 날짜, 총계)에 해당할 수 있는 텍스트 후보들 선택하는 단계입니다. ② Scorer : 학습된 NN 기반으로 해당 후보가 알아내고자 하는 필드에 적합한지에 대한 점수 계산하는 단계입니다. ③ Assigner : 후보들의 문서에서의 순서도 고려하여(가령 합계는 각 항목 금액이 나타난 뒤에 나옴) 점수가 높은 값으로 최종 값을 선택하는 단계입니다.

여기서 새로 개발한 부분은 바로 Scorer로, 타깃 필드와 추출된 후보들을 인풋으로 받으면 위에서 봤듯이 이 후보들에 대한 점수(0~1)를 계산하여 결과로 도출합니다.

 추출하고자 하는 필드(송장 날짜)의 후보는 한 네모 상자로 표현되는데, 페이지 내에서 표시되는 추출하고자 하는 필드와 연관된 이웃 token들과의 상대적 위치를 계산하여 해당 후보를 표현하는 방법을 씁니다. 이때, 후보의 값 자체는 과적합의 문제가 생길 수 있어 후보를 표현하는 데 쓰이지 않습니다

 위에서 말한 후보 표현을 하고, 점수를 매기는 Scorer 모델 구조는 다음과 같습니다. (Model Architecture) ① word embedding을 통해 이웃 token들을 임베딩합니다. ②두 개의 ReLU 레이어를 이용하여 이웃 token의 상대적 위치 임베딩합니다. ③ ①과 ②를 합칩니다. ④ 각 이웃 간의 맥락을 고려하고 이웃들을 통합하여 표현하기 위해 Self-Attention와 Max-pooling을 이용하여 이웃 인코딩을 만듭니다. ⑤ 그 페이지에서 실제 위치는 ②의 방법을 이용하여 임베딩하고 ④와 합칩니다. ⑥ 마지막으로, 추출하고자 하는 필드 임베딩(필드 임베딩은 이미 ground truth로 학습되어 있음)과 후보 임베딩의 유사성을 비교하여 0~1 사이의 값으로 도출합니다.

정확도 실험 및 궁금했던 점

 대부분의 필드에서 좋은 F1-score가 나왔습니다. 아직 좀 보완해야 할 부분들이 많지만, NLP + CV의 기술들을 적용해서 템플릿 호된 문서를 정리하는 데 많은 도움이 될 수 있는 시스템을 만들었다는 데에 의의를 둡니다. 그리고 과적합되지 않도록 정보의 위치를 기반하여 학습 모델을 만들고 정보를 도출해낸다는 것이 참신합니다. 다른 최신 알고리즘을 더 도입해 볼 예정입니다.

 궁금했던 점은, 그럼 다양한 템플릿에 따라 타깃 스키마를 사용자가 스스로 정해야 하는 것인가? 그렇다면 전문가의 도움이 꼭 필요하지 않을까라는 점. 여기에 대해서는 얼마만큼의 노력이 필요한가?라는 점들이었습니다. 그리고 이 모든 게 OCR을 기반으로 하는 기술인데 그럼 OCR의 성능에 많이 의존해야 할 것 같은데 여기에 대해서 문제는 없는가? (만약 영문이 아닌 다른 나라 언어가 섞여있다면?)에 대한 의문도 존재했습니다. 오늘 배운 부분도 하이브리드 시스템을 만든 것이 장점인 것 같습니다. 알고리즘을 새로 만드는 것도 중요하지만, 알고리즘을 시스템에 맞게 적절하게 사용하는 것을 제안하는 것도 중요한 연구라는 걸 새삼 깨달았습니다.

 

728x90

+ Recent posts