Chương 3 XÂY DỰNG DỮ LIỆU
3.1. Một số bộ dữ liệu hóa đơn hiện có
3.1.2 Bộ dữ liệu Consolidated Receipt Dataset (CORD)
3.1.2.1. Tổng quan
CORD[14] cũng là một bộ dữ liệu được ra đời vào năm 2019, nhóm tác giả của CORD nhận thấy rằng, SROIE dù có thể được dùng để thúc đẩy các nghiên cứu trong cả 2 nhiệm vụ là OCR và rút trích thơng tin nhưng vẫn cịn một vài thiếu sót như: khối lượng dữ liệu còn hạn chế, còn thiếu bounding box cho từng từ, … dẫn tới khó có thể đào tạo một model có hiệu suất tốt. Với mong muốn xây dựng một bộ dữ liệu lớn hơn, đầy đủ hơn, nhóm tác giả đã cho ra đời bộ dữ liệu CORD, được công bố trong bài báo CORD: A Consolidated Receipt Dataset for Post-OCR Parsing[14][14].
53
Bộ dữ liệu này dự kiến bao gồm 11,000 ảnh (nhóm tác giá chỉ mới public 1,000 ảnh mẫu) các hóa đơn tại Indonesia. Các ảnh này được làm mờ những thông tin nhạy cảm như họ tên, số điện thoại, … sau đó được gán nhãn đầy đủ và chi tiết với 5 superclass và 42 subclass, ngoài ra, bộ dữ liệu cịn được gán nhãn các thơng tin chung của ảnh như: vùng quan tâm (roi), kích thước ảnh, …
CORD được chia thành 3 phần, gồm train, dev, test, với 1,000 ảnh đã được cơng bố, nhóm tác giả chia thành 800 ảnh train, 100 ảnh dev và 100 ảnh test.
3.1.2.2. Định dạng file annotation
File annotation của bộ dữ liệu CORD được cấu trúc dưới dạng json và được mơ tả chi tiết qua bảng sau:
Tên thuộc tính Mô tả
valid_line Thơng tin về một dịng trong hóa đơn
word Thơng tin các từ trong hóa đơn
quad Thơng tin 4 tọa độ bounding box của từ is_key Từ này có được dùng làm từ khóa hay
khơng?
row_id Id của dịng trong hóa đơn
text Transcript của từ
category Nhãn của dòng group_id Group id của dòng
--------------------- ------------- --------- -----------------------------------------------
meta Thông tin chung của ảnh
version Phiên bản của bộ dữ liệu image_id Id của ảnh
54
image_size Thơng tin kích thước ảnh
--------------------- ------------- --------- -----------------------------------------------
roi Thông tin 4 tọa độ bounding box của
hóa đơn.
--------------------- ------------- --------- -----------------------------------------------
repeating_symbol Thông tin những ký tự đặc biệt trong hóa đơn
quad Thông tin 4 tọa độ bounding box của ký tự
text Transcript của ký tự
Bảng 3-1: Bảng mơ tả ý nghĩa các thuộc tính trong annotation của bộ dữ liệu CORD
3.1.3 Bộ dữ liệu cuộc thi Mobile-Captured Image Document Recognition for Vietnamese Receipts (RIVF2021 MC-OCR) for Vietnamese Receipts (RIVF2021 MC-OCR)
3.1.3.1. Tổng quan
Năm công bố: 2021. Đơn vị công bố: VNDAG.
Bộ dữ liệu bao gồm 3 phần tương ứng với 3 giai đoạn của cuộc thi:
− Warm-up: 403 ảnh train và 101 ảnh test.
− Public test: 1,155 ảnh train và 391 ảnh test.
− Private test: 391 ảnh test.
Trong đó, các ảnh train được annotation đầy đủ cịn các ảnh test thì khơng. Trong mỗi ảnh, các dịng chứa thơng tin người bán, địa chỉ cửa hàng, thời gian bán, tổng tiền được xác định tọa độ, phân loại (SELLER, ADDRESS, TIMESTAMP, TOTAL_COST) và có transcript nội dung thơng tin.
55
3.1.3.2. Định dạng file annotation
File annotation của bộ dữ liệu này được lưu dưới dạng file .csv, với 6 cột dữ liệu bao gồm:
− img_id: Tên ảnh.
− anno_polygons: Thơng tin các bounding box. Có cấu trúc như sau (Cấu trúc mẫu đã sửa để dễ theo dõi, thông tin trong bộ dữ liệu thực tế được thể hiện trên 1 dòng liên tục):
[ { 'category_id': 18, 'segmentation': [[140.1, 518.5, 136.6, 531.5, 80.8, 532.7, 85.5, 519.1]], 'area': 729, 'bbox': [81, 519, 59, 14], 'width': 472, 'height': 1024 }, ... { 'category_id': 18, 'segmentation': [[263, 518.5, 317, 516.7, 313.4, 528.6, 260.6, 529.7, 263, 516.7]], 'area': 616, 'bbox': [261, 517, 56, 13], 'width': 472,
56 'height': 1024
}
]
− anno_texts: Transcript của các bounding box. Có dạng: transcript1|||transcript2|||…|||transcriptN (tương ứng với thứ tự bounding box trong anno_polygons).
− anno_labels: Nhãn của các bounding box. Có dạng: category_name1|||category_name2|||…|||category_nameN (tương ứng với thứ tự bounding box trong anno_polygons và được sắp xếp theo thứ tự của category_id).
− anno_num: Số lượng bounding box.
− anno_image_quality: Chất lượng ảnh (được tính bằng phương pháp RMSE).
3.2. Thu thập dữ liệu
Các hóa đơn sẽ được thu thập từ nhiều nguồn khác nhau như các cửa hàng, quán ăn, siêu thị, … và được chụp hoặc scan lại bằng điện thoại với nhiều góc độ, nhiều ngữ cảnh, …, ngồi ra, cịn có một số ảnh hóa đơn từ các trang mạng xã hội.
Dữ liệu thu thập được sẽ được làm sạch bằng cách:
− Loại bỏ các ảnh quá mờ, khơng thể nhìn rõ chữ.
− Loại bỏ các ảnh chứa ít hơn 2 lớp đối tượng cần trích xuất.
3.3. Gán nhãn dữ liệu
3.3.1 Quy trình gán nhãn dữ liệu
Ở bước gán nhãn dữ liệu, chúng tôi sử dụng model Faster R-CNN đã được train qua bộ dữ liệu của cuộc thi MC-OCR để dự đốn bounding-box của các thơng tin cần được trích xuất (tên cửa hàng, địa chỉ cửa hàng, thời gian in hóa đơn, tổng tiền). Sau đó, chúng tôi tiến hành sửa tay các bounding-box này để bộ dữ liệu được
57
chính xác. Sau khi sửa các bounding-box, chúng tơi tiếp tục gán nhãn transcript trong các bounding box này. Do vậy, annotation của bộ dữ liệu được phỏng theo định dạng COCO[12] và có sự thay đổi nhỏ cho phù hợp với yêu cầu của bài toán.
Bộ dữ liệu mới được xây dựng dựa trên bộ dữ liệu cuộc thi Mobile-Captured Image Document Recognition for Vietnamese Receipts với một số quy tắc gán nhãn như sau:
− Mỗi đối tượng chỉ gồm một dịng, những thơng tin bị xuống hàng sẽ được gán thành một đối tượng khác, nếu các từ cách nhau quá xa cũng sẽ được gán thành 2 đối tượng khác nhau.
− ADDRESS: địa chỉ (tên tòa nhà, số nhà, tên đường, …) của cửa hàng, hoặc tên chi nhánh có chứa cấu trúc số nhà + tên đường.
− SELLER: tên của cửa hàng, hoặc tên chi nhánh khơng có số nhà, tên cơng ty nếu được in đậm hoặc chứa tên cửa hàng.
− TIMESTAMP: thời gian in hóa đơn, hoặc thời gian ra nếu khơng có thời gian in hóa đơn và từ khóa tương ứng.
− TOTAL_COST: tổng tiền khách phải trả cho hóa đơn (sau khi giảm giá/ chiết khấu) và từ khóa tương ứng.
3.3.2 Định dạng nhãn của bộ dữ liệu
Với định dạng COCO tất cả các thông tin annotation của tất cả ảnh sẽ được lưu trong 1 file .json với cấu trúc gồm 5 phần info, licenses, images, annotations, categories. Trong đó, info và licenses là 2 phần không bắt buộc, còn images, annotations và categories là 3 phần bắt buộc phải có. Chi tiết về mỗi phần trong bộ dữ liệu của chúng tôi như sau:
58
3.3.2.1. info
info là phần thông tin tổng quan của bộ dữ liệu, chúng tôi sử dụng cấu trúc như sau1:
"info": {
"year": "2022",
"version": "4",
"description": "Exported from roboflow.ai",
"contributor": "",
"url": "https://app.roboflow.ai/datasets/train_17_02/4",
"date_created": "2022-02-18T04:10:38+00:00"
},
Trong đó:
Thuộc tính Kiểu dữ liệu2 Ý nghĩa
< description > str Mô tả của bộ dữ liệu. < url > str Đường dẫn của bộ dữ liệu. < version > str Phiên bản của bộ dữ liệu.
< year > int Năm công bố bộ dữ liệu. < contributor > str Người đóng góp bộ dữ liệu. < date_created > datetime Ngày công bố bộ dữ liệu.
Bảng 3-2: Mơ tả ý nghĩa các thuộc tính trong phần “info”.
1 https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/cd-coco-overview.html 2 https://cocodataset.org/#format-data
59
3.3.2.2. licenses
licenses là danh sách giấy phép cho các hình ảnh trong bộ dữ liệu, mỗi giấy phép có 1 ID riêng biệt. "licenses": [ { "id": 1, "url": "", "name": "Unknown" }, … ], Trong đó:
Thuộc tính Kiểu dữ liệu Ý nghĩa
< url > str Đường dẫn của giấy phép.
< id > int ID của giấy phép để dùng trong bộ dữ liệu.
< name > str Tên giấy phép.
Bảng 3-3: Mơ tả ý nghĩa các thuộc tính trong phần “licenses”.
3.3.2.3. images
images là danh sách các ảnh có trong bộ dữ liệu, mỗi ảnh có 1 ID riêng biệt.
"images": [
{
60 "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", }, … { "id": 245915, "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", } ], Trong đó:
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int ID của ảnh trong bộ dữ liệu. < width > int Chiều rộng của ảnh.
< height > int Chiều cao của ảnh. < file_name > str Tên ảnh.
Bảng 3-4: Mơ tả ý nghĩa các thuộc tính trong phần “images”.
3.3.2.4. annotations
annotations là danh sách thông tin của tất cả các đối tượng trên tất cả các ảnh của bộ dữ liệu.
61 { "id": 0, "image_id": 0, "category_id": 15, "bbox": [370, 1654, 775, 105], "area": 81375, "segmentation": [], "iscrowd": 0,
"text": "KACHA TEA & Fast food"
}, … { "id": 0, "image_id": 0, "category_id": 15, "bbox": [370, 1654, 775, 105], "area": 81375, "segmentation": [], "iscrowd": 0,
"text": "KACHA TEA & Fast food"
}
],
62
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int (không bắt buộc) ID của đối tượng.
< category_id > int (bắt buộc) ID lớp của đối tượng.
< iscrowd > 0 hoặc 1 (không bắt buộc)
0: Bounding-box chứa 1 đối tượng.
1: Bounding-box chứa nhiều đối tượng.
< segmentation > RLE hoặc [polygon] (không bắt buộc)
[polygon]: phân vùng của Bounding-box chứa 1 đối tượng.
RLE: phân vùng của Bounding-box chứa nhiều đối tượng.
< image_id > int (không bắt buộc) ID ảnh chứa đối tượng.
< area > float (không bắt buộc) Diện tích phân vùng của đối tượng.
< bbox > [x, y, width, height] (bắt buộc) Thông tin về tọa độ và kích thước của
63
Bounding-box của đối tượng:
− x, y: tọa độ trên trái của Bounding-box.
− width: chiều rộng của Bounding-box.
− height: chiều cao của Bounding-box.
< text > str Đây là điểm mới so với định dạng COCO để phù hợp với bài tốn của nhóm. Thuộc tính này thể hiện transcript thông tin bên trong bounding box.
Bảng 3-5: Mơ tả ý nghĩa các thuộc tính trong phần “annotations”.
3.3.2.5. categories
categories là danh sách các lớp đối tượng trong bộ dữ liệu.
"categories": [ { "supercategory": "speaker", "id": 0, "name": "echo" }, … {
64 "supercategory": "speaker",
"id": 1,
"name": "echo dot"}
]
Trong đó:
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int (bắt buộc) ID của lớp đối tượng.
< supercategory > str (không bắt buộc) Tên lớp đối tượng cha của lớp đối tượng.
< name > str (bắt buộc) Tên của lớp đối tượng.
Bảng 3-6: Mô tả ý nghĩa các thuộc tính trong phần “categories”.
3.4. Mô tả bộ dữ liệu
Bộ dữ liệu bổ sung gồm 2,147 ảnh hóa đơn từ nhiều siêu thị, quán ăn, cửa hàng, …, được chia thành 1,000 ảnh train (chiếm 46.58%), 358 ảnh validation (chiếm 16.67%) và 789 ảnh test (chiếm 36.75%).
Các ảnh trong bộ dữ liệu đã được gán nhãn bounding-box đầy đủ. Các nhãn trong bộ dữ liệu được phân bổ như Bảng 3-7.
65
Train + Val +
Test Train Val Test
SELLER 2,335 17.86% 1,052 17.61% 397 18.27% 886 18.28% ADDRESS 2,879 22.02% 1,355 22.20% 471 21.68% 1,053 21.73% TIMESTA MP 3,596 27.51% 1,656 27.34% 593 27.29% 1,347 27.80% TOTAL_C OST 4,262 32.60% 1,990 32.85% 712 32.77% 1,560 32.19% Tổng cộng 13,072 100% 8,226 100% 2,173 100% 4,846 100%
Bảng 3-7: Bảng phân bổ các nhãn của bộ dữ liệu
Quá trình gán nhãn bounding-box cho bộ dữ liệu gặp khó khăn do nhân lực cịn hạn chế mà số lượng ảnh thì quá lớn, dẫn tới việc phải rà sốt lại nhiều lần, nhưng vẫn khó tránh khỏi một số sai sót.
66
Chương 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ
4.1. Mô tả thực nghiệm
Quá trình thực nghiệm dự kiến gồm 2 bước:
− Nhận dạng vị trí và phân loại thơng tin cần trích xuất (Faster R-CNN, YOLOv3, YOLOF).
Hình 4-1: Ảnh minh họa bước đầu trong quá trình thực nghiệm.
− Ánh xạ các thơng tin cần trích xuất trong ảnh thành văn bản (TransformerOCR, AttentionOCR).
67
4.2. Phương pháp đánh giá 4.2.1 Giai đoạn 1: 4.2.1 Giai đoạn 1:
4.2.1.1. Confusion matrix
Confusion Matrix (Hình 4-3: Confusion Matrix) cung cấp một cách chi tiết để đánh giá kết quả của một thuật tốn phân loại có giám sát (supervised learning). Một đánh giá kết quả của một thuật tốn phân loại có giám sát (supervised learning). Một ma trận nhầm lẫn chia kết quả thành hai loại: giá trị (nhãn) dự đoán và giá trị (nhãn) thực tế của các điểm dữ liệu.
Hình 4-3: Confusion Matrix1 Trong đó:
− True Positive (TP): trường hợp dương tính và được dự đốn dương tính.
− True Negative (TN): trường hợp âm tính và được dự đốn âm tính.
− False Positive (FP): trường hợp âm tính và được dự đốn dương tính.
− False Negative (FN): trường hợp dương tính và được dự đốn âm tính.
68
4.2.1.2. Precision and Recall
Precision được định nghĩa là tỉ lệ số điểm True Positive trong tổng số những điểm được phân loại là Positive (TP + FP).
Precision = TP TP + FN
Recall được định nghĩa là tỉ lệ số điểm True Positive trong số những điểm thật sự là Positive (TP +FN).
Recall = TP TP + FN
4.2.1.3. Intersection over Union (IoU)
Intersection over Union (IoU) được dùng làm tiêu chuẩn để đánh giá cho bài toán phát hiện đối tượng trên ảnh, bằng cách đánh giá mức độ overlap (trùng lắp) giữa 2 bounding boxes. Kết quả IoU được cho là tốt khi >=0,5.
4.2.1.4. Average Precision (AP)
Giả sử có N ngưỡng để tính precision và recall, mỗi ngưỡng có 1 cặp giá trị
(𝑃𝑛, 𝑅𝑛) với 𝑛 = 1, 2, . . . , 𝑁. Precision-Recall curve được vẽ bằng cách vẽ từng điểm
69
Hình 4-4: Đồ thị mối quan hệ của precision, recall (Precision-Recall curve)1. Average precision được định nghĩa là diện tích phần phía dưới đường biểu diễn mối quan hệ của precision và recall. AP thường được tính xấp xỉ bằng công thức như sau:
𝐴𝑃 = ∑(𝑅𝑛 − 𝑅𝑛 − 1)
𝑛
𝑃𝑛
Trong đó: (𝑅𝑛 − 𝑅𝑛 − 1)𝑃𝑛 là diện tính hình chữ nhật có chiều rộng (𝑅𝑛 − 𝑅𝑛 − 1) và chiều cao 𝑃𝑛.
4.2.1.5. Mean Average Precision (mAP)
Mean Average Precision được tính bằng cách lấy trung bình AP của tất cả các lớp.
4.2.2 Giai đoạn 2:
4.2.2.1. Khoảng cách Levenshtein
Levenshtein là khoảng cách khác biệt giữa 2 chuỗi ký tự, khoảng cách này được đặt tên theo Vladimir Levenshtein – người đề ra khái niệm này vào năm 1965.
70
Khoảng cách Levenshtein giữa chuỗi S và chuỗi T là số bước ít nhất biến chuỗi S thành chuỗi T thông qua 3 phép biến đổi:
− Xoá 1 ký tự: “steam” → “team”.
− Thêm 1 ký tự: “steam” → “stream”.
− Thay ký tự này bằng ký tự khác: “steam” → “steal”.
Hình 4-5: Ảnh minh họa 3 phép biến đổi thêm, sửa, xóa1.
Ví dụ, khoảng cách Levenshtein giữa chuỗi “sitting” và “kitten” là 3 vì “sitting” cần ít nhất 3 bước biến đổi để trở thành “kitten”:
− Bước 1: “sitting” → “kitting” (thay thế).
− Bước 2: “kitting” → “kitteng” (thay thế).
− Bước 3: “kitteng” → “kitten” (xóa).
4.2.2.2. Độ đo CER
Trong cuộc thi Mobile-Captured Image Document Recognition for Vietnamese Receipts (MC-OCR) – Legacy, độ đo CER (Character Error Rate) được sử dụng để đánh giá kết quả được các thí sinh nộp lên.
1 https://towardsdatascience.com/evaluating-ocr-output-quality-with-character-error-rate-cer-and-word-error- rate-wer-853175297510
71
CER được xây dựng dựa trên khoảng cách Levenshtein với công thức như sau:
𝐶𝐸𝑅 = 𝑖 + 𝑠 + 𝑑 𝑛
Trong đó:
− 𝑖 + 𝑠 + 𝑑 là số bước biến đổi ở mức ký tự ít nhất để chuyển kết quả