Với những kết quả ban đầu đạt được cùng với nhóm nghiên cứu về nhận dạng
chữ Nôm tại trường Đại học Công nghệ, Luận văn cũng đưa ra cách tiếp cận sử du ̣ng
mạng nơ-ron để thực nghiệm với bài toán nhận dạng chữ Nôm vì một số lý do chính
sau: Thứ nhất , tốc độ nhâ ̣n da ̣ng của mạng nơ -ron nhanh vì sau khi học thì việc xác
định một ký tự giống ký tự nào nhất chỉ là việc nhân ma trận . Hơn nữa việc này có thể làm song song trên mỗi nút trong cùng mô ̣t tầng [30]. Thứ hai là khối lượng dữ liệu lưu trữ để nhận dạng nhỏ - chỉ cần lưu trữ mảng trọng số đã xác định trong quá trình huấn luyê ̣n ma ̣ng mà không cần lưu trữ tâ ̣p dữ liê ̣u mẫu chuẩn và tâ ̣p dữ liê ̣u ra chuẩn. Thứ ba là ta có thể dễ dàng điều chỉnh tốc đô ̣ nhâ ̣n da ̣ng hay đô ̣ chính xác bằng viê ̣c thay đổi số tầng ẩn và số nút trên mỗi tầng . Tăng số tầng và số nút trên mỗi tầng sẽ tăng đô ̣ chính xác nhưng la ̣i giảm tốc đô ̣ nhâ ̣n da ̣ng . Lý do cuối cùng là dựa trên các phương pháp đã áp dụng có kết quả tốt về nhâ ̣n da ̣ng chữ tượng hình Trung Quốc và Nhâ ̣t Bản [31].
Có nhiều mạng nơ-ron có thể áp dụng vào bài toán nhâ ̣n dạng, ở đây ta áp dụng mạng Perceptron đa tầng v ì những ưu điểm của mạng này trong bài toán nhận dạng chữ Latin [12]. Tuy nhiên tôi và nhóm nghiên cứu đã phân tích và điều chỉnh các thông số của mạng để phù hợp với chữ Nôm.
Cấu trúc ma ̣ng mô tả trong Hình 4.1 gồm:
Tầng vào: 24x24 tín hiệu vào, biểu diễn bằng một mảng nhi ̣ phân 24x24 phần tử được tạo thành từ mỗi một ảnh ký tự Nôm.
Tầng ra: 16 tín hiệu, biểu diễn bằng một mảng nhị phân 16 phần tử.
Tầng ẩn: số lượng tầng và số nơ-ron trên mỗi tầng tùy cho ̣n.
Ban đầu các trọng số được gán ngẫu nhiên trong khoảng nào đó . Trong quá trình học, các trọng số được tự điều chỉnh sao cho phù hợp với các mẫu học , làm giảm sai số giữa giá trị đầu ra chuẩn Ys với giá trị tính toán thực tế outs . Viê ̣c hiê ̣u chỉnh tro ̣ng số dừng khi quá trình huấn luyê ̣n hô ̣i tu ̣ ta ̣i một ngưỡng lỗi chấp nhâ ̣n được hoă ̣c dừn g sau một số lần học xác định trước.
Sau khi quá trình huấn luyê ̣n đã xong , bô ̣ tro ̣ng số đă ̣c trưng cho thông tin nhâ ̣n dạng được lưu trữ lại trong tệp tin để sử dụng cho quá trình nhận dạng. Viê ̣c nhâ ̣n da ̣ng chỉ đơn giản là quá trình biến đ ổi mẫu vào X thành mẫu ra Y dựa trên bộ trọng số đã xác định. Mẫu ra Y sẽ được nhâ ̣n da ̣ng nếu nó thuô ̣c tâ ̣p mẫu ra chuẩn đã dùng để huấn luyê ̣n ma ̣ng. Ngươ ̣c la ̣i, mạng không nhận dạng được nếu sau quá trình biến đổi trên mạng thu được mẫu ra Y không thuộc tập mẫu chuẩn đã học .
4.1.2 Thƣ̣c nghiê ̣m
Tôi và nhóm nghiên cứu đã xây dựng chương trình thực nghiê ̣m để học và nhâ ̣n
dạng các ký tự Nôm chứa trong một ảnh và đưa ra ngữ nghĩa bằng tiếng Việt và ti ếng Anh. Thành phần chính của chương trình là mạng Perceptron đã mô tả trong phần trên . Mạng hoạt động như hộp đen , với bô ̣ tro ̣ng số đã ho ̣c , biến đổi 24x24 tín hiệu vào dạng nhị phân thành 16 tín hiệu ra dạng nhị phân . Với ch uỗi nhi ̣ phân ra 16 bits,
chương trình sẽ ta ̣o mô ̣t bô ̣ khóa gồm các số nguyên thuô ̣c miền giá tri ̣ 0216-1. Bộ
khóa này được sử dụng làm chỉ số của mảng ngữ nghĩa và được ánh xạ với chỉ số mỗi dòng ngữ nghĩa (tương ứng vớ i nghĩa của mô ̣t ký tự ) trong các tê ̣p tin chứa nghĩa của từ.
Sử dụng mạng nơ -ron vào nhận dạng ta phải tiến hành qua hai bước chính là bước huấn luyê ̣n ma ̣ng và bước nhâ ̣n da ̣ng . Quá trình huấn luyện dựa trên nguyên tắc học có giám sát với tập mẫu {(Xs,Ys)}. Trong đó , Xs là mảng nhị phân 24x24 phần tử biểu diễn ảnh mô ̣t ký tự Nôm , Ys là mảng nhi ̣ phân
16 phần tử . Đầu ra sử dụng mảng 16
phần tử để biểu diễn chẵn 2 byte dữ liê ̣u và biểu diễn được 216 giá trị khác nhau
nên đủ để biểu diễn hơn 9000 ký tự
Nôm. Ý tưởng cơ bản của quá trình huấn luyện mạng là xác định bộ trọng số W sao cho:
outs = f(Xs,W) =Ys đối với mọi mẫu học s.
Hình 4.1 Cấu trú c mạng Perceptron đa tầng cho bài toán nhận dạng chữ
Chương trình gồm ba mô-đun chính:
- Chuẩn hoá dữ liệu vào: xử lý đưa các ảnh vào về da ̣ng chuẩn , tách dòng, tách ký tự, chuyển mỗi ký tự thành mô ̣t mảng tín hiê ̣u v ào; tạo tập các mẫu vào chuẩn là tâ ̣p hợp các mảng nhi ̣ phân kích thước 24x24 được ta ̣o từ ảnh chứa các mẫu ký tự cần học ; tạo tập các tín hiệu ra chuẩn để phân lớp ký tự , tâ ̣p tín hiê ̣u ra chuẩn là tâ ̣p các mảng nhi ̣ phân kích thước 16.
- Nhận dạng: chuyển mỗi mảng tín hiê ̣u vào thành mô ̣t mảng tín ra tương ứng thông qua hàng loa ̣t các tính toán ta ̣i các nút trong ma ̣ng nơ-ron.
- Xác định ngữ nghĩa: nạp nội dung tệp tin ngữ nghĩa vào mảng ngữ nghĩa, mỗi dòng tương ứng với một phần tử của mảng . Chuyển mảng tín hiê ̣u ra 16 bits thành một số nguyên (khóa) thuô ̣c bô ̣ khóa, số nguyên này chính là chỉ số của phần tử mảng chứa nghĩa của ký tự.
Mô hình hoa ̣t đô ̣ng hê ̣ thống được chỉ ra như trong Hình 4.2:
Hình 4.2. Cấu trúc mô-dun của chương trình
Bô ̣ dữ liê ̣u mẫu huấn luyện là mô ̣t ảnh chứa khoảng 4232 ký tự chữ Nôm chuẩn .
Tâ ̣p mẫu ra chuẩn : đươ ̣c ta ̣o ngươ ̣c từ bô ̣ khóa , mỗi khóa thuô ̣c đ oạn 0216-1 được
chuyển thành mô ̣t mảng nhi ̣ phân 16 phần tử. Quá trình huấn luyện mạng thực hiện theo lưu đồ Hình 4.3.
Hê ̣ thống đươ ̣c thử nghiê ̣m trên môi trường phần cứng : Pentium IV, 1.5GHz, Bus 800/ Cache 1MB, RAM: 256MHz; HDD 80GB, 7200rpm; phần mềm : Windows XP
SP 2, .Net Framework 2.0. Một ví dụ về kết quả được thể hiện trong bảng 4.1.
Bảng 4.1 Một kết quả nhận dạng
Mẫu vào : đoạn thơ trong truyện kiều 1866
Kết quả nhâ ̣n da ̣ng:
Chuẩn hóa dƣ̃
liê ̣u vào NHẬN DẠNG Xác định ngữ nghĩa
Mảng nhị
phân 24x24 Mảng nhị
So với nghĩa thực tế, ở đây kết quả nhận dạng có sai một số ký tự. Kết quả này sẽ được phân tích trong phần 4.3.
Hình 4.3 Lưu đồ huấn luyê ̣n mạng
4.2 Ứng dụng Tesseract để nhận dạng chữ Nôm 4.2.1 Tóm tắt về Tesseract
Tesseract [27] là một chương trình nhận dạng chữ (OCR) mã mở do HP phát triển từ năm 1984 tới 1994, được biên dịch và chạy trên cả 2 môi trường Linux và Windows. Năm 1995 Tesseract là một trong ba bộ nhận dạng chữ có độ chính xác cao nhất tại cuộc thi tổ chức tại Đại học Nevada, Las Vegas [32]. Cuối năm 2005, Tesseract được công bố dưới dạng bản quyền mã mở (Apache License 2.0) và được Google tiếp tục phát triển (http://code.google.com/p/tesseract-ocr/). Hiện nay Tesseract nhận dạng được sáu ngôn ngữ: Anh, Pháp, Ý, Đức, Tây ban nha, Hà lan.
Kiến trúc của Tesseract được mô tả khá đầy đủ trong [27], cùng với tài liệu thiết kế về chi tiết các lớp, các hàm ở trang web http://tesseract-ocr.repairfaq.org/. Tesseract
Cấu hình ma ̣ng Khởi ta ̣o mảng
trọng số Nạp ảnh chứa N
mẫu Phân tích ảnh Xác định ảnh ký tự
tiếp theo Bắt đầu
Kết thúc Chuyển số nguyên i
thành mảng 16 bits Chuyển ảnh ký tự thành mảng 24x24 bits Sai Đúng
Câ ̣p nhâ ̣t mảng trọng số Tính hệ số lỗi Tính đầu ra thực tế Tính hệ số lỗi trung bình Chuyể̉n đến mẫu vào kế
tiếp Còn mẫu ký tự trong ảnh Còn mẫu vào chuẩn
Hê ̣ số lỗi nhỏ hơn ngưỡng lỗi Sai Đúng Sai Đúng i < N Vòng lặp nhỏ hơn Số vòng lặp tối đa Đúng Đúng Sai Sai
hiện chỉ nhận dạng các ảnh văn bản một cột dữ liệu, không có phần phân tích dàn trang (layout).
Bước đầu tiên là phân tích các thành phần liên thông từ một ảnh đầu vào và lưu lại các đường viền ngoài của các thành phần đó. Ở giai đoạn này, những đường nét viền ngoài được thu thập cùng với nhau và lồng hoàn toàn vào nhau thành các đốm mầu (blob).
Các blob được tách thành các dòng văn bản và được phân tích tiếp để xác định những đoạn văn bản chữ nghiêng hoặc cân xứng. Các dòng văn bản được tách ra thành các từ khác nhau theo khoảng cách giữa các ký tự. Đoạn văn bản có độ nghiêng xác định được tách trực tiếp ra thành các ô ký tự. Đoạn văn bản cân xứng được tách ra thành các từ sử dụng những khoảng trống xác định.
Lưu đồ hoa ̣t đô ̣ng của Tesseract được mô tả trong Hình 4.4.
Phân tích thành phần kết nối Tiền xử lý Ảnh đầu vào Ảnh nhị phân Tìm ra các dòng văn bản và từ Đường viền các ký tự Các đường bao ký tự được tổ chức thành các từ Nhận dạng từ 1 Nhận dạng từ 2 Bộ tách ký tự Bộ kết hợp ký tự Bộ phân lớp ký tự
tĩnh Từ điển Bộ phân lớp thích nghi
Bộ phân tích số Từ thích hợp
Hình 4.4 Kiến trúc tổng quát của Tesseract
Trong quá trình huấn luyện, từ một ảnh đầu vào chứa các ký tự hoặc đoạn văn bản cần để huấn luyện, Tesseract sẽ áp dụng các thuật toán xử lý ảnh để phân tích ảnh đầu vào thành các dòng, các từ rồi đến các ký tự riêng biệt. Sau đó chương trình sẽ trích xuất ra các đặc trưng tương ứng với các ký tự. Trong quá trình huấn luyện các đặc trưng cần trích xuất là các phân đoạn xấp xỉ theo đa giác và những đặc trưng này được xem như là các khuôn mẫu của dữ liệu huấn luyện và được lưu vào cấu trúc dữ liệu k-d tree.
Tesseract dùng kỹ thuật k-NN [9] để thực hiện phân lớp đối tượng. Với một
vector có n đặc trưng: (A1(x), A2(x), …, An (x)). Thì cách tính khoảng cách từ đối tượng
x tới y được tính như sau:
D(x, y) = n i i i x A y A 1 2 )) ( ) ( (
Đối tượng gần với mẫu nhất sẽ có khoảng cách tổng hợp trên tất cả các đặc trưng là nhỏ nhất.
4.2.2. Áp dụng với chữ Nôm
Tesseract ban đầu được thiết kế chỉ để nhận dạng văn bản tiếng Anh. Sau này nó đã được chỉnh sửa và phát triển để nó có khả năng nhận dạng các ngôn ngữ khác. Với bài toán chữ Nôm ta có thể sử dụng lại các kỹ thuật tiền xử lý rất tốt của Tesseract như công đoạn xử lý nhiễu, căn chỉnh độ nghiêng [28], tách dòng, tách từ để áp dụng vào cho chữ Nôm.
Do chữ Nôm là hệ thống chữ tượng hình viết theo dạng có kích thước cố định và các chữ không dính nên khi dùng Tesseract để tách từ cũng dễ hơn so với tách từ trong các ngôn ngữ khác. Tuy nhiên sau khi tách từ thi một số ký tự tương đối giống nhau và khó xác định hai “từ gốc” thuộc về hai ký tự khác nhau hay thuộc về cùng một ký tự. Một nhược điểm của Tesseract là nó có thể sẽ xử lý chậm với những ngôn ngữ có tập ký tự lớn (như chữ Nôm có hơn 4000 ký tự). Do đó ta cần phải có những sửa đổi trong mã nguồn để cho phù hợp. Chương trình hiện tại cũng đã được sửa đổi tại một số mô- đun để nâng cao khả năng phân đoạn đối với chữ Nôm.
Tôi đã thử nghiệm huấn luyện và nhận dạng chữ Nôm trên hệ điều hành Ubuntu 7.4, Tesseract 2.03 với một số sửa đổi trong mã nguồn. Bộ dữ liệu dùng để huấn luyện là 4232 ký tự chữ Nôm cho mỗi loại kiểu chữ thường, chữ đậm, chữ nghiêng và thêm khoảng 2000 chữ Nôm trong bản kiều 1866. Bộ dữ liệu dùng để nhận dạng là bản
truyện kiều năm 1866. Kết quả nhâ ̣n da ̣ng trang đầu tiên của truyện kiều đạt 94,9 %,
thời gian nhận dạng khoảng 15 giây. Khi tiến hành nhận dạng 10 trang đầu tiên thì kết quả đạt khoảng 89,8 % trong thời gian khoảng trên 1 phút. Kết quả nhận dạng được
thể hiện trong Bảng 4.2.
Bảng 4.2 Kết quả nhận dạng chữ Nôm với Tesseract
Đầu vào: đoạn thơ trong truyện kiều 1866
4.3. So sánh và thảo luận
Những kết quả nhận dạng trong luận văn được tiến hành thực nghiệm trên cùng một bộ dữ liệu khoảng 4232 chữ Nôm chuẩn để tiến hành đánh giá so sánh kết quả của hai cách tiếp cận nhằm mục đích nghiên cứu [11] và đưa ra những định hướng phát triển hệ thống nhận dạng chữ Nôm có chất lượng tốt.
Thông qua các kết quả thực nghiệm này và các thử nghiệm khác mà chúng tôi đã tiến hành thì nhận thấy rằng Tesseract có những mô-đun cho việc tiền xử lý và phân đoạn là khá tốt với chữ Nôm ví dụ như xử lý độ nghiêng của văn bản, loại bỏ nhiễu, tách dòng, tách chữ. Và kết quả nhận dạng có độ chính xác trung bình khoảng 93%. Đối với phương pháp nhận dạng chữ Nôm theo mạng nơ-ron, chúng tôi cũng đã xây dựng một mô-đun tiền xử lý đơn giản để tách ảnh đầu vào thành các chữ Nôm riêng biệt và khi thử nghiệm với mô hình mạng nơ-ron đề xuất, kết quả nhận dạng đạt tới
gần 100% vớ i mô ̣t phần tâ ̣p mẫu đã ho ̣c , với mẫu có nhiều biến đổi so với tập mẫu
chuẩn thì đô ̣ chính xác còn thấp . Điều này do mô -đun tiền xử lý còn đơn giản , chưa chú trọng việc chuẩn hóa dữ liệu vào mà chỉ tập trung vào xây dựng mạng nhận dạng .
Đối với phương pháp nhận dạng trong Tesseract do sử dụng k-NN và tổ chức dữ liệu theo k-d tree nên đòi hỏi bộ nhớ lớn để lưu trữ các mẫu đã học nên khả năng chuyển sang môi trường nhúng sẽ khó khăn hơn so với phương pháp nhận dạng bằng mạng nơ ron vì chỉ cần lưu lại bộ trọng số cần thiết . Xét riêng về mô -đun nhâ ̣n da ̣ng thì nhận dạng bằng mạng nơ -ron ưu viê ̣t hơn về tính khả chuyển , tính linh động, tối ưu lưu trữ và khả năng tích hợp cao . Ở chương 5 dưới đây tôi sẽ đưa ra những phân tích và áp dụng mô đun nhận dạng dựa trên Tesseract cho môi trường nhúng để thực nghiệm, định hướng những nghiên cứu tiếp theo và hoàn thiện ứng dụng.
CHƢƠNG 5: ỨNG DỤNG VÀ PHÁT TRIỂN PHẦN MỀM NHẬN DẠNG CHỮ NÔM CHO THIẾT BỊ NHÚNG
5.1 Phân tích ứng dụng trên môi trƣờng nhúng
Chương trình nhận dạng được chia thành 2 phần chính: quá trình học và quá trình nhận dạng. Quá trình học được thực hiện trên Desktop và các file chứa các đặc trưng tương ứng với từng chữ sẽ được lưu lại và đưa lên thiết bị mobile để phục vụ cho quá trình nhận dạng. Tuy nhiên theo phương pháp nhận dạng dùng K-NN trong Tesseract thì để có kết quả nhận dạng với độ chính xác cao thì các file này tương đối lớn, đòi hỏi máy có đủ bộ nhớ để lưu trữ. Cách thiết kế này cũng đúng với việc sử dụng các phương pháp nhận dạng khác mà có thể phù hợp hơn với các thiết bị nhúng như dùng ANN. Trên máy Desktop sẽ tiến hành việc xây dựng mạng nơron phù hợp và thực hiện quá trình học để xác định được bộ trọng số w tốt nhất, sau đó chỉ cần đưa bộ trọng số này lên thiết bị di động phục vụ cho quá trình nhận dạng. Như vậy đối với phương pháp này thì tốn rất ít bộ nhớ để lưu trữ.