련이네글방 :: UiPath Document Understanding: Taxonomy, Digitize, Classify
이전 글
전체 파이프라인 중 (5단계) Extract에 진입했다. (4단계)
본인이 이전에 공부했었던 파이프라인에 비해서는 굉장히 짧은 편에 속한다. 하지만, 요 짧은 파이프라인을 돌리는 데에도 꽤 많은 시간이 들었다. 이유는, 학습, 재학습의 재학습이 반복되던 이슈였다...
주의사항!
Parellel을 활용해 문서를 병행 처리하려면, 본 4번 5번의 Extract, Export 과정을 하기전 변수의 Scope 영역을 제대로 잡아야한다.
Path 병행의 변수를 자칫 메인 스코프로 올려버리면, duText나 duDom 따위의 du 관련 변수들이 제대로 최신화되지 못하는 부분이 있다. 이 점에 유념해 Scope영역을 챙기는 것이 좋다.
duText 등의 변수를 모두 메인 단에 선언한 경우 | duText등의 변수를 올바른 Scope에 선언한 경우 (기대값) |
4. Extract
이제 남은 Extract를 보겠다.
이 단계에서는 총 3가지의 기술을 쓸 수 있다. 이곳에서는 모두 소개하도록 하겠다.
우선 두 가지를 먼저 이야기 하면, Form은 로컬에서 라벨링을 하는 것이고 Regex는 텍스트의 규칙성을 찾아내는 것이다. 전자는 조금더 영역을 강화하여 OCR하는 방식이라면 후자는 파싱에 가깝다.
> duText, duDom, duExtractionResult: Scope영역 >
4-1. Form Extractor
Form 템플릿 관리를 열어 템플릿을 구성해야 한다. 여기서는 따로 불러오지 않고 새로 제작해 보겠다.
이전 배포한 샘플 파일을 템플릿 문서(PDF)로 삼는다면 최종적으로 다음과 같은 화면을 보게 된다.
좌측에는 이전 Taxnomy에서 지정한 필드들이고 우측은 내가 지정한 문서를 그대로 가져온 것이다.
이제 여기서 자체적인 라벨링을 해야하는데, 우측 화면에서 마우스를 활용해 글자 및 문자들을 클릭하면 선택이 될 것이다.
하지만 위와 같이 선택할 경우 원하는 필드의 + 버튼이 활성화 되지 않는다. 이제 단순 클릭이 아니라 드래그로 해당 영역을 집어보겠다.
해당 지정 영역으로 선택할 경우 좌측에 원하는 필드의 + 버튼이 활성화 되었다. 이렇게 추가해야 올바르게 인식된다.
최종적으로 Invoice No과 Total 쪽에 라벨이 생겨 인식된다.
단, 테이블은 좀 다르다.
우측 하단에 바둑판 모양을 눌러 테이블 창을 우측에 활성화한다.
우측 ... 눌러 [새 테이블 추출] 활성화
좌측 하단에 아이콘을 참고하여 테이블 영역을 지정하면 된다. 저장은 우측에 있다.
1 페이지 일치 정보는 5개의 단어가 선택되어야 하니 문서의 단어를 5개 이상 선택하면 된다.
e.g.)
최종적으로 원하는 필드가 모두 체크표시 된 것을 확인 후 제출하게 되면 다음과 같이 템플릿 목록이 추가된다.
목록 우측에 연필 및 X 아이콘으로 재편집 혹은 삭제를 할 수 있다.
4-2. Regex Extractor
매니저 창을 열고 필드를 눌러보면 수식을 입력하라고 나온다...
진짜 정규 표현식을 기반으로 텍스트를 추출하는 것이며, 위 Form 과 마찬가지로 별도의 학습은 없다. 따라서 오류 발생이 농후하다. 여기에서는 Invoice Number 한 항목만 확인하고 넘어가겠다.
Invoice No 의 규칙을 살펴보면
앞 세 글자는 [LTS] 이고 뒤는 총 8자리의 숫자로 이루어져 있다. 이를 정규식으로 표현하면 이렇다.
LTS\d{8}
나머지 필드도 이런 식으로 문자열의 규칙을 파악해 정규식을 채워넣으면 된다. 하지만 이미 언급했듯이 학습으로 추출하는 행위가 아니기에 조금이라도 규칙을 벗어난 문자열에는 속수무책이다.
4-3. Machine Learning Extractor
이제 DU를 쓰는 이유가 이 추출기 때문이다. 이 추출기는 오케 내 AI Center로 문서를 학습시킨 뒤 그 데이터를 바탕으로 추출하는 것이다.
당연하지만, 해당 ML 파일을 생성하려면 이 스튜디오가 아닌 오케로 가야한다.
AI Center 확인 | 없을 경우 Setting의 AI Center 활성화 확 |
센터에 진입한 모습이다. 프로젝트가 없다면 우측 빨간 글씨의 [Create Project + ] 버튼을 활용해 추가하면 된다.
Datesets: 라벨링 따위가 보관될 데이터 이름 | |
Data Laberling: 라벨링 파일 생성 및 작업 | |
ML Packages: 라벨링 작업이 완료된 파일 | |
Pipelines: 학습 작업 진행 및 현황 확인 | |
ML Skills: 일련의 과정으로 학습이 완료된 학습 파일 |
4-3-1: Datasets
우측 상단에서 [Create New]를 통해 새로 만들 수 있다.
나머지 정보는 그냥 입력하면 된다.
Create 를 눌러 제작을 마치면 위와 같이 목록이 생긴다. 이 상태에서 다음 라벨링으로 넘어가면 된다.
4-3-2: Data Labeling
만드는 법은 조금 다르지만 크게 어렵진 않다
UiPath Document Understanding 선택 | 라벨링의 이름 및 데이터 셋 선택 |
단 라벨링 규칙은 띄어쓰기, 특수문자, 하이폰 등이 안된다.
오로지 영어와 언더바(_)만 가능하다.
제작 후 하단에 생성된 라벨링 세션에 진입하면 된다.
세션 진입 후 우측 상단 구석에 보면 톱니바퀴의 설정 버튼이 보인다.
설정에 진입하면 OCR 함수를 정할 수 있다.
현 기준으로는(2025-01-31) UiPath Extended Languages OCR (Preview) 프리뷰지만 이게 가장 좋다고 다들 업데이트 중이다. 총 200 언어 지원.
세션에 진입하면, 상단 가운데 쯤 있는 [Import] 버튼을 볼 수 있다. 필자는 미리 제공한 100개의 인보이스 중 75개만 학습용으로 쓰고 나머지 25개는 검증용으로 쓰겠다. 검증용은 [Make this an evaluation set] 버튼을 눌러 활성화하면 된다.
까지 왔으면 [Import]를 눌러 문서를 오케에 올리면 된다. 이름은 역시 영어+언더바 만 가능하며, 여기서 정해진 라벨링 그룹 이름은 수정이 불가능하다!
이 과정이 오래걸린다.
최종적으로 임포팅이 완료되면 다음과 같은 화면이 펼쳐진다.
여기서부턴 간단하다. 우측 [REGULAR FIELDS]의 + 버튼을 눌러 추출하려는 필드(지금은 Invoice Number와 Total)를, 상단에 [COLUMN FIELDS]를 눌러 테이블(여기서는 ITEM FIELD다)을 추출하면 되겠다.
단, 추출 필드 생성 중에 Shortcut 즉, 단축키가 매우 중요한데 왜냐하면 라벨리은 반복작업이기 때문이다.
웬만하면 단축키는 좌측 키보드를 사용하는 편이 편하다. 특히 스타크래프트2를 즐겨하는 나로써는 웬만하면 이 단축키는 좌측에 다 몰아넣는다. 그래야 작업 속도가 빨라진다.
최종적으로 필드 정의가 완료되면 드래그로 라벨링을 한 후 단축키를 눌러 지정하면된다.
라벨링은 저장 버튼이 따로 없다. 그냥 지정하면 정보가 업데이트 되고 취소하려면, 해당 라벨링을 선택하고 ← (지우기, 백스페이스) 키를 누르면 지워진다.
겹줄 처리는 [/]키를 누르면 되고 다음 페이지로 가려면 [Alt+→] 키를 누르면 된다.
라벨리을 마치면 import 옆 [Export] 버튼이 있다.
최종적으로 우측 하단에 [Export to AI Center] 버튼을 누르면 라벨링 내보내기 작업이 실행된다.
해당 작업은 [Export] 버튼이 점멸되면 종료된 것이다.
4-3-3: ML Package
라벨링을 마치고(참고 - 본인은 위 인보이스 100장 하는 데에 약 30분 정도 걸렸다.) 이제 파이프라인에 올리기 위한 패키지를 마련해야한다.
이 중에 가운데에 있는 [Out of the box packages]를 택할 것이다. 나머지는 외부 파일을 가져오는 방식이다.
해당 버튼을 누르면 다시 비슷한 창이 뜨는데, 난 제일 첫번째의 [UiPath Document Understanding] 택하겠다.
에서 또 쫙 뜬다.
아래로 쭉 내리면 DocumentUnderstanding이 존재한다.
최종 생성 직전 화면이다.
Submit을 눌러 진행한다.
4-3-4: Pipelines
역시 우측 상단 [Create new] 버튼을 눌러 생성 창에 진입한다.
생성 창의 정보를 쭉 입력하다 dataset에서 창 하나가 뜨는데, 여기서 중요하다.
바로 우측 끝 [Select]를 누르지 말고 해당을 누르면 폴더를 들어가게 된다.
폴더 내부에 export 폴더에서 한 번 더 들어가 label 이 붙은 것을 [Select]하면 된다.
하단의 옵션은 각 환경에 맞춰서 설정하면 된다.
GPU가 달려있으면, 옵션을 활성화하는 것을 추천한다. 필자는 사무용 노트북이라 없어서... 못한다 ㅠㅠ
이 파이프라인이 많게는 5-6시간 걸리는 가장 오래 걸리는 작업이다.
이게 작업 상 파이프라인이 적어도 실제 학습을 돌리면, 꽤 많은 시간을 잡아먹는 개발이 되겠다.
4-3-5: ML Skills
역시 제작 방법은 크게 다르진 않다. 우측 상단에 [Create new] 버튼을 누르고 ML Skill 생성 창으로 진입한다.
일련의 정보를 기입하면 된다.
Deploying 후 최종적으로 스킬이 Available 상태가 되면 이제 스튜디오에서 추출을 위한 MLSkill 값을 가져올 수 있다.
위 그림처럼 오케에서 만든 스킬이 스튜디오에서 잡히면 된다.
관리자 내부로 진입해 라벨링한 필드 값까지 잡히는지 확인한다.
그리고 Taxonomy에서 만든 필드값과 매칭시켜주면 된다.
단, 해당 MLSkill은 장 수 제한이 있어 보인다.
Data Extraction Scope - Form & Regax Extractor: Request CorrelationId: 1d710aff-fedf-4358-b4ec-8c65721ed679
Request PredictionId: {{PredictionId}}
Invalid response: content=ML Skill unavailable code=TooManyRequests trace_id=77bedef3-75f6-4f95-9f3e-be3b7c7d5a68
Http Response Code: 429
Http Response Content:
Cloudfare CF-RAY:
AppId:
코드 중간에 보면 [TooManyRequests]라는 문구가 보인다. 말 그대로 라이센스가 프로급이라 한번에 막 100장 밀어넣으면 안되는 것이다.
>> 12개까지는 동시 처리 해주는 것 확인 그 이후 부터(13개 동시처리)는 해당 오류가 발생한다.
4-4: Extract Validate
duExtractionResult.HasExceptions()
코드로 분기 넣어두고 나머지 과정은 위쪽 액션센터에서 했던 내용과 비슷하다. 다만, 이번엔 라벨링을 바로잡는 과정이다.
[Assign to self] 를 눌러 나에게 할당
할당 후 지정된 필드 값 가져와 재 라벨 후 하단에 [Submit] 처리
5. Export
Export 는 사실 늘 해왔던 Parsing 싸움이다.
Export에서는 최종 추출 데이터를 DataTable들의 형태로 만들어주는 역할만 할 뿐이다.
여기서 왜 단일 DataTable이 아니냐면, 여태 라벨링 했던 것 중에 테이블이 포함되어 있기 때문이다. 해당 테이블을 어떻게 같은 시트내로 파싱할 수는 없으므로 일단 테이블 형태로 뜯어서 주는 것 같다.
단순 필드 | 테이블 형 |
단순 필드 - 데이터 형 지정 | 테이블 형 - 데이터 형 지정 |
가져온 테이블의 쌩자 데이터는 위와 같은 모습이다.
지금 머릿말, 헤더가 빠져서 그런데, 말 그대로 필드는 [Simple Fields]라는 단독 시트로, 테이블 형은 [Items]라는 시트에 따로 보관하여 준다. Formatted는 Taxonomy와 라벨링 단계에서 지정했던 데이터 형으로 바꿔준 형태이다.
분할 테이블 처리 로직 | 테이블 추출 |
파싱영역은 개개별 달라지기에 따로 다루진 않겠다. 여튼 필자는 개별 필드일 때와 테이블일 때를 분리하여 합산한 후 시트에 뿌리는 방식으로 꾸몄다. 단, 이렇게 할 경우 문서가 병행처리 되기에 순서는 뒤죽박죽이 된다.
마무리.
마무리는 최종 로직 형태와 API를 뺀 파일을 공유하면서 마치도록 하겠다.
DU 구현 파일 (API키 제외)
'RPA' 카테고리의 다른 글
UiPath Document Understanding: Taxonomy, Digitize, Classify (0) | 2025.01.22 |
---|---|
UiPath Excel to HTML (2) | 2024.11.27 |
UiPath 0xc0000005 오류 (0) | 2024.11.25 |
Content Generation - 생성형 인공지능 (0) | 2024.09.04 |
UiPath Image 처리 (0) | 2024.08.23 |