Học trong mạng Nơron nhiều lớp

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn (Trang 42)

2.2. Mạng Nơron nhân tạo

2.2.4. Học trong mạng Nơron nhiều lớp

Việc học cho mạng Nơ ron nghĩa là từ dữ liệu huấn luyện ta phải xây dựng một mạng Nơ ron gồm L lớp với các trọng số wij cũng như hàm kích hoạt g. Việc học này sử dụng thuật toán Back-Proppagation. Bản chất của thuật toán này là dựa trên phương pháp gradient trong quá trình tính toán và điều chỉnh tham số wij. Cụ thể các bước như sau:

- Tính toán giá trị  cho các nút ra

- Xuất phát từ lớp ra, lặp lại các thao tác sau cho mỗi lớp, cho đến khi lớp ẩn sớm nhất đạt được:

 Lan truyền các giá trị  quay lại lớp trước

 Cập nhật các trọng số giữa hai lớp.

Thuật toán học lan truyền ngược được trình bày trong hình 3.12. Function back-propagation();

Input: tập dữ liệu huấn luyện Q ={(xi,yi)}, cấu trúc mạng với L lớp, hàm kích hoạt g;

Output: mạng Nơ ron  với các trọng số wij Begin

Repeat

Bước 1: for each wij  do

wij = <giá trị số ngẫu nhiên bé> Bước 2: for  (xi, yi)  Q

for  i  L ai = xi;

Bước 4: for l =2 to L do for j  lớp l do

Bước 5: for j  lớp output do

Bước 6: for l = L-1 downto 1 do For i  lớp l do

Bước 7: for wij   do

Until <điều kiện dừng = true> End;

Hình 2.14. Thuật toán Back-Propagation 2.2.5. Học xây dựng cấu trúc mạng nơ ron

Phần trước chúng ta đã xem xét vấn đề học các trọng số với một cấu trúc mạng cụ thể chẳng hạn như mạng Bayes; tuy nhiên chúng ta cũng cần hiểu cách thức xây dựng cấu trúc mạng phù hợp. Nếu chúng ta chọn mạng quá lớn chúng ta sẽ tốn bộ nhớ, xuất hiện nhiều tham số,… Một số thuật toán đã được đề xuất nhằm giải quyết vấn đề này chẳng hạn thuật toán

optimal brain damage bắt đầu với một mạng kết nối đầy đủ và loại bỏ các

kết nối dần dần. Sau khi mạng được luyện lần đầu, một phương pháp tối ưu sẽ được áp dụng để loại bỏ các kết nối, sau đó được luyện lại, nếu chất lượng mạng không tăng, thao tác này sẽ được lặp lại. Trong quá trình xây dựng mạng, một số nút không có đóng góp nhiều cũng sẽ bị loại bỏ. Một số thuật toán khác thì theo ý tưởng làm lớn dần kích thước của mạng xuất phát từ một nút dựa trên tập huấn luyện và kiểm tra tính phù hợp của nó với tập dữu liệu. Thuật toán sẽ thêm các nút cần thiết để làm việc được với tất cả các dữ liệu huấn luyện.

2.3. Mô hình âm học

Một trong những mô hình xác suất được sử dụng phổ biến cho mô hình âm học là mô hình Markov ẩn HMM (Hidden Markov Model). Chương trình demo luận văn sử dụng là mô hình kết hợp Hidden Markov Model và Gaussian Mixtrue Model (HMM-GMM).

2.3.1. Mô hình toán học của hệ thống nhận dạng

Để có một hệ thống nhận dạng tự động có độ chính xác cao cần có mô hình âm học tốt. Hầu hết các hệ thống nhận dạng tiếng nói thống kê ngày nay đều dựa trên mô hình toán học của một hệ thống nhận dạng tiếng nói theo nguyên lý xác suất của Bayes.

(2.1)

Tín hiệu tiếng nói sau khi qua bước tiền xử lý như rời rạc hóa và trích chọn ra các thông tin đặc trưng, ta thu được là một chuỗi các vector đặc trưng tương ứng X={X1, X2, X3,…, XN}. Sau đó nhiệm vụ của hệ thống nhận dạng tiếng nói là tìm ra một chuỗi các từ W = { W1, W2, W3,…, WN} có nội dung tương ứng với X về mặt ngữ nghĩa, sao cho P(W | X) cực đại. P(W) là xác suất của chuỗi W, giá trị này có thể được tính toán thông qua một mô hình ngôn ngữ n-gram và nó hoàn toàn độc lập với tín hiệu tiếng nói X. P(X|W) là xác suất để X là W được xác định thông qua mô hình âm học (acoustic model). Giá trị P(X) có thể được bỏ qua do giá trị của nó không thay đổi trong một bộ dữ liệu cụ thể với tất các chuỗi dự đoán W.

2.3.2 Đơn vị huấn luyện cho Tiếng Việt

THANH ĐIỆU

ÂM ĐẦU

VẦN

Âm đệm Âm chính Âm cuối

Trong Tiếng Việt tiếng là đơn vị tự nhiên nhất cấu tạo nên lời nói, số lượng tiếng trong tiếng Việt khá lớn khoảng 6000 đến 8000 tiếng. Âm vị trong tiếng Việt gồm:

+ 22 phụ âm làm nhiệm vụ âm đầu. Đó là /b, m, f, v, t, t’, d, n, z, ‘…’, s, ‘…’, c, ‘…’, ‘…’, l, k, x, ‘…’, ‘…’, h, ‘…’/

+ 1 âm đệm /w/ có cấu tạo gần giống như nguyên âm làm âm chính /u/ + 16 nguyên âm gồm 13 âm đơn và 3 nguyên âm đôi làm âm chính. Đó là /i, e, ε, ‘...’, ‘...’,‘...’, a, ă, u, o, ɔ,‘...’, ‘...’, ie, ‘...’, uo/.

+ 8 âm cuối

+ Có 6 thanh điệu là không, ngã, hỏi, nặng, huyền, sắc

Có thể thấy số lượng âm vị không nhiều như tiếng, lựa chọn âm vị để huấn luyện là giải pháp tối ưu hơn. Khó khăn ở đây là thanh điệu, tuy nhiên thanh điệu ảnh hưởng nhiều nhất ở các nguyên âm. Khi dây thanh dao động, âm được tạo nên nếu đi ra ngoài tự do, có một âm hưởng êm ái, dễ nghe ta sẽ có các nguyên âm, ví dụ: [i], [e], [a], [u], [o]. Về mặt âm học, các nguyên âm bao giờ cũng là tiếng thanh. Bởi vậy có thể chia 6 nguyên âm ra thành 6 âm, tương ứng với 6 thanh điệu.

2.4. Mô hình ngôn ngữ

Mô hình ngôn ngữ (Language Model - LM) là một tập xác suất phân bố của các đơn vị (thường là từ) trên một tập văn bản cụ thể. Một cách tổng quát thông qua mô hình ngôn ngữ cho phép ta xác định xác suất của một cụm từ

hoặc một câu trong một ngôn ngữ. Mô hình ngôn ngữ là một thành phần quan trọng trong hệ thống nhận dạng từ vựng lớn, khi mà tại một thời điểm mô hình âm học có thể xác định ra rất nhiều từ có cùng xác suất. Khi đó mô hình ngôn ngữ sẽ chỉ ra từ chính xác nhất thông qua xác suất của nó trong cả câu đầu ra. Mô hình ngôn ngữ không chỉ giúp bộ giải mã quyết định từ đầu ra đối với mỗi mẫu nhận dạng mà nó còn giúp chuẩn hóa về mặt ngữ pháp cho đầu ra của hệ thống nhận dạng. Mô hình ngôn ngữ có nhiều hướng tiếp cận, nhưng chủ yếu được xây dựng theo mô hình N-gram. Và đây cũng là loại mô hình được sử dụng trong các thử nghiệm của luận án.

2.5. Kết luận

Trong chương này hai phương pháp học máy là mô hình Markov ẩn và phương pháp mạng Nơ ron đã được nghiên cứu và trình bày. Đây là hai phương pháp hiệu quả dùng nhiều trong các bài toán thực tế như phân lớp và dự đoán. Chương tiếp theo sẽ trình bày một ứng dụng về hệ thống điều khiển xe lăn bằng giọng nói dựa trên mô hình Markov ẩn.

Chương 3

MÔ PHỎNG HỆ THỐNG ĐIỀU KHIỂN XE LĂN BẰNG TIẾNG NÓI

3.1. Giới thiệu

Chương này nhằm mục đích sử dụng phương pháp nhận dạng tiếng nói ứng dụng trong điều khiển xe lăn. Chúng ta biết rằng xe lăn đối với người khuyết tật là một thiết bị vô cùng quan trọng. Hơn nữa đối với một số người khuyết tật khả năng điều khiển xe lăn bằng tay là không thể. Trên thế giới cũng đã có nhiều nước nghiên cứu về vấn điều khiển xe lăn thông minh, chẳng hạn các dự án về xe lăn thông minh được nghiên cứu và triển khai ở nhiều phòng thí nghiệm tại Mỹ (xem hình 3.1).

Hình 3.1. Xe lăn thông minh tại phòng thí nghiệm của Đại học Texas (Mỹ)

Ở Việt nam thực tế sản phẩm xe lăn điều khiển bằng giọng nói cũng đã được nghiên cứu và triển khai. Cụ thể sản phẩm xe lăn điều khiển bằng giọng nói đã đạt giải nhất cuộc thi dành cho sinh viên của Việt nam năm 2015 (xem hình 3.2).

Hình 3.2 Xe lăn điều khiển bằng giọng nói đạt giải nhất cho sinh viên tại Việt nam năm 2015

Hình 3.3. Xe lăn điều khiển bằng giọng nói của tác giả và nhóm nghiên cứu tại phòng thí nghiệm

3.2. Giới thiệu về hệ thống xe lăn và quy trình điều khiển

3.2.1. Giới thiệu về các thành phần chính của xe lăn

Một chiếc xe lăn điện tử sử dụng một điện thoại thông minh như một bộ điều khiển bằng giọng nói. Khung xe, ghế, pin, động cơ DC bên phải, động cơ DC trái và thông số giao tiếp Bluetooth 9600 bps (xem hình 3.3).

Hình 3.4. Mô hình kế nối hệ thống chi tiết giữa module điều khiển của xe lăn và điều khiển từ xa của điện thoại thông minh

Sơ đồ hệ thống điều khiển bằng giọng nói qua điện thoại kết nối Blue Tooth được minh họa trên hình 3.4. Sau khi nhận được tín hiệu từ điện thoại chương trình điều khiển trên Micro-controller sẽ tiến hành xử lý và điều khiển động cơ của xe lăn.

3.2.2. Quy trình điều khiển hoạt động của xe lăn

Chúng ta sẽ có hai bước chính khi lập trình điều khiển xe lăn như sau: - Viết chương trình nhận dạng tiếng nói trên thiết bị điện thoại di động cũng như truyền tín hiệu đến xe lăn.

- Viết chương trình điều khiển xe lăn khi nhận được lệnh qua Blue tooth.

Để thiết kế các phần mềm cho hai chức năng trên, tôi đã tìm hiểu và khai thác các phần mềm mã nguồn mở cung cấp cho cộng đồng trên internet.

Cụ thể là các phần mềm nhận dạng của Sphinx-4 và phần mềm điều khiển động cơ.

3.3. Nhiệm vụ và chức năng của hệ thống

3.3.1. Nhiệm vụ của hệ thống

Nhiệm vụ chính của hệ thống là nhận dạng tiếng Việt và gửi lệnh điều khiển xuống module điều khiển xe lăn thông qua Bluetooth trên điện thoại Android. Sau khi nhận được tín hiệu từ điện thoại Android gửi xuống mudule Arduino sẽ dựa theo câu lệnh điều khiển xe lăn chạy theo chương trình đã lập trình sẵn.

3.3.2. Chức năng của hệ thống

Hệ thống cần đáp ứng được những yêu cầu sau: Trên điện thoại Android:

-Thu âm từ microphone của điện thoại.

-Phân tích âm thanh nhận được từ microphone.

-Nhận dạng được tiếng nói điều khiển từ dữ liệu phân tích. -Kết nối module Bluetooth.

-Truyền dữ liệu thông qua Bluetooth của thiết bị. Trên module Arduino:

-Nhận dữ liệu từ module Blutooth.

-Xuất tín hiệu điều khiển động cơ xe lăn. -Nhận tín hiệu từ bộ cảm biến tốc độ động cơ. -Tính toán điều chỉnh lại tốc độ.

3.4. Thiết kế hệ thống điều khiển xe lăn

3.4.1. Phần mềm, thư viện và CSDL nhận dạng.

 Các phần mềm và thư viện cần thiết. -Phần mềm Android studio.

-Phần mềm Arudino. -Hệ điều hành Ubuntu.

-Thư viện pocketsphinx-android-5prealpha-nolib.jar -Pocket sphinxtrain-5prealpha.tar.gz.

-Pocket sphinxbase-5prealpha.tar.gz. -Thư viện PID cho Arduino.

-Một số thư viện cần thiết khi cài pocket sphinx trên Ubuntu.

3.4.2. Các bước của giải thuật điều khiển xe lăn

Các bước của việc điều khiển xe lăn như sau:

Bước 1: Khi ứng dụng được mở, yêu cầu bật bluetooth

Bước 2: Có một nút kết nối ảo được sử dụng để kết nối điện thoại di động Android với phần cứng và Bluetooth để truyền dữ liệu không dây.

Bước 3: Khi Bluetooth được bật, ứng dụng sẽ kiểm tra đầu vào.

Bước 4: Nếu lệnh nhận được là Tiến, toàn bộ động cơ DC sẽ tiến lên phía trước cho chuyển động tuyến tính.

Bước 6: Nếu lệnh nhận được là Lùi, toàn bộ động cơ DC sẽ chuyển động hướng ngược lại cho chuyển động tuyến tính.

Bước 7: Nếu lệnh nhận được là Trái, động cơ DC trái sẽ dừng lại và động cơ DC phải di chuyển theo hướng trái.

Bước 8: Nếu lệnh nhận được là rẽ Phải, động cơ DC phải sẽ dừng lại và động cơ DC trái di chuyển theo hướng phải

Bước 9: Nếu lệnh nhận được là Dừng, cả hai động cơ sẽ dừng lại.

Bước 10: Khi người sử dụng muốn ngưng sử dụng xe, người sử dụng chạm vào nút tắt kết nối để tắt kết nối không dây.

Hình 3.5. Lưu đồ thuật toán của hệ thống nhận dạng

Bắt đầu

Bluetooth đã được bật chưa?

Kiểm tra đầu vào

Bluetooth đã bật

Gửi yêu cầu bật Bluetooth

Giá trị đầu vào

Tiến

n

Lùi Dừng Trái Phải

Động cơ di chuyển về phía trước Động cơ di chuyển về phía sau Động cơ dừng lại Động cơ trái dừng, động cơ phải di chuyển sang trái Động cơ phải dừng, động cơ trái di chuyển sang phải Kết thúc No Yes Yes No

3.4.3. Thiết kế phần mềm

Hình 3.6. Sơ đồ khối của quá trình nhận dạng tiếng nói trong Sphinx-4

Chức năng quan trọng nhất ở đây là nhận dạng tiếng nói, chúng tôi sử dụng công cụ mã nguồn mở của Sphinx-4 (hình 3.6). Trong đó có thể tóm tắt chức năng cơ bản như sau:

- Frontend: Từ Input là dữ liệu đầu vào là một chuỗi các sóng âm thanh sẽ được mã hóa và trích chọn đặc trưng qua Fronend và thu được các đặc trừng feature và gửi vào bộ giải mã (decoder). Phương pháp thường dùng trong công đoạn này là MFCC chúng sẽ chuyển đổi tín hiệu âm thanh sang dạng vector.

- Linguist: Chức năng chính của Linguist là cung cấp mô hình ngữ âm, từ điển và mô hình ngôn ngữ nhằm xây dựng một đồ thị cho việc tìm kiếm trên nền tảng sử dụng mô hình Markov ẩn trong đó mô hình ngôn ngữ

dùng để tính xác xuất tiên nghiệm, mô hình ngữ âm được dùng để tính giá trị likelihood. Cụ thể một mô hình ngữ âm Gaussian sẽ được áp dụng để tính các likelihood quan sát được của các vector đặc trưng.

- Decoder: Bộ giải mã (decoder) sẽ có nhiệm vụ sử dụng mô hình tìm kiếm và dữ liệu đầu vào để cho ra kết quả. Mô hình này sử dụng thuật toán Viterbi với các đầu vào gồm các vector đầu vào, mô hình ngữ âm Gausian và mô hình ngôn ngữ nhằm tìm kiếm xâu kí tự biểu diễn chuỗi từ đầu ra.

- Ngoài ra các giá trị tham số của mô hình Markov trên cũng được sinh ra bằng pha huấn luyện nhúng bằng cách sử dụng bộ từ vựng đầu vào. Như vậy ngoài các thư viện chuẩn của Andtoid, chúng ta phải khai báo thêm các thư viện từ Sphinx-4 như sau:

import edu.cmu.pocketsphinx.Assets; import edu.cmu.pocketsphinx.Hypothesis; import edu.cmu.pocketsphinx.RecognitionListener; import edu.cmu.pocketsphinx.SpeechRecognizer; import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup;

Các thư viện trên sẽ có các hàm tương ứng cho việc nhận dạng tiếng nói trên điện thoại.

Cài đặt tham số trong môi trường nhận dạng:

private void setupRecognizer(File assetsDir) throws IOException { recognizer = defaultSetup()

.setSampleRate(16000)

.setAcousticModel(new File(assetsDir, "dkxelan")) .setDictionary(new File(assetsDir, "dkxelan.dict"))

.setRawLogDir(assetsDir) .setKeywordThreshold(1e-20f)

.setBoolean("-allphone_ci", false) .setBoolean("-allphone_cd", true) .getRecognizer();

recognizer.addListener(this);

File dkxlGrammar = new File(assetsDir, "dkxelan.gram"); recognizer.addGrammarSearch("dkxelan", dkxlGrammar); }

Tạo luồng nhận dạng trong onCreate:

new AsyncTask<Void, Void, Exception>() { @Override

protected Exception doInBackground(Void... params) { try {

Assets assets = new Assets(PocketSphinxActivity.this); File assetDir = assets.syncAssets();

setupRecognizer(assetDir); } catch (IOException e) { return e; } return null; } @Override

protected void onPostExecute(Exception result) { if (result == null)

recognizer.stop();

}

}.execute();

Hàm trả về kết quả nhận dạng:

public void onResult(Hypothesis hypothesis) { ((TextView) findViewById(R.id.txtStatus)) .setText("...");

if (hypothesis != null) {

String text = hypothesis.getHypstr();

Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

((TextView) findViewById(R.id.txtStatus)) .setText(text);

dieuKhienXeLan(text); }

}

Kiểm tra thiết bị có hỗ trợ Bluetooth hay không:

private void checkBTState() { if (btAdapter == null) {

errorExit("Fatal Error", "Bluetooth not support"); } else {

tatBluetooth(); }

}

Tạo socket kết nối Bluetooth:

private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {

if (Build.VERSION.SDK_INT >= 10) { try {

final Method m =

device.getClass().getMethod("createInsecureRfcommSocketToServic eRecord", new Class[]{UUID.class});

return (BluetoothSocket) m.invoke(device, MY_UUID); } catch (Exception e) {

Log.e(TAG, "Could not create Insecure RFComm Connection", e);

} }

return device.createRfcommSocketToServiceRecord(MY_UUID); }

Gửi ký tự qua Bluetooth:

public void write(String message) {

Log.d(TAG, "...Data to send: " + message + "..."); byte[] msgBuffer = message.getBytes();

try {

mmOutStream.write(msgBuffer); } catch (IOException e) {

Log.d(TAG, "...Error data send: " + e.getMessage() + "..."); }

}

Thiết kế phần mềm trên Arduino.

Hàm điều chỉnh tốc độ động cơ: void motor_speech(void){

IRQcount=0; tmp=(((num_pulse*1000.0)/(pulses_cycle*del_timer_ms))/rpm)*255; total=0; for (i=0;i<=3;i++) { tmp_s[i]=tmp_s[i+1]; total+=tmp_s[i]; } tmp_s[4]=tmp; total+=tmp; speech=total/5; //Serial.print("speech=");Serial.println(speech); } Hàm nhận dữ liệu từ Bluetooth: void serialEvent() {

while (Serial.available()) in_command = (char)Serial.read(); }

Hàm có chức năng điều khiển:

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn (Trang 42)

Tải bản đầy đủ (PDF)

(65 trang)