2.2.2.1. LSTM
Long Short-term Memory[8] (LSTM) là bài báo được ra đời vào năm 1997, là một phiên bản nâng cao hơn của model RNN. Nhận thấy khuyết điểm của RNN là thông tin ngữ nghĩa sẽ bị mất dần nếu câu quá dài, nhóm tác giả Hochreiter & Schmidhuber cho ra đời LSTM có thể khắc phục phần nào vấn đề này.
LSTM có kiến trúc mạng giống với RNN, tuy nhiên có sự khác nhau về cấu trúc của nơ-ron bên trong mạng. Hình 2-18: Ảnh minh họa luồng xử lý trong nơ-ron của model LSTM. mô tả một nơ-ron trong model LSTM, dựa vào hình này, ta có thể chia các bước xử lý trong một nơ-ron của LSTM thành 3 phần như sau:
− Xác định bit nào trong bộ nhớ dài hạn của mạng là hữu ích với đầu ra trước đó và đầu vào mới.
− Xác định thông tin sẽ được lưu vào bộ nhớ dài hạn của mạng, thành phần này gồm 2 bước nhỏ bên trong là xây dựng vector thông tin và lọc thông tin cần lưu.
45
− Xác định thông tin đầu ra, thành phần này cũng gồm 2 bước là xây dựng vector thông tin từ bộ nhớ long-term và tiến hành lọc thông tin cần thiết để tạo thành đầu ra.
Hình 2-18: Ảnh minh họa luồng xử lý trong nơ-ron của model LSTM1.
Nhìn chung, LSTM đã khắc phục được phần nào khuyết điểm của RNN là bị giảm ngữ nghĩa ở những câu dài, tuy nhiên kiến trúc này vẫn chưa khắc phục được nhược điểm phải xử lý tuần tự của RNN và việc phải xử lý bộ nhớ dài hạn khiến model trở nên chậm hơn RNN.
2.2.2.2. Transformer
Kiến trúc mạng Transformer[20] dành cho xử lý ngôn ngữ tự nhiên được ra đời vào năm 2017 qua bài báo Attention Is All You Need[20][20], đúng như tên gọi của bài báo, cơ chế Attention đã trở thành một bước đột phá, làm tiền đề cho nhiều model lớn khác trong NLP mà nổi bật nhất là model BERT (Bidirectional Encoder Representations from Transformers)[3][3] một model State-of-the-art (SOTA) trong giới NLP hiện nay.
46
Transformer thực hiện được nhiều tác vụ của NLP như dịch máy, tóm tắt văn bản, tạo ngôn ngữ tự nhiên, … Ngoài ra, vào năm 2018, bài báo Image Transformer[13][13] cũng được ra đời để áp dụng kiến trúc Transformer vào bài toán
xử lý ảnh.
Hình 2-19: Kiến trúc mạng Transformer (Ảnh từ bài báo)
Kiến trúc mạng Transformer gồm 2 khối chính là khối encoder và khối decoder (Hình 2-19). Đầu vào của mạng là thường là 1 câu, câu này sẽ được đưa vào khối Input Embedding để ánh xạ các từ thành những vector có kích thước 512 chiều (có thể được hiệu chỉnh cho phù hợp với bài toán). Khối này có tác dụng làm giảm kích thước của đầu vào, và qua khối Input Embedding này, những từ có nghĩa tương đồng với nhau sẽ được biểu diễn bằng những vector gần giống nhau. Model sử dụng trong khối này thường là Word2Vec hoặc GloVe.
Đặc điểm của Transformer là model sẽ đọc tất cả các từ trong câu vào model một lúc, để cải thiện điểm yếu là dễ làm giảm ngữ nghĩa ở các câu quá dài trong các model NLP trước đó. Để thực hiện được điều này, Transformer cần một cơ chế để có thể biết được vị trí của các từ trong câu, đó là sử dụng khối Positional Encoding để
47
ánh xạ vị trí của từ thành một vector có kích thước bằng với kích thước của những vector được ánh xạ từ các từ trong câu.
Sau quá trình này, vector từ và vector vị trí tương ứng sẽ được cộng với nhau để tạo thành đầu vào cho khối encoder.
Kiến trúc Transformer gồm 6 lớp Encoder liên tiếp nhau, mỗi lớp có kiến trúc như Hình 2-19: Kiến trúc mạng Transformer (Ảnh từ bài báo) kết quả từ quá trình xử lý đầu vào được đưa vào lớp Multi-Head Attention, và như tên gọi Attention Is All You Need của bài báo, đây là lớp quan trọng nhất trong toàn model. Khối này gồm 8
Self Attention, có tác dụng tìm ra quan hệ giữa các từ trong câu. Kết quả sau khối Multi-Head Attention được đưa qua lớp Add & Normalize để thực hiện 2 bước:
− Add: Cộng đầu vào và đầu ra của lớp attention để tránh mất mát thông tin trong quá trình học.
− Normalize (Batch Normalization)[1][1]: Chuẩn hóa kết quả để giảm thời gian train.
Phần cuối cùng của lớp Encoder là một lớp Fully Connected dùng để xử lý đầu ra từ lớp encoder thành đầu vào của lớp encoder kế tiếp hoặc lớp decoder đầu tiên (với lớp encoder cuối cùng).
Đầu vào của lớp decoder gồm có kết quả từ lớp encoder cuối cùng, kết quả từ lớp decoder cuối cùng trước đó (<start> nếu là lần decoder đầu tiên (<start> là ký tự bắt đầu câu của kết quả đầu ra)). Decoder có kiến trúc tương tự lớp encoder, tuy nhiên lớp này có thêm 1 lớp là Masked Multi-Head Attention lớp này có nhiệm vụ che đi những từ chưa được dự đoán trong quá trình huấn luyện để model học cách dự đoán những từ còn thiếu. Kết quả từ lớp decoder sẽ được đưa vào một lớp xử lý (trong bài báo là một lớp Linear và một lớp softmax) tùy thuộc vào bài toán mà model cần xử lý.
Từ khi ra đời, Transformer đã trở thành một model SOTA và đã được sử dụng để biến tấu nên nhiều model khác nhau trong lĩnh vực xử lý ngôn ngữ tự nhiên (và cả
48
xử lý ảnh). Tuy khắc phục được hầu hết những ưu điểm từ những model xử lý ngôn ngữ tự nhiên trước đó, nhưng Transformer là một mô hình quá phức tạp, đòi hỏi tài nguyên lớn để sử dụng và tốn nhiều thời gian hơn hẳn các model trước trong việc dự đoán.
2.2.3 OCR
Hiện nay, để phục vụ cho mục đích nhận dạng chữ tiếng Việt trong ảnh, tác giả Phạm Quốc đã cung cấp thư viện VietOCR1 gồm các model kết hợp giữa model CNN và model xử lý ngôn ngữ tự nhiên, trong đó có model AttentionOCR và TransformerOCR.
2.2.3.1. AttentionOCR
AttentionOCR là model kết hợp giữa CNN và model seq2seq mà cụ thể ở đây là model LSTM. Trong đó, CNN có nhiệm vụ chuyển ảnh thành các đặc trưng để làm đầu vào cho model LSTM. Phần CNN trong model nhận kết quả đầu vào là một ảnh, đầu ra của phần này là một feature map có kích thước 𝑐ℎ𝑎𝑛𝑛𝑒𝑙 × ℎ𝑒𝑖𝑔ℎ𝑡 × 𝑤𝑖𝑑𝑡ℎ. Feature map này sẽ được duỗi thẳng để phù hợp với đầu vào của LSTM. Còn LSTM có nhiệm vụ dự đoán các từ tiếp theo trong ảnh từ các đặc trưng mà CNN rút trích được.
49
Hình 2-20: Model AttentionOCR (Ảnh từ github của model)
2.2.3.2. TransformerOCR
Ngoài AttentionOCR, VietOCR còn cung cấp model TransformerOCR. Trong model này, thay vì sử dụng LSTM để dự đoán các ký tự, model này sử dụng Transformer làm công cụ để dự đoán các từ tiếp theo trong ảnh. Ưu điểm của việc sử dụng Transformer trong model này là số lượng ký tự dự đoán được không bị giới hạn bởi bất kỳ thông số nào.
50
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.1 Bộ dữ liệu Scanned Receipts OCR and Information Extraction (SROIE) (SROIE)
3.1.1.1. Tổng quan
Bộ dữ liệu SROIE được công bố vào năm 2019 nhằm phục vụ cho cuộc thi ICDAR2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction[9] – thử thách đọc thông tin từ ảnh scan của các hóa đơn với 3 phần thi:
− Task 1: Scanned Receipt Text Localisation: Xác định vị trí chữ trong hóa đơn.
− Task 2: Scanned Receipt OCR: Nhận dạng các từ có trong hóa đơn.
− Task 3: Key Information: Rút trích 4 thông tin từ hóa đơn bao gồm: Tên công ty, địa chỉ, ngày, tổng tiền hóa đơn.
SROIE gồm 1,000 ảnh scan của các hóa đơn trong đó có khoảng 600 ảnh train và 400 ảnh test, các ảnh train và test này đều được gán nhãn đầy đủ.
3.1.1.2. Định dạng file annotation
Đối với annotation cho Task 1 và Task 2, file txt có nội dung được cấu trúc như sau:
x1_1, y1_1, x2_1, y2_1, x3_1, y3_1, x4_1, y4_1, transcript_1
x1_2, y1_2, x2_2, y2_2, x3_2, y3_2, x4_2, y4_2, transcript_2 …
x1_n, y1_n, x2_n, y2_n, x3_n, y3_n, x4_n, y4_n, transcript_n
Trong đó, mỗi dòng trong file txt thể hiện annotation cho một nhóm ký tự trên một dòng hoặc một cụm ký tự trên hóa đơn tương ứng với file txt. Thông tin
51
annotation trên mỗi dòng bao gồm 𝑥1, 𝑦1, 𝑥2, 𝑦2, 𝑥3, 𝑦3, 𝑥4, 𝑦4 là tọa độ 4 góc của bounding box và 𝑡𝑒𝑥𝑡 là các ký tự bên trong bounding box.
Hình 3-1: Ảnh minh họa cấu trúc một file txt trong thư mục 0325updated.task1train(626p).
Đối với Task 3, file txt có nội dung được cấu trúc như sau: { "company": transcript, "date": transcript, "address": transcript, "total": transcript }
Trong đó, mỗi text là thông tin từ ảnh hóa đơn tương ứng với các nhãn "company", "date", "address", "total".
52
Hình 3-2: Ảnh minh họa cấu trúc một file txt trong thư mục 0325updated.task2train(626p).
3.1.2 Bộ dữ liệu Consolidated Receipt Dataset (CORD) 3.1.2.1. Tổng quan 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, …, ngoà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ự đoá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ó