Đánh giá và lựa chọn giải pháp

Một phần của tài liệu Xây dựng giao tiếp tiếng nói với phần mềm kế toán và quản trị doanh (Trang 33)

Với hai giải pháp trên ta dễ dạng nhận thấy việc sử dụng kỹ thuật Hook có một số ưu điểm như: không can thiệp vào mã nguồn phần mềm kế toán và quản trị doanh nghiệp FAB – EIS, triển khai độc lập hoàn toàn với phần mềm FAB – EIS và có thể tái sử dụng cho nhiều hệ thống khác nhau. Tuy nhiên việc cài đặt thư viện Hook tương đối phức tạp và phụ thuộc vào môi trường thực thi; ví dụ khi cài đặt

Bắt đầu

Nhận dạng tiếng nói

Chuyển tiếng nói thành thông điệp

Chuyển thông điệp tới phần mềm FAB - EIS Người dùng dừng nhận dạng? Kết thúc - +

34

trên hệ điều hành Windows ta cần xây dựng một chương trình, trên hệ điều hành Linux ta cần xây dựng một chương trình khác, do cơ chế Hook và API trên các hệ điều hành khác nhau là khác nhau. Mặt khác, việc tìm kiếm, quản lý và gửi thông điệp tới một chương trình khác rất dễ xảy ra lỗi, tiềm ẩn khả năng gây lỗi phần mềm kế toán, quản trị doanh nghiệp FAB – EIS.

Giải pháp thứ hai xây dựng khả năng nhận dạng tiếng nói như một module trong phần mềm kế toán và quản trị doanh nghiệp FAB – EIS tuy phải can thiệp trực tiếp vào mã nguồn phần mềm, nhưng sự can thiệp này tương đối ít chỉ một đoạn nhỏ để kích hoạt khả năng nhận dạng và xử lý lệnh mà người dùng phát ra. Giải pháp cũng giúp hạn chế công sức lập trình rất nhiều khi ngôn ngữ lập trình Java có công cụ hỗ trợ nhận dạng tiếng nói hữu hiệu là SPHINX.

Bên cạnh đó việc lập trình sử dụng ngôn ngữ Java giúp phần mềm kế toán và quản trị doanh nghiệp FAB – EIS vẫn giữ được tính đa nền tảng khi triển khai trên các hệ điều hành khác nhau mà không cần phải biên dịch lại chương trình.

Dựa trên những lý do đó, tác giả đã lựa chọn giải pháp tích hợp trực tiếp khả năng nhận dạng tiếng nói như một module của phần mềm kế toán và quản trị doanh nghiệp FAB – EIS.

35

CHƢƠNG 3

BỘ CÔNG CỤ SPHINX 3.1. Giới thiệu

Sphinx 4 là một hệ thống nhận dạng ngôn ngữ thuần Java, là kết quả của sự hợp tác giữa Đại học Carnegie Mellon, Sun Microsystems Laboratories, Mitsubishi Electric Research Labs (MERL), and Hewlett Packard (HP), cũng như sự đóng góp của đaij học California và học viện công nghệ Massachusetts.

Sphinx 4 có khả năng linh động và tính module hóa rất cao. Sơ đồ dưới đây là kiến trúc tổng quan của Sphinx 4:

Hình 16 Sơ đồ kiến trúc Sphinx 4

Sphinx 4 có 3 thành phần chính phục vụ cho ba mục đích khác nhau:

- FrontEnd: Nhận các tín hiệu đầu vào, và tham số hóa chúng thành các đặc trưng của tiếng nói.

- Decoder: Sử dụng đặc trưng tiếng nói được cung cấp bởi FrontEnd và đồ thị tìm kiếm SearchGraph trích xuất từ dữ liệu ngôn ngữ Linguist nhằm thực hiện quá trình giải mã, và trả về kết quả Result cho ứng dụng.

- Linguist: lưu trữ, xử lý các thông tin về ngôn ngữ như từ điển âm học, mô hình ngôn ngữ, mô hình âm học. Linguist sử dụng thông tin từ những thành phần này, nhằm tổ hợp ra một đồ thị tìm kiếm SearchGraph phục vụ cho quá trình giải mã.

36

Sphinx 4 cung cấp lượng lớn các tham số cấu hình nhằm điều chính hiệu năng hệ thống ví dụ như độ sâu tìm kiếm… Đặc biệt Sphinx 4 cung cấp khả năng cấu hình động thông qua lớp ConfigurationManager giúp cho các hệ thống sử dụng sphinx trở lên linh động hơn rất nhiều.

Bên cạnh đó Sphix 4 cũng cung cấp các bộ công cụ trợ giúp người dùng trong việc phân tích hệ thống như tương tác với môi trường khi đang thực thi, thay đổi tham số lúc chạy…

3.2. FrontEnd

FrontEnd được sử dụng để tham số hóa các tín hiệu đầu vào. Hình dưới mô tả quá trình trích chọn đặc trưng từ tín hiệu đầu vào của FrontEnd:

Hình 17 FrontEnd

Việc cho phép xử lý nhiều đầu vào cho phép FrontEnd có khả năng tính toán song song nhiều loại tham số khác nhau từ một hoặc nhiều tín hiệu đầu vào. Điều này cũng tạo nên khả năng giải mã song song sử dụng các tham số khác nhau.

Mỗi DataProcessor có một đầu vào và đầu ra, đầu ra của DataProcessor này có thể là đầu vào của DataProcessor khác. Tín hiệu đầu ra và đầu vào của DataProcessor là Data. DataProcessor cuối cùng có đầu ra là một đối tượng Data đã được tham số hóa, hay còn gọi là đặc trưng (Features) của tín hiệu đầu vào. Các đặc trưng này sẽ được sử dụng cho bộ Decoder.

Sphinx 4 cho phép sinh ra các đặc trưng một các song song, và số lượng các luồng sử lý song song có thể thay đổi tùy ý.

Các DataProcessor giao tiếp với nhau dựa trên mô hình pull, chúng chỉ yêu cầu tín hiệu đầu vào từ thành phần trước chỉ khi cần thiết. Việc sử dụng mô hình pull giúp bộ xử lý có thể thực hiện các chức năng như bộ đệm, hoặc tìm kiếm quay lui…

Sphinx 4 cung cấp khả năng cấu hình các kỹ thuật xử lý tín hiệu thông dụng như: DCT, LPC,… (adsbygoogle = window.adsbygoogle || []).push({});

Các cấu hình cho FrontEnd có thể được thực hiện thông qua lớp ConfigurationManager.

37

3.3. Linguist

Module Linguist được sự dụng để sinh đồ thị tìm kiếm SearchGraph. Giống như các thành phần khác Linguist có khả năng pluggable giúp người dung có thể cấu hình động hệ thống với nhiều cài đặt linguist khác nhau.

Linguist tạo ra đồ thị tìm kiếm SearchGraph bằng cách sử dụng cấu trúc ngôn ngữ (được biểu diễn bởi mô hình ngôn ngữ LanguageModel cho trước) và kiến trúc âm học của mô hình âm học AcousticModel (mô hình Markov ẩn cho các âm). Linguist cũng sử dụng từ điển Dictionary để ánh xạ các từ trong mô hình ngôn ngữ với các phần tử tương ứng trong mô hình âm học AcousticModel.

Linguist gồm 3 thành phần pluggable: Mô hình ngôn ngữ - LanguageModel, Từ điển – Dictionary, và mô hình âm học – AcousticModel.

3.3.1. Mô hình nguôn ngữ - LanguageModel

Mô hình ngôn ngữ biểu diễn kiến trúc ngôn ngữ ở mức từ vựng, có thể được cài đặt theo nhiều cách khác nhau. Các cài đặt này thông thường chi làm hai loại: ngữ pháp hướng đồ thị và mô hình thống kê N-Gram.

Ngữ pháp hướng đồ thị biểu diễn một đồ thị có hướng trong đó mỗi nút biễu diễn một từ đơn, mỗi cạnh biểu diễn xác suất từ có thể đi sau từ đó.

Mô hình thống kê N-Gram cung cấp xác suất của từ xuất hiện trước n – 1 từ khác. Mô hình ngôn ngữ trong Sphinx 4 hỗ trợ nhiều định dạng khác nhau:

- SimpleWordListGrammar: định nghĩa ngữ pháp dựa trên danh sách các từ. - JSGFGrammar: hỗ trợ JavaTM Speech API Grammar Format(JSGF)

- LMGrammar: định nghĩa ngữ pháp dựa trên một mô hình ngôn ngữ thống kê. Mô hình này làm việc tốt với các ngôn ngữ xấp xỉ 1000 từ.

- FSTGrammar: Hỗ trợ máy hữu hạn trạng thái theo định dạng ngữ pháp ARPA FST.

- SimpleNGramModel: cung cấp mô hình ngôn ngữ ASCII N – Gram theo định dạng ARPA. Mô hình này không tối ưu hóa bộ nhớ sử dụng, do đó chỉ phù hợp với các mô hình ngôn ngữ nhỏ.

- LargeTrigramModel: được sinh ra sử dụng bộ công cụ ngôn ngữ CMU, tối ưu hóa bộ nhớ, cho phép làm việc với các file lớn từ 100MB trở lên.

3.3.2. Từ điển - Dictionary

Từ điển cung cấp phương thức phát âm cho các từ của mô hình ngôn ngữ. Cách thức phát âm sẽ chi từ thành các phần nhỏ hơn xuất hiện trong mô hình âm học. Từ điển hỗ trợ phân loại các từ và cho phép một từ đơn được xếp vào nhiều lớp khác nhau.

38 Dictionary.

3.3.3. Mô hình âm học AcousticModel

Mô hình âm học cung cấp ánh xạ giữa các thành phần tiếng nói và mô hình Markov ẩn. Việc ánh xạ này có thể bao gồm cả thông tin về ngữ cảnh và vị trí của từ.

Thông thường, Linguist chia các từ thành các tiểu từ độc lập ngữ cảnh, sau đó truy vấn đồ thị Markov ẩn cho các tiểu từ này, đồ thị được tìm thấy sẽ kết hợp với mô hình âm học AcousticModel đẻ tạo nên đồ thị tìm kiếm GraphSearch.

Không giống như các hệ nhận dạng tiếng nói khác, đồ thị HMM không được biểu diễn dưới dạng cấu trúc cố định, mà chỉ đơn thuần là một đồ thị có hướng, ở đó mỗi nút biểu diễn một trạng thái của mô hình, mỗi cạnh biểu diễn xác suất chuyển trạng thái giữa hai nút. Cách thức biểu diễn này giúp mô hình âm học có khả năng hỗ trợ mô hình Markov ẩn với nhiều kiến trúc khác nhau.

3.3.4. Đồ thị tìm kiếm

Linguist được cài đặt theo nhiều cách khá nhau, do đó không gian tìm kiếm được sinh ra bởi Linguist có kiến trúc rất đa dạng. Hình dưới đây biểu diễn một không gian tìm kiếm dữ liệu chính:

Hình 18 Đồ thị tìm kiếm GraphSearch[10]

3.3.5. Cài đặt

Sphinx 4 cung cấp một số cái đặt của Linguist nhằm hỗ trợ các mục đích khác nhau: - FlatLinguist: Phù hợp với các tác vụ nhận dạng sử dụng ngữ pháp phi ngữ

cảnh (CFG), ngữ pháp hữu hạn trạng thái (FSG), máy hữu hạn trạng thái (FST) và mô hình ngôn ngữ N-Gram nhỏ. FlatLinguist chuyển các định dạng mô hình ngôn ngữ bên ngoài thành cấu trúc ngữ pháp bên trong. Ngữ pháp này biểu diễn một đồ thị có hướng ở đó mỗi nút biểu diễn một từ, mỗi cạnh biểu diễn xác suất chuyển dịch giữa các từ. FlatLinguist sinh ra đồ thị tìm kiếm SearchGraph trực tiếp từ đồ thị ngữ pháp và lưu trữ toàn bộ đồ thị tìm kiếm trong bộ nhớ. Do đó FlatLinguist rất nhanh.

39

- DynamicFlatLinguist: tương tự FlatLinguist, ngoại trừ việc đồ thị tìm kiếm SearchGraph được sinh ra theo yêu cầu, do đó có khả năng làm việc với các kiến trúc ngữ pháp phức tạp. (adsbygoogle = window.adsbygoogle || []).push({});

- LexTreeLinguist: Phù hợp với các tác vụ nhận dạng tập từ vựng lớn sử dụng mô hình N-Gram. LexTreeLinguist tổ chức các từ dưới dạng lex tree, và sinh ra các trạng thái tìm kiếm SearchStates một cách tự động, do đó có thể điều khiển được tập từ vựng lớn mà chỉ sử dụng ít bộ nhớ.

3.4. Decoder

Vai trò chính của Sphinx4 Decoder là đưa ra kết quả nhận dạng dựa trên việc sử dụng các đặc trưng từ FrontEnd kết hợp với đồ thị tìm kiếm SearchGraph từ Linguist. Decoder tạo ra đối tượng SearchManager nhằm đơn giản hóa quá trình giải mã cho ứng dụng.

Decoder chỉ đơn giản yêu cầu SearchManager nhận dạng tậm các frame đặc trưng. Tại mỗi bước của quá trình, SearchManager tạo ra một đối tượng Result mà có thể chứa đường đi có thể đạt đến trạng thái non – emmitting. Để xử lý các kết quả này, Sphinx 4 cung cấp các công cụ để đánh giá.

Giống như Linguist, SearchManager không hạn chế một cài đặt đặc biệt nào, chúng ta có thể sử dụng giải thuật A*, Viterbi…

Hiện tại Sphinx 4 cung cấp các cài đặt của SearchManager hỗ trợ Viterbi, Bushderby và giải mã song song:

- SimpleBreadthFirstSearchManager - WordPruningBreadthSearchManager - BushderbySearchManager

40

CHƢƠNG 4

TÍCH HỢP NHẬN DẠNG TIẾNG NÓI VÀO

PHẦN MỀM KẾ TOÁN VÀ QUẢN TRỊ DOANH NGHIỆP FAB - EIS

4.1. Xác định phạm vi nhận dạng

Trong phạm vi đề tài luận văn, và yêu cầu hiện tại của phần mềm FAB - EIS, tôi xây dựng một hệ nhận dạng giúp thực hiện các chức năng sau:

- Nhận dạng một số lệnh cơ bản tương ứng với các chức năng có sẵn của phần mềm, giúp người sử dụng có thể ra lệnh để sử dụng các chức năng đó, thay thế việc lựa chọn bằng menu như trước đây.

- Nhận dạng các chữ số trợ giúp việc nhập tài khoản kế toán Tập các từ cần nhận dạng được liệt kê trong bảng dưới đây:

Bảng 3 Danh sách từ vựng nhận dạng

Từ Lệnh

Hóa Đơn Quản lý hóa đơn

Mua hàng Nhập hàng

Bán hàng Xuất bán hàng

Vật tư Quản lý vật tư

Tài sản Quản lý tài sản

Công cụ Quản lý công cụ dụng cụ Xây lắp Lập dự toán công trình

Nhân sự Hồ sơ nhân sự

Kế toán Quản lý chứng từ Khách hàng Danh mục khách hàng Nhà cung cấp Danh mục nhà cung cấp Nhân viên Danh mục nhân viên Quốc gia Danh mục quốc gia Phòng ban Danh mục phòng ban Ngân hàng Danh mục ngân hàng Sản phẩm Danh mục sản phẩm Báo cáo Danh mục báo cáo

Quản trị Quản trị người dùng hệ thống

41 Một 1 Hai 2 Ba 3 Bốn 4 Năm 5 Sáu 6 Bảy 7 Tám 8 Chín 9

4.2. Xây dựng mô hình ngôn ngữ

Có hai cách thức để xây dựng mô hình ngôn ngữ:

- Mô hình ngữ pháp: có độ chính xác cao đối với các tập từ vựng nhỏ, hệ nhận dạng dựa trên các lệnh giao tiếp người - máy (adsbygoogle = window.adsbygoogle || []).push({});

- Mô hình thống kê: áp dụng cho các ngôn ngữ có tập từ vựng lớn, khả năng mổ tả ngữ pháp khó khăn…

Hệ nhận dạng tiếng nói đang xây dựng đã sử dụng cả hai cách thức xây dựng mô hình ngôn ngữ, thực nghiệp cho thấy sử dụng mô hình ngữ pháp cho kết quả tốt hơn, do tập từ vựng nhỏ, và chủ yếu là các lệnh giao tiếp người – máy đơn giản.

4.2.1 Xây dựng mô hình ngữ pháp

Mô hình ngữ pháp được đặc tả dưới định dạng JSGF (JSpeech Grammar Format). JSGF được sử dụng phổ biến trong nhận dạng ngôn ngữ nhằm định nghĩa cú pháp của ngôn ngữ cần nhận dạng.

Dưới đây là nội dung file erp.gram định nghĩa mô hình ngôn ngữ được sử dụng trong chương trình.

Bảng 4 Mô hình ngôn ngữ định dạng JSGF

#JSGF V1.0; /**

* JSGF Grammar for erp */

grammar erp;

public <hoadon> = (HOA DON); public <muahang> = (MUA HANG); public <banhang> = (BAN HANG);

42

public <vattu> = (VAT TU); public <taisan> = (TAI SAN); public <congcu> = (CONG CU); public <xaylap> = (XAY LAP); public <sanxuat> = (SAN XUAT); public <nhansu> = (NHAN SU); public <ketoan> = (KE TOAN);

public <khachhang> = (KHACH HANG); public <khachhang> = (KHACH HANG); public <nhacungcap> = (NHA CUNG CAP); public <nhanvien> = (NHAN VIEN);

public <quocgia> = (QUOC GIA); public <phongban> = (PHONG BAN); public <nganhang> = (NGAN HANG); public <hopdong> = (HOP DONG); public <sanpham> = (SAN PHAM); public <baocao> = (BAO CAO); public <quantri> = (QUAN TRI); public <khong> = (KHONG); public <mot> = (MOT); public <hai> = (HAI); public <ba> = (BA); public <bon> = (BON); public <nam> = (NAM); public <sau> = (SAU); public <bay> = (BAY); public <tam> = (TAM); public <chin> = (CHIN);

4.2.2 Xây dựng mô hình ngôn ngữ thống kê sử dụng bộ công cụ CMU

Một phương pháp khác để xây dựng mô hình ngôn ngữ là dựa trên thống kê. Bộ công cụ CMU cung cấp cho chúng ta khả năng xây dựng mô hình ngôn ngữ một cách nhanh chóng, đơn giản.

Với mặc định đã có sẵn bộ công cụ cmuclmtk, quy trình xây dựng mô hình ngôn ngữ thống kê với bộ công cụ CMU như sau:

- Chuẩn bị các câu nói sẽ xuất hiện trong ngôn ngữ, mỗi câu được đật trong cặp thẻ <s> </s>. Phải có khoảng trắng giữa câu, thẻ đóng và thẻ mở. Dưới đây là nội dung file Lenh.txt định nghĩa các câu được dùng trong chương trình

43

Bảng 5 Mô hình ngôn ngữ sử dụng CMU Toolkit

<s> HOA DON </s> <s> MUA HANG </s> <s> BAN HANG </s> <s> VAT TU </s> <s> TAI SAN </s> <s> CONG CU </s> <s> XAY LAP </s> <s> SAN XUAT </s> <s> NHAN SU </s> <s> KE TOAN </s> <s> KHACH HANG </s> <s> NHA CUNG CAP </s> <s> NHAN VIEN </s> <s> QUOC GIA </s> <s> PHONG BAN </s> <s> NGAN HANG </s> <s> HOP DONG </s> <s> SAN PHAM </s> <s> BAO CAO </s> <s> QUAN TRI </s> <s> KHONG </s> <s> MOT </s> <s> HAI </s> <s> BA </s> <s> BON </s> <s> NAM </s> <s> SAU </s> <s> BAY </s> <s> TAM </s> <s> CHIN </s>

- Sinh file từ vựng sử dụng công cụ text2wfreq và wfreq2vocab:

text2wfreq < Lenh.txt | wfreq2vocab > Lenh.vocab

Nội dung file từ vựng Lenh.vocab thu được như sau:

Bảng 6 Nội dung file từ vựng

## Vocab generated by v2 of the CMU-Cambridge Statistcal ## Language Modeling toolkit.

##

44 </s>

Một phần của tài liệu Xây dựng giao tiếp tiếng nói với phần mềm kế toán và quản trị doanh (Trang 33)