Networks Business Online Việt Nam & International VH2

Bài 15: Nhận diện giọng nói phần 1 – Lập trình AI bằng Python

Đăng ngày 07 November, 2022 bởi admin

Đăng bởi : Admin | Lượt xem : 7047 | Chuyên mục : AI

Trong bài này, tất cả chúng ta sẽ khám phá về nhận dạng giọng nói bằng AI với Python .

Lời nói là phương tiện giao tiếp cơ bản nhất của con người khi trưởng thành. Mục tiêu cơ bản của xử lý giọng nói là cung cấp sự tương tác giữa con người và máy móc.

Hệ thống giải quyết và xử lý giọng nói đa phần có ba tác vụ :

  • Đầu tiên, nhận dạng giọng nói cho phép máy bắt các từ, cụm từ và câu ta nói
  • Thứ hai, xử lý ngôn ngữ tự nhiên để cho phép máy hiểu những gì chúng ta nói và
  • Thứ ba, tổng hợp giọng nói để cho phép máy nói.

Bài này tập trung chuyên sâu vào nhận dạng giọng nói, quy trình hiểu những từ mà con người nói. Hãy nhớ rằng những tín hiệu giọng nói được ghi lại với sự trợ giúp của micrô và sau đó nó phải được mạng lưới hệ thống hiểu .

1. Xây dựng hệ thống nhận dạng giọng nói :

Nhận dạng giọng nói hoặc Nhận dạng giọng nói tự động hóa ( ASR ) là TT của sự quan tâm so với những dự án Bất Động Sản AI như robot. Nếu không có ASR, không hề tưởng tượng một robot nhận thức tương tác với con người. Tuy nhiên, việc thiết kế xây dựng một công cụ nhận dạng giọng nói không phải là điều trọn vẹn thuận tiện .Khó khăn trong việc tăng trưởng mạng lưới hệ thống nhận dạng giọng nóiPhát triển một mạng lưới hệ thống nhận dạng giọng nói chất lượng cao thực sự là một bài toán khó. Khó khăn của công nghệ tiên tiến nhận dạng giọng nói hoàn toàn có thể được diễn đạt chung theo 1 số ít góc nhìn như được luận bàn dưới đây :

  • Kích thước của từ vựng: ảnh hưởng đến sự dễ dàng của việc phát triển một ASR.(kích thước từ vựng càng lớn thì việc nhận dạng càng khó.)
  • Đặc điểm của channel – Chất lượng chanel cũng là một yếu tố quan trọng. Ví dụ, lời nói của con người có băng thông cao với dải tần đầy đủ, trong khi lời nói qua điện thoại bao gồm băng thông thấp với dải tần hạn chế. Lưu ý rằng nó khó hơn trong phần sau.
  • Chế độ nói – Việc phát triển ASR dễ dàng cũng phụ thuộc vào chế độ nói, đó là liệu bài phát biểu có ở chế độ từ riêng biệt, hoặc chế độ từ được kết nối hay ở chế độ nói liên tục. Lưu ý rằng một bài phát biểu liên tục khó nhận ra hơn.
  • Phong cách nói – Bài phát biểu được đọc có thể theo phong cách trang trọng, hoặc tự phát và đối thoại với phong cách bình thường. Cái sau khó nhận ra hơn.
  • Sự phụ thuộc người nói – Lời nói có thể phụ thuộc vào người nói, sự thích ứng của người nói hoặc độc lập với người nói. Rất khó nhất để xây dựng một diễn giả độc lập
  • Loại tiếng ồn – Tiếng ồn là một yếu tố khác cần xem xét khi phát triển ASR. Tỷ lệ tín hiệu trên tiếng ồn có thể nằm trong nhiều phạm vi khác nhau, tùy thuộc vào môi trường âm thanh quan sát ít hơn so với nhiều tiếng ồn xung quanh 
    – Nếu tỷ lệ tín hiệu trên nhiễu lớn hơn 30dB, nó được coi là dải cao
    – Nếu tỷ lệ tín hiệu trên nhiễu nằm trong khoảng từ 30dB đến 10db, nó được coi là SNR trung bình
    – Nếu tỷ lệ tín hiệu trên nhiễu nhỏ hơn 10 dB, nó được coi là dải tần thấp
  • Đặc điểm của micrô – Chất lượng của micrô có thể tốt, trung bình hoặc dưới trung bình. Ngoài ra, khoảng cách giữa miệng và micro phone có thể khác nhau. Các yếu tố này cũng cần được xem xét đối với hệ thống công nhận.

Bất chấp những khó khăn vất vả này, những nhà nghiên cứu đã thao tác rất nhiều trên những góc nhìn khác nhau của lời nói như hiểu tín hiệu giọng nói, người nói và xác lập những trọng âm .Bạn sẽ phải làm theo những bước dưới đây để tạo trình nhận dạng giọng nói

2. Hình dung tín hiệu âm thanh – Đọc từ tệp và làm việc:

Đây là bước tiên phong trong việc thiết kế xây dựng mạng lưới hệ thống nhận dạng giọng nói vì nó cung ứng hiểu biết về cách một tín hiệu âm thanh được cấu trúc. Một số bước thông dụng hoàn toàn có thể làm theo để thao tác với tín hiệu âm thanh như sau :

Recording :

Đầu tiên, khi bạn phải đọc tín hiệu âm thanh từ một tệp, sau đó ghi lại bằng micrô .

Sampling :

Khi ghi âm bằng micrô, những tín hiệu được tàng trữ dưới dạng số hóa. Nhưng để hoạt động giải trí, máy cần chúng ở dạng số rời rạc. Do đó, tất cả chúng ta nên thực thi lấy mẫu ở một tần số nhất định và quy đổi tín hiệu thành dạng số rời rạc. Việc chọn tần số cao để lấy mẫu ý niệm rằng khi con người nghe tín hiệu, họ cảm thấy nó như một tín hiệu âm thanh liên tục .

Ví dụ :

Ví dụ sau đây cho thấy một cách tiếp cận từng bước để nghiên cứu và phân tích tín hiệu âm thanh, sử dụng Python, được tàng trữ trong một tệp. Tần số của tín hiệu âm thanh này là 44.100 HZ .

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

Bây giờ, hãy đọc tệp âm thanh được lưu trữ. Nó sẽ trả về hai giá trị: tần số lấy mẫu và tín hiệu âm thanh. Cung cấp đường dẫn của tệp âm thanh nơi nó được lưu trữ, như được hiển thị ở đây 

frequency_sampling, audio_signal = wavfile.read("/Users/admin/audio_file.wav")

Hiển thị những thông số kỹ thuật như tần số lấy mẫu của tín hiệu âm thanh, loại tài liệu của tín hiệu và thời lượng của nó, sử dụng những lệnh được hiển thị :

print('\nSignal shape:', audio_signal.shape)
print('Signal Datatype:', audio_signal.dtype)
print('Signal duration:', round(audio_signal.shape[0] / 
float(frequency_sampling), 2), 'seconds')

Bước này tương quan đến việc chuẩn hóa tín hiệu như hình dưới đây :

audio_signal = audio_signal / np.power(2, 15)

Trong bước này, tôi sẽ trích xuất 100 giá trị tiên phong từ tín hiệu này để tưởng tượng. Sử dụng những lệnh sau cho mục tiêu này :

audio_signal = audio_signal [:100]
time_axis = 1000 * np.arange(0, len(signal), 1) / float(frequency_sampling)

Hình dung tín hiệu bằng cách sử dụng những lệnh dưới đây :

plt.plot(time_axis, signal, color='blue')
plt.xlabel('Time (milliseconds)')
plt.ylabel('Amplitude')
plt.title('Input audio signal')
plt.show()

Bạn sẽ hoàn toàn có thể thấy đồ thị đầu ra và tài liệu được trích xuất cho tín hiệu âm thanh ở trên như biểu lộ trong hình ảnh tại đây :

Signal shape: (132300,)
Signal Datatype: int16
Signal duration: 3.0 seconds

3. Đặc trưng cho tín hiệu âm thanh: Chuyển đổi sang dãy tần số

Đặc trưng cho một tín hiệu âm thanh tương quan đến việc quy đổi tín hiệu miền thời hạn thành miền tần số và hiểu những thành phần tần số của nó. Đây là bước quan trọng vì nó cho biết nhiều thông tin về tín hiệu. Bạn hoàn toàn có thể sử dụng một công cụ toán học như Fourier Transform để thực thi phép biến hóa này .Ví dụ sau đây cho thấy, từng bước, cách diễn đạt đặc tính của tín hiệu, sử dụng Python, được tàng trữ trong một tệp. Lưu ý rằng ở đây mình đang sử dụng công cụ toán học Fourier Transform để quy đổi nó thành miền tần số .

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

Bây giờ, hãy đọc tệp âm thanh được tàng trữ. Nó sẽ trả về hai giá trị : tần số lấy mẫu và tín hiệu âm thanh. Cung cấp đường dẫn của tệp âm thanh nơi nó được tàng trữ như được hiển thị trong lệnh ở đây –

frequency_sampling, audio_signal = wavfile.read("/Users/admin/sample.wav")

Trong bước này, mình sẽ hiển thị những thông số kỹ thuật như tần số lấy mẫu của tín hiệu âm thanh, loại tài liệu của tín hiệu và thời lượng của nó, bằng cách sử dụng những lệnh được đưa ra bên dưới :

print('\nSignal shape:', audio_signal.shape)
print('Signal Datatype:', audio_signal.dtype)
print('Signal duration:', round(audio_signal.shape[0] / 
float(frequency_sampling), 2), 'seconds')

tất cả chúng ta cần chuẩn hóa tín hiệu như sau :

audio_signal = audio_signal / np.power(2, 15)

Bước này tương quan đến việc trích xuất độ dài và nửa độ dài của tín hiệu :

length_signal = len(audio_signal)
half_length = np.ceil((length_signal + 1) / 2.0).astype(np.int)

Bây giờ, tất cả chúng ta cần vận dụng những công cụ toán học để đổi khác thành miền tần số. Ở đây mình đang sử dụng Biến đổi Fourier .

signal_frequency = np.fft.fft(audio_signal)

triển khai chuẩn hóa tín hiệu miền tần số và bình phương nó

signal_frequency = abs(signal_frequency[0:half_length]) / length_signal
signal_frequency **= 2

Tiếp theo, trích xuất độ dài và nửa độ dài của tín hiệu được biến đổi tần số :

len_fts = len(signal_frequency)

Lưu ý rằng tín hiệu biến hóa Fourier phải được kiểm soát và điều chỉnh cho trường hợp chẵn cũng như lẻ .

if length_signal % 2:
   signal_frequency[1:len_fts] *= 2
else:
   signal_frequency[1:len_fts-1] *= 2

Bây giờ, trích xuất hiệu suất bằng decibel ( dB ) –

signal_power = 10 * np.log10(signal_frequency)

Điều chỉnh tần số tính bằng kHz cho trục X –

x_axis = np.arange(0, len_half, 1) * (frequency_sampling / length_signal) / 1000.0
plt.figure()
plt.plot(x_axis, signal_power, color='black')
plt.xlabel('Frequency (kHz)')
plt.ylabel('Signal power (dB)')
plt.show()

Source: https://vh2.com.vn
Category : Tin Học