Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
844,87 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CƠ KHÍ BỘ MÔN CƠ ĐIỆN TỬ * TRÍ TUỆ NHÂN TẠO TRONG ROBOT Đề tài: NHẬN DẠNG GIỌNG NÓI SỬ DỤNG TENSORFLOW Giáo viên hướng dẫn: Ts Nguyễn Xuân Thuận Ts Hoàng Hồng Hải Sinh viên thực : Hoàng Anh Dũng ( 20184401) Đặng Đình Hạnh ( 20184436) Nguyễn Thành Cơng ( 20184365) TRÍ TUỆ NHÂN TẠO TRONG ROBOT Mục lục Phần I Đặt vấn đề………………………………………………………………2 Mục đích, lý chọn đề tài………………………………………………2 Tổng quan âm model nhận dạng giọng nói … …………….4 2.1 Kiến thức âm ……………………………………….4 2.1.1 Âm nguyên lý hình thành tiếng nói………………… 2.1.2 Các đặc trưng âm thanh……………………………………4 2.1.3 Biến đổi Fourier……………………………………………… 2.1.4 Quang phổ…………………………………………………… 2.2 Giới thiệu model nhận dạng giọng nói……………………… … 2.2.1 Mạng CNN ………………………………………………….…9 2.2.2 Tensor Flow Keras……………………………………… 13 2.2.3 Model nhận dạng giọng nói…………………………….…… 14 Phần II Xây dựng model nhận dạng giọng nói……… ………………………15 Phần III Kết quả…… ………………………………… ……………………16 Phần IV Kết luận………………………………………………… … ………18 Thu hoạch………………………………………………… ………… 18 Khó khăn …………………………………………………………….…18 Định hướng phát triển……………………………………………… …19 Phần V Tài liệu tham khảo…………….…………………………………… 19 Phần VI Phụ lục…………………….……………………… ……………… 20 TRÍ TUỆ NHÂN TẠO TRONG ROBOT I Đặt vấn đề Mục đích, lý chọn đề tài Trong phim khoa học viễn tưởng, thường hay thấy cảnh người tương tác với thiết bị điện tử giọng nói Giấc mơ có từ lâu dần trở thành thực Những smartphone, tablet có tính điều khiển giọng nói, số sản phẩm chí cịn trả lời lại người dùng thể hai người nói chuyện với Sự đời công nghệ trở thành xu hướng mẻ thị trường ứng dụng di động, đặc biệt app trước đòi hỏi người dùng phải gõ nhập liệu nhiều Vì lại giọng nói ? Có trăm, nghìn ứng dụng cho phép người dùng tìm kiếm, viết email, ghi đặt lịch hẹn smartphone Thế nhưng, với số người, việc sử dụng bàn phím nhỏ xíu điện thoại khơng tiện lợi, chí khó chịu Tốc độ gõ bạn nhanh xác, có người điên lên phải xóa viết lại chữ họ bấm nhầm sang phím bên cạnh Giọng nói giải pháp hợp lý tính đến thời điểm Người dùng khơng xài giọng nói phương thức nhập liệu mà thân thiết bị xài giọng nói để đọc thơng tin cần thiết Đó chưa kể đến lợi ích to lớn mà phần mềm dựa giọng nói mang lại cho người khiếm thị Họ tận hưởng tiến cơng nghệ tương tự mà người bình thường làm, khơng cịn khoảng cách xuất khiếm khuyết giác quan Tất nhiên, cơng nghệ giọng nói giai đoạn đầu chưa thể thay hoàn toàn bàn phím ảo/vật lý nút hình Tuy nhiên, dần tiến đến kỉ nguyên đại hơn, ứng dụng giọng nói hồn thiện Hãy nhìn vào Google Voice Input, Apple Siri hay Microsoft Cortana là bạn dễ dàng thấy xu hướng Càng ngày phần mềm nhận dạng giọng nói càng thơng minh hơn, khả nhận dạng xác hơn, thơng tin trả hữu ích đa dạng Người ta áp dụng kĩ thuật data mining (khai thác liệu theo chiều sâu, đưa phân tích nhiều mặt), machine learning (cho phép TRÍ TUỆ NHÂN TẠO TRONG ROBOT máy móc tự học hỏi thói quen, hành vi người dùng) nhằm cải thiện hiệu suất làm việc cơng nghệ nhận dạng giọng nói Một số ví dụ giới cơng nghệ: Đã có nhiều nghiên cứu việc triển khai giới thiệu thành công ứng dụng giọng nói Chúng nhắc đến Ask.com, dịch vụ cho phép người dùng hỏi nhận câu trả lời, tích hợp cơng nghệ nhận dạng giọng nói Nuance phát triển vào ứng dụng iOS Android Sự liên kết cho phép người dùng hỏi, trả lời đăng tải lời bình luận Amazon cập nhật app Kindle iOS để hỗ trợ tính VoiceOver iOS VoiceOver tự động đọc nội dung hình để giúp cho việc xem sách người bị khiếm thị dễ dàng thuận tiện Hãng cho biết có khoảng 1,8 triệu đầu sách e-book tương thích với tính Bản thân Amazon mua lại công ty IVONA Software vốn cung cấp giải pháp chuyển đổi từ chữ sang giọng nói cho sách mua từ Amazon Và có Siri, Google Voice hay Cortana Đây ứng dụng phát triển tập đồn cơng nghệ lớn với tiềm lực mạnh mẽ quy tụ nhiều nhân tài Bộ ba phần mềm giúp người dùng thiết bị di động tương tác với thiết bị cách thông minh hơn, từ việc đặt câu hỏi, nhận câu trả lời điều chỉnh thông số máy khởi chạy app Một việc đơn giản kể đến đặt lịch hẹn báo thức Trước phải chục thao tác chạm đặt xong kiện, với Siri, Google Voice hay Cortana, bạn cần lệnh xong Mọi thao tác, từ việc ghi nội dung thiết lập giấc, thực cách tự động Tiềm công nghệ nhận dạng giọng nói lớn Hiện khai thác bề chưa thật sâu Hãy nghĩ đến tương lai nơi bạn hồn tồn để điện thoại túi quần thực tất cách nói vào tai nghe Bluetooth Nhìn rộng hơn, bạn vừa tới nhà nói vào điện thoại mình: mở máy lạnh nha, kao nhà rồi, mở sẵn nhạc nhé, mở cửa bước vào thứ thực Tính nhận dạng giọng nói khơng dừng lại việc nhập liệu mà mở chân trời để khai thác đơn giản hóa sống Vì vậy, nhóm lựa chọn đề tài: Nhận dạng giọng nói sử dụng TensorFlow TRÍ TUỆ NHÂN TẠO TRONG ROBOT Tổng quan âm model nhận dạng giọng nói 2.1 Kiến thức âm 2.1.1 Âm nguyên lý hình thành tiếng nói Âm dao động học hạt , lan truyền vật chất giống sóng Ví dụ sóng âm Ngun lý đẩy từ phổi tạo lên âm Đầu tiên, luồng đẩy lên từ phổi, tạo áp lực lên quản Dưới áp lực quản mở giúp luồng khí qua, làm áp lực giảm xuống, quản đóng lại, làm áp lực lại tăng lên Chu kì đóng/mở quản liên tục tái diễn, tạo tần số sóng âm với tần số nam 125Hz nữ 210Hz Điều lý ng ta nói giọng nữ cao giọng nam Như vậy, quản tạo tần số sóng âm Tuy nhiên, luồng cịn qua quan vòm họng, khoang miệng, lưỡi, răng, mũi…Điều làm khuếch đại triệt tiêu vài tần số để tạo tiếng nói 2.1.2 Các đặc trưng âm Âm có đặc trưng vật lý đặc trưng sinh lý Đặc trưng vật lý: TRÍ TUỆ NHÂN TẠO TRONG ROBOT a/ Tần số (f): dao động nguồn âm, âm trầm (bass) có tần số nhỏ, âm cao (treble) có tần số lớn b/ Cường độ âm (I): thời điểm xác định lượng sóng âm truyền vng góc qua diện tích đơn vị thời gian c/ Đồ thị dao động âm: Âm phát khơng khí thu lại truyền thành dao động cần rung dao động điện có tần số Cấu tạo loa biến dao động thành dao động điện Đồ thị dao động âm nốt nhạc dây đàn violon phát Đặc trưng sinh lý a/ Độ cao âm: gắn liền với tần số âm Âm trầm có tần số nhỏ, âm cao có tần số lớn Do tần số nam 125Hz nhỏ nữ 210Hz, nên nguyên nhân cho quan điểm giọng nữ cao giọng nam b/ Độ to âm: gắn liền với mức cường độ âm (tức phục thuộc vào cường đồ âm; cường độ lớn âm to) c/ Âm sắc: Có liên quan mật thiết với đồ thị dao động âm phổ âm Âm sắc giúp ta phân biệt âm từ nguồn phát TRÍ TUỆ NHÂN TẠO TRONG ROBOT Ví dụ nhạc nghe ta xác định nhạc chơi nhạc cụ (violon, piano, guitar…) âm loại nhạc cụ khác 2.1.3 Biến đổi Fourier Âm chuỗi tín hiệu kết hợp từ sóng có tần số khác Thơng qua phép biến đổi Fourier, ta đưa tín hiệu âm miền thời gian (dạng sóng) thành tín hiệu miền tần số(dạng quang phổ) Tín hiệu âm từ tín hiệu dạng sóng sang miền tần số Một số ví dụ minh họa biến đổi Fourier Với ánh sáng, ta biết ánh sáng trắng truyền qua lăng kính phân tách thành ánh sáng đơn sắc với tần số riêng biệt ánh sáng trắng qua lăng kính phân tán thành ánh sáng đơn sắc Với âm thanh, ví dụ gần tai người TRÍ TUỆ NHÂN TẠO TRONG ROBOT Cấu tạo tai người Âm nghe hang ngày pha trộn nhiều sóng âm với tần số khác (từ 20-20000Hz) Tuy nhiên, tai người hoạt động phi tuyến, tức độ cảm nhận âm 20000Hz gấp 1000 lần độ cảm nhận âm 20Hz Khi âm truyền tới tai, va đập vào màng nhĩ Màng nhĩ rung truyền rung động lên xương nhỏ: malleus, incus, stapes tới ốc tai xương giúp truyền dao động vào ốc tai TRÍ TUỆ NHÂN TẠO TRONG ROBOT Cấu tạo bên ốc tai Ôc tai chứa dịch nhầy bên trong, giúp truyền âm thanh, dọc theo ốc tai Trên ốc tai chứa nhiều tế bào long nhỏ, khác độ dài, độ dày, độ cứng, phản ứng với tần số khác Do đó, tế bào thần kinh khác não kích hoạt tùy theo biến đổi Fourier tai 2.1.4 Quang phổ Quang phổ hay cò n gọ i phâ n quang họ c Quang phổ đượ c hiểu đơn giả n mộ t dả i mà u giố ng sắ c cầ u vồ ng ng đượ c mà n ả nh có tượ ng tá n sắ c nh sá ng Vớ i â m thanh, quang phổ mộ t đạ i diện trực quan của quang phổ của tần số của tín hiệu thay đổi theo thời gian Khi áp dụng cho một tín hiệu âm thanh, quang phổ gọi là máy ghi âm, dấu giọng nói, là giọng nói Khi liệu biểu diễn dạng biểu đồ 3D, chúng gọi là thác nước Quang phổ sử dụng rộng rãi lĩnh vực Âm nhạc, ngôn ngữ học, sonar, ra đa, xử lý giọng nói,[1] địa chấn học, người khác Quang phổ âm sử dụng để xác định từ nói phiên âm để phân tích các gọi khác động vật Định dạng phổ biến biểu đồ có hai kích thước hình học: trục biểu diễn thời gianvà trục lại đại diện cho tần số; chiều thứ ba ra biên độ của tần số cụ thể thời điểm cụ thể biểu thị bằng cường độ hoặc màu điểm ảnh TRÍ TUỆ NHÂN TẠO TRONG ROBOT Quang phổ ghi âm từ đàn violon 2.2 Giới thiệu model nhận dạng giọng nói 2.2.1 Mạng CNN a/ Định nghĩa mạng CNN CNN tên viết tắt từ Convolutional Neural Network (hay cịn gọi CNNs_mang nơ ron tích chập) Đây mơ hình Deep Learning vơ tiên tiến CNN cho phép bạn xây dựng hệ thống thơng minh với độ xác vơ cao. Hiện nay, CNN ứng dụng nhiều toán nhận dạng object ảnh. Và kiến thức cụ thể CNN lý giải sau: Convolutional Đây loại cửa sổ dạng trượt nằm ma trận Những convolutional layer có parameter học để điều chỉnh lấy thơng tin xác mà khơng cần phải chọn feature. Convolution hay tích chập nhân phần tử ma trận Sliding Window gọi kernel, filter feature detect loại ma trận có kích thước nhỏ Feature Feature đặc điểm, CNN so sánh hình ảnh dựa theo mảnh mảnh gọi Feature Thay phải khớp ảnh lại với CNN nhìn tương động tìm kiếm thơ Feature khớp với hình ảnh tốt hơn. Mỗi Feature xem hình ảnh mini có nghĩa chúng mảng chiều nhỏ Các Feature tương ứng với khía cạnh hình ảnh chúng khớp lại với nhau. TRÍ TUỆ NHÂN TẠO TRONG ROBOT Cấu trúc CNN Fully connected layer Lớp có nhiệm vụ đưa kết sau lớp convolutional layer pooling layer nhận ảnh truyền Lúc này, ta thu kết model đọc thông tin ảnh để liên kết chúng cho nhiều output ta sử dụng fully connected layer. Ngoài ra, fully connected layer có giữ liệu hình ảnh chúng chuyển thành mục chưa phân chia chất lượng Cái giống với phiếu bầu chúng đánh giá để bầu chọn hình ảnh có chất lượng cao nhất. c/ Cấu trúc mạng CNN Mạng CNN tập hợp lớp Convolution bị chồng lên sử dụng hàm nonlinear activation ReLU để kích hoạt trọng số node Lớp sau thơng qua hàm trọng số node Những lớp sau thơng qua hàm kích hoạt tạo thông tin trừu tượng cho lớp Trong mơ hình CNN có tính bất biến tích kết hợp Nếu bạn có đối tượng mà lại chiếu theo nhiều góc độ khác độ xác bị ảnh hưởng. Với chuyển dịch, quay co giãn pooling layer sử dụng để giúp làm bất biến tính chất Vì vậy, CNN đưa kết có độ xác tương ứng mơ hình Trong đó, pooling layer cho bạn tính bất biến phép dịch chuyển, phép co dãn phép quay Cịn tính kết hợp cục cho bạn thấy cấp độ biểu diễn, thông tin từ thấp đến mức độ cao với độ trừu tượng thơng qua convolution từ filter. Mơ hình CNN có layer liên kết với dựa vào chế convolution Những layer kết từ convolution từ layer trước đó, mà bạn có kết nối cục phù hợp Vậy, neuron lớp sinh từ kết filter áp đặt lên vùng ảnh cục neuron có trước đó. Trong huấn luyện mạng, CNN tự động học hỏi giá trị thông qua lớp filter dựa vào cách thức mà người dùng thực 11 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Trong đó, cấu trúc CNN thường bao gồm phần là: Local receptive field (trường cục bộ): Lớp có nhiệm vụ tách lọc liệu, thơng tin ảnh lựa chọn vùng ảnh có giá trị sử dụng cao nhất. Shared weights and bias (trọng số chia sẻ): Lớp giúp làm giảm tối đa lượng tham số có tác dụng yếu tố mạng CNN Trong convolution có feature map khác feature lại có khả giúp detect vài feature ảnh. Pooling layer (lớp tổng hợp): Pooling layer lớp cuối có tác dụng làm đơn giản thông tin đầu Có nghĩa là, sau hồn tất tính tốn quét qua lớp đến pooling layer để lược bớt thơng tin khơng cần thiết Từ đó, cho kết theo ý mà người dùng mong muốn. 2.2.2 Tensor Flow Keras a/ Khái niệm TensorFlow Keras Với bùng nổ lĩnh vực Trí Tuệ Nhân Tạo – A.I. trong thập kỷ vừa qua, machine learning deep learning rõ ràng phát triển theo Và thời điểm tại, TensorFlow chính thư viện mã nguồn mở cho machine learning tiếng giới, phát triển nhà nghiên cứu từ Google Việc hỗ trợ mạnh mẽ phép toán học để tính tốn machine learning deep learning giúp việc tiếp cận toán trở nên đơn giản, nhanh chóng tiện lợi nhiều. Để hiểu cách đơn giản, Tensor Flow thư viện phần mềm mã nguồn mở phát triển Google, hỗ trợ mạnh mẽ phép toán học để tính tốn machine learing deep learning Trong Python, Tensorflow khơng tích hợp sẵn phải cài lệnh pip install tensprflow Sau cài đặt xong, ta import lệnh import tensorflow Keras thư viện “high_level” với phần “low_level” (còn gọi backend) TensorFlow Keras có cú pháp đơn giản TensorFlow nhiều Có thể chạy CPU GPU Nhìn chung, Keras framework đơn giản để xây dựng model b/ Các khái niệm Keras Nhìn chung, muốn làm việc với Keras ta cần biết số khái niệm sau: 12 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Sequential: hiểu đơn giản nơi để chứa model Keras; ta add lớp vào Layers: lớp khác model Có nhiều lớp khác nhau; ví dụ: lớp Dense, Flatten, Pooling, Conv2D…; khơng có cơng thức để tính số lớp mạng ta xây dựng, việc hoàn toàn dựa vào kinh nghiệm người xây dựng model Action Function: hàm lớp để tính tốn mạng neural Có nhiều hàm khác nhau, ví dụ hàm Relu… Fit:là việc train model, đưa liệu vào model để train Loss: hàm mát Ví dụ muốn trainmodel, ta fit data vào mạng, để giảm tối đa giá trị loss model hoạt động xác Optimizer: ( SDG, Adam) thuật toán để việc train model tối ưu SDG Adam thuật toán thường sử dụng Evaluation: đánh giá model Có nhiều cách đánh dùng tập test, hay dùng liệu để test… c/ Các bước xây dựng mạng CNN Keras Load liệu Dữ liệu ta có tập lớn, ta chia tập thành tập: train, validation test Tập train dùng để fit liệu vào mạng để trai model, tối ưu w (hiểu đường nối neural mạng) Tập validation để kiểm tra model, xem model hoạt động có tốt khơng Cịn test tập để đánh giá model, cho model chưa nhìn tập test, điều cho toán thực tế sản phẩm (model) hoàn thành cần kiểm tra với điều kiện thực tế bên ngoài, khơng phải với điều kiện phịng thí nghiệm Xây dựng model Một model xây dựng gồm lớp (Dense, Conv2D, Pooling, Flatten,…Ví dụ: Với lớp Pooling, tập hợp dể gom tập điểm ảnh với chọn tập nhỏ Lớp Flatten giúp phẳng liệu, lớp tích chập Conv2D làm cho đặc trung ảnh phản ánh tốt Compile model Sau xây dựng xong model, ta cần compile model lệnh: mode.compile(), ta truyền vào thuật toán để tối ưu model thuật tốn Adam, SDG, Train model 13 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Đây trình ta đưa tập test vào model để train, với EPOCH số vịng train Qua lần train ta có giá trị loss accuracy để đánh giá hiệu suất trình train Đánh giá model Tương tự với trình train, trình ta đưa tập validation vào model để train, với EPOCH số vòng train Qua lần train ta có giá trị loss accuracy để đánh giá hiệu suất trình đánh giá model Dự đốn liệu Tương tự với trình train đánh giá, ta đưa tập test vào model Như biết, tập test tập mà model chưa nhìn thấy, điều với tốn thực tế đặt Ngồi tập test ta đưa tập liệu data ban đầu để kiểm tra model Lưu model Việc lưu model thơng qua lệnh model.save() có lợi ích gọi model cần mà khơng cần train lại, tăng số vịng train, mà việc train máy tính khó Load model Là q trình ta lấy model lưu để tiến hành làm (kiểm tra, test model…) 2.2.4 Model nhận dạng giọng nói Với điều chia sẻ trên, ta hiểu đơn giản việc xây dựng model nhận dạng giọng nói, việc ta xây dựng model với mơ hình mạng neural (mạng CNN, RNN, NN, KNN,…) Đầu vào (data) liệu giọng nói, ta dùng gói liệu mạng, tự tạo gói liệu từ giọng nói Sau q trình xây dựng mơ hình mạng CNN để train, nói, mạng CNN gồm lớp, khơng có cách để tính tốn cần lớp cho mạng, mà thông qua kinh nghiệm người lập trình Một số ý là nhận dạng giọng nói, nên file ta dùng file âm dạng wav Và ta cần chuyển tín hiệu âm từ miền sóng sang miền tần số, chuyển tín hiệu miền tần số dang dạng quang phổ, quang phổ có dạng hình ảnh, tức hiểu, ta coi âm có dạng hình ảnh Vì vậy, ta sử dụng mạng CNN(chuyên dùng để xây dựng model nhận diện hình ảnh) để xây dựng model 14 TRÍ TUỆ NHÂN TẠO TRONG ROBOT II Xây dựng model nhận dạng giọng nói Các bước xây dựng model: Nhập tập liệu: để tiết kiệm thời gian, chúng em dùng tập liệu nhỏ Speech Commands Tập liệu gốc bao gồm 105000 tệp âm định dạng wav người nói 35 từ khác Dũ liệu Google thu thập phát hành theo giấy phép CC BY Trích xuất âm thành chia liệu: bước chia liệu đầu vào thành phần: train_files, val_files test_files theo tỉ lệ 80:10:10 Đọc tệp âm nhãn chúng: xử lý liệu tạo tensor giải mã cho dạng sóng nhãn tương ứng Các hàm trợ giúp là: +decode_audio: đưa liệu âm tensor khoảng giá trị từ -1 đến +get_label: dán nhãn cho tệp +get_spectrogram: đưa liệu dạng sóng thành dạng quang phổ Xây dựng đào tạo model: lớp mạng CNN Resizing(32,32); Nomalize; Conv2D(32,3,relu); Conv2D(42,3,relu); MaxPooling2D(); Dropout(); Flatten(); Dense(); Dropout; Dense() Train model: đưa tập test val vào model để tiến hành train model Đánh giá hiệu suất model: Sử dụng file test_files để test 15 TRÍ TUỆ NHÂN TẠO TRONG ROBOT III Kết Mơ hình mạng CNN nhận dạng giọng nói xây dung : Qua 10 vòng train, model đạt val_accuracy mức 83,6% 16 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Kết test từ “GO” Kết test từ “YES” Kết test từ “LEFT” Kết test từ “NO” Kết test từ “RIGHT” Kết test từ “UP” 17 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Kết test từ “DOWN” Kết test từ “STOP” Nhận thấy kết sau test cho từ đạt độ xác 85-100% từ đạt độ xác thấp “go” “no” Có thể dễ hình dung ngày từ cách phát âm, từ coi từ láy tiếng Việt, có dạng quang phổ giống nhiều nên dễ bị nhầm lẫn IV Kết luận 4.1 Thu hoạch Thơng qua q trình nghiên cứu làm việc, chúng em hiểu thêm nhiều điều âm thanh, nguyên lý hình thành tiếng nói, quang phổ ăm đặt trưng âm thanh, xây dựng model bản, cấu tạo mạng neural làm việc với thư viện hỗ trợ TensorFlow Keras…, Từ xây dựng “Model nhận dạng giọng nói sử dụng TensorFlow” Model cho kết nhận dạng tương đối tốt độ xác 85% 4.2 Khó khăn Mặc dù cố gắng hoàn thành tập lớn với cường độ cao, kì học cịn nhiều mơn học nữa, kinh nghiệm thực tế chúng em cịn thiếu, phần viết code chưa tốt thời gian train cho model chưa đủ nhiều nên chắn tập lớn chúng em nhiều thiếu sót bất cập Vì chúng em mong sửa chữa góp ý từ quý thầy cô để chúng em rút kinh nghiệm bổ sung kiến thức cho thân 4.3 Định hướng phát triển 18 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Trong tương lai, chúng em cố gắng nâng cáp model để nhận dạng nhiều từ với độ xác cao Ngồi chúng em muốn phát triển kết nối model với thiết bị thực (ví dụ điều khiển turtlebot tiếng nói hay điều khiển thiết bị giọng nói…) V Tài liệu tham khảo Bài giảng “Trí tuệ nhân tạo” Nguyễn Nhật Quang, Viện Công nghệ thông tin-Đạo học Bách khoa Hà Nội https://miai.vn VI Phụ lục 19 TRÍ TUỆ NHÂN TẠO TRONG ROBOT Code Python import os import pathlib import matplotlib.pyplot as plt import numpy as np import seaborn as sns import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras import models from IPython import display # Set the seed value for experiment reproducibility seed = 42 tf.random.set_seed(seed) np.random.seed(seed) DATASET_PATH = 'data/mini_speech_commands' data_dir = pathlib.Path(DATASET_PATH) if not data_dir.exists(): tf.keras.utils.get_file( 'mini_speech_commands.zip', origin="http://storage.googleapis.com/download.tensorflow.org/data/mini_speech_commands.zip", extract=True, cache_dir='.', cache_subdir='data') commands = np.array(tf.io.gfile.listdir(str(data_dir))) commands = commands[commands != 'README.md'] print('Commands:', commands) filenames = tf.io.gfile.glob(str(data_dir) + '/*/*') filenames = tf.random.shuffle(filenames) num_samples = len(filenames) print('Number of total examples:', num_samples) print('Number of examples per label:', len(tf.io.gfile.listdir(str(data_dir/commands[0])))) print('Example file tensor:', filenames[0]) train_files = filenames[:6400] val_files = filenames[6400: 6400 + 800] test_files = filenames[-800:] print('Training set size', len(train_files)) print('Validation set size', len(val_files)) print('Test set size', len(test_files)) train_files = filenames[:6400] val_files = filenames[6400: 6400 + 800] test_files = filenames[-800:] print('Training set size', len(train_files)) print('Validation set size', len(val_files)) print('Test set size', len(test_files)) test_file = tf.io.read_file(DATASET_PATH+'/down/0a9f9af7_nohash_0.wav') test_audio, _ = tf.audio.decode_wav(contents=test_file) test_audio.shape def decode_audio(audio_binary): # Decode WAV-encoded audio files to `float32` tensors, normalized # to the [-1.0, 1.0] range Return `float32` audio and a sample rate audio, _ = tf.audio.decode_wav(contents=audio_binary) 20 TRÍ TUỆ NHÂN TẠO TRONG ROBOT # Since all the data is single channel (mono), drop the `channels` # axis from the array return tf.squeeze(audio, axis=-1) def get_label(file_path): parts = tf.strings.split( input=file_path, sep=os.path.sep) # Note: You'll use indexing here instead of tuple unpacking to enable this # to work in a TensorFlow graph return parts[-2] def get_waveform_and_label(file_path): label = get_label(file_path) audio_binary = tf.io.read_file(file_path) waveform = decode_audio(audio_binary) return waveform, label AUTOTUNE = tf.data.AUTOTUNE files_ds = tf.data.Dataset.from_tensor_slices(train_files) waveform_ds = files_ds.map( map_func=get_waveform_and_label, num_parallel_calls=AUTOTUNE) rows = cols = n = rows * cols fig, axes = plt.subplots(rows, cols, figsize=(10, 12)) for i, (audio, label) in enumerate(waveform_ds.take(n)): r = i // cols c = i % cols ax = axes[r][c] ax.plot(audio.numpy()) ax.set_yticks(np.arange(-1.2, 1.2, 0.2)) label = label.numpy().decode('utf-8') ax.set_title(label) plt.show() def get_spectrogram(waveform): # Zero-padding for an audio waveform with less than 16,000 samples input_len = 16000 waveform = waveform[:input_len] zero_padding = tf.zeros( [16000] - tf.shape(waveform), dtype=tf.float32) # Cast the waveform tensors' dtype to float32 waveform = tf.cast(waveform, dtype=tf.float32) # Concatenate the waveform with `zero_padding`, which ensures all audio # clips are of the same length equal_length = tf.concat([waveform, zero_padding], 0) # Convert the waveform to a spectrogram via a STFT spectrogram = tf.signal.stft( equal_length, frame_length=255, frame_step=128) # Obtain the magnitude of the STFT spectrogram = tf.abs(spectrogram) # Add a `channels` dimension, so that the spectrogram can be used # as image-like input data with convolution layers (which expect # shape (`batch_size`, `height`, `width`, `channels`) 21 TRÍ TUỆ NHÂN TẠO TRONG ROBOT spectrogram = spectrogram[ , tf.newaxis] return spectrogram for waveform, label in waveform_ds.take(1): label = label.numpy().decode('utf-8') spectrogram = get_spectrogram(waveform) print('Label:', label) print('Waveform shape:', waveform.shape) print('Spectrogram shape:', spectrogram.shape) print('Audio playback') display.display(display.Audio(waveform, rate=16000)) def plot_spectrogram(spectrogram, ax): if len(spectrogram.shape) > 2: assert len(spectrogram.shape) == spectrogram = np.squeeze(spectrogram, axis=-1) # Convert the frequencies to log scale and transpose, so that the time is # represented on the x-axis (columns) # Add an epsilon to avoid taking a log of zero log_spec = np.log(spectrogram.T + np.finfo(float).eps) height = log_spec.shape[0] width = log_spec.shape[1] X = np.linspace(0, np.size(spectrogram), num=width, dtype=int) Y = range(height) ax.pcolormesh(X, Y, log_spec) fig, axes = plt.subplots(2, figsize=(12, 8)) timescale = np.arange(waveform.shape[0]) axes[0].plot(timescale, waveform.numpy()) axes[0].set_title('Waveform') axes[0].set_xlim([0, 16000]) plot_spectrogram(spectrogram.numpy(), axes[1]) axes[1].set_title('Spectrogram') plt.show() def get_spectrogram_and_label_id(audio, label): spectrogram = get_spectrogram(audio) label_id = tf.argmax(label == commands) return spectrogram, label_id spectrogram_ds = waveform_ds.map( map_func=get_spectrogram_and_label_id, num_parallel_calls=AUTOTUNE) rows = cols = n = rows*cols fig, axes = plt.subplots(rows, cols, figsize=(10, 10)) for i, (spectrogram, label_id) in enumerate(spectrogram_ds.take(n)): r = i // cols c = i % cols ax = axes[r][c] plot_spectrogram(spectrogram.numpy(), ax) ax.set_title(commands[label_id.numpy()]) ax.axis('off') 22 TRÍ TUỆ NHÂN TẠO TRONG ROBOT plt.show() def preprocess_dataset(files): files_ds = tf.data.Dataset.from_tensor_slices(files) output_ds = files_ds.map( map_func=get_waveform_and_label, num_parallel_calls=AUTOTUNE) output_ds = output_ds.map( map_func=get_spectrogram_and_label_id, num_parallel_calls=AUTOTUNE) return output_ds train_ds = spectrogram_ds val_ds = preprocess_dataset(val_files) test_ds = preprocess_dataset(test_files) batch_size = 64 train_ds = train_ds.batch(batch_size) val_ds = val_ds.batch(batch_size) train_ds = train_ds.cache().prefetch(AUTOTUNE) val_ds = val_ds.cache().prefetch(AUTOTUNE) for spectrogram, _ in spectrogram_ds.take(1): input_shape = spectrogram.shape print('Input shape:', input_shape) num_labels = len(commands) # Instantiate the `tf.keras.layers.Normalization` layer norm_layer = layers.Normalization() # Fit the state of the layer to the spectrograms # with `Normalization.adapt` norm_layer.adapt(data=spectrogram_ds.map(map_func=lambda spec, label: spec)) model = models.Sequential([ layers.Input(shape=input_shape), # Downsample the input layers.Resizing(32, 32), # Normalize norm_layer, layers.Conv2D(32, 3, activation='relu'), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D(), layers.Dropout(0.25), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dropout(0.5), layers.Dense(num_labels), ]) model.summary() model.compile( optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'], ) EPOCHS = 10 history = model.fit( 23 TRÍ TUỆ NHÂN TẠO TRONG ROBOT train_ds, validation_data=val_ds, epochs=EPOCHS, callbacks=tf.keras.callbacks.EarlyStopping(verbose=1, patience=2), ) metrics = history.history plt.plot(history.epoch, metrics['loss'], metrics['val_loss']) plt.legend(['loss', 'val_loss']) plt.show() test_audio = [] test_labels = [] for audio, label in test_ds: test_audio.append(audio.numpy()) test_labels.append(label.numpy()) test_audio = np.array(test_audio) test_labels = np.array(test_labels) y_pred = np.argmax(model.predict(test_audio), axis=1) y_true = test_labels test_acc = sum(y_pred == y_true) / len(y_true) print(f'Test set accuracy: {test_acc:.0%}') confusion_mtx = tf.math.confusion_matrix(y_true, y_pred) plt.figure(figsize=(10, 8)) sns.heatmap(confusion_mtx, xticklabels=commands, yticklabels=commands, annot=True, fmt='g') plt.xlabel('Prediction') plt.ylabel('Label') plt.show() sample_file = data_dir/'no/01bb6a2a_nohash_0.wav' sample_ds = preprocess_dataset([str(sample_file)]) for spectrogram, label in sample_ds.batch(1): prediction = model(spectrogram) plt.bar(commands, tf.nn.softmax(prediction[0])) plt.title(f'Predictions for "{commands[label[0]]}"') plt.show() 24 TRÍ TUỆ NHÂN TẠO TRONG ROBOT BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Giáo viên hướng dẫn: TS Nguyễn Xuân Thuận, TS Hoàng Hồng Hải Sinh viên thực : Hồng Anh Dũng (20184401), Đặng Đình Hạnh (20184436), Nguyễn Thành Công (20184365) Lớp : 1294543 Nội dung …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… Nhận xét giáo viên hướng dẫn …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… Hà Nội, ngày……….tháng………năm Giáo viên hướng dẫn ký tên 25 ... nhóm lựa chọn đề tài: Nhận dạng giọng nói sử dụng TensorFlow TRÍ TUỆ NHÂN TẠO TRONG ROBOT Tổng quan âm model nhận dạng giọng nói 2.1 Kiến thức âm 2.1.1 Âm nguyên lý hình thành tiếng nói Âm dao động... model: Sử dụng file test_files để test 15 TRÍ TUỆ NHÂN TẠO TRONG ROBOT III Kết Mơ hình mạng CNN nhận dạng giọng nói xây dung : Qua 10 vòng train, model đạt val_accuracy mức 83,6% 16 TRÍ TUỆ NHÂN TẠO... coi âm có dạng hình ảnh Vì vậy, ta sử dụng mạng CNN(chuyên dùng để xây dựng model nhận diện hình ảnh) để xây dựng model 14 TRÍ TUỆ NHÂN TẠO TRONG ROBOT II Xây dựng model nhận dạng giọng nói Các