تجهيز البيانات الصوتية وتكثيفها

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر

ملخص

يعد إعداد البيانات الصوتية وزيادتها أحد أكبر التحديات في التعرف التلقائي على الكلام. يمكن أن يكون تحليل البيانات الصوتية في نطاق الوقت أو التردد ، مما يضيف تعقيدًا إضافيًا مقارنة بمصادر البيانات الأخرى مثل الصور.

كجزء من النظام البيئي TensorFlow، tensorflow-io توفر حزمة عدد غير قليل من مفيدة واجهات برمجة التطبيقات ذات الصلة الصوت الذي يساعد على تخفيف إعداد وزيادة من البيانات الصوتية.

يثبت

قم بتثبيت الحزم المطلوبة ، وأعد تشغيل وقت التشغيل

pip install tensorflow-io

إستعمال

اقرأ ملف صوتي

في TensorFlow IO، والطبقة tfio.audio.AudioIOTensor يسمح لك لقراءة ملف صوتي إلى تحميل كسول- IOTensor :

import tensorflow as tf
import tensorflow_io as tfio

audio = tfio.audio.AudioIOTensor('gs://cloud-samples-tests/speech/brooklyn.flac')

print(audio)
<AudioIOTensor: shape=[28979     1], dtype=<dtype: 'int16'>, rate=16000>

في المثال أعلاه، وملف فلاك brooklyn.flac هو من مقطع صوتي متاحة للجمهور في جوجل السحابية .

وGCS عنوان gs://cloud-samples-tests/speech/brooklyn.flac تستخدم مباشرة لGCS هو نظام الملفات المعتمدة في TensorFlow. بالإضافة إلى Flac الشكل، WAV ، Ogg ، MP3 ، و MP4A معتمدة أيضا من قبل AudioIOTensor مع الكشف التلقائي تنسيق الملف.

AudioIOTensor هو كسول محملة بحيث تشكل فقط، dtype، وتظهر معدل عينة في البداية. شكل AudioIOTensor وممثلة على النحو [samples, channels] ، وهو ما يعني المقطع الصوتي الذي قمت بتحميله هو أحادي القناة مع 28979 العينات في int16 .

لن يتم قراءة محتوى مقطع الصوت حسب الحاجة، إما عن طريق تحويل AudioIOTensor إلى Tensor من خلال to_tensor() ، أو من خلال تشريح. يكون التقطيع مفيدًا بشكل خاص عند الحاجة إلى جزء صغير فقط من مقطع صوتي كبير:

audio_slice = audio[100:]

# remove last dimension
audio_tensor = tf.squeeze(audio_slice, axis=[-1])

print(audio_tensor)
tf.Tensor([16 39 66 ... 56 81 83], shape=(28879,), dtype=int16)

يمكن تشغيل الصوت من خلال:

from IPython.display import Audio

Audio(audio_tensor.numpy(), rate=audio.rate.numpy())

من الأنسب تحويل الموتر إلى أرقام عائمة وإظهار مقطع الصوت في الرسم البياني:

import matplotlib.pyplot as plt


tensor = tf.cast(audio_tensor, tf.float32) / 32768.0

plt.figure()
plt.plot(tensor.numpy())
[<matplotlib.lines.Line2D at 0x7fbdd3eb72d0>]

بي إن جي

قلل الضوضاء

أحيانا فمن المنطقي لخفض الضجيج من الصوت، والتي يمكن أن يتم ذلك من خلال API tfio.audio.trim . عاد من API هو زوج من [start, stop] موقف segement:

position = tfio.audio.trim(tensor, axis=0, epsilon=0.1)
print(position)

start = position[0]
stop = position[1]
print(start, stop)

processed = tensor[start:stop]

plt.figure()
plt.plot(processed.numpy())
tf.Tensor([ 2398 23546], shape=(2,), dtype=int64)
tf.Tensor(2398, shape=(), dtype=int64) tf.Tensor(23546, shape=(), dtype=int64)
[<matplotlib.lines.Line2D at 0x7fbdd3dce9d0>]

بي إن جي

تتلاشى وتتلاشى

تتمثل إحدى تقنيات هندسة الصوت المفيدة في التلاشي ، الذي يزيد الإشارات الصوتية أو ينقصها تدريجيًا. ويمكن أن يتم ذلك من خلال tfio.audio.fade . tfio.audio.fade يدعم أشكال مختلفة من يتلاشى مثل linear ، logarithmic ، أو exponential :

fade = tfio.audio.fade(
    processed, fade_in=1000, fade_out=2000, mode="logarithmic")

plt.figure()
plt.plot(fade.numpy())
[<matplotlib.lines.Line2D at 0x7fbdd00d9b10>]

بي إن جي

مخطط طيفي

غالبًا ما تعمل المعالجة الصوتية المتقدمة على تغييرات التردد بمرور الوقت. في tensorflow-io الموجي يمكن تحويلها إلى الطيفية من خلال tfio.audio.spectrogram :

# Convert to spectrogram
spectrogram = tfio.audio.spectrogram(
    fade, nfft=512, window=512, stride=256)

plt.figure()
plt.imshow(tf.math.log(spectrogram).numpy())
<matplotlib.image.AxesImage at 0x7fbdd005add0>

بي إن جي

من الممكن أيضًا إجراء تحويل إضافي إلى مقاييس مختلفة:

# Convert to mel-spectrogram
mel_spectrogram = tfio.audio.melscale(
    spectrogram, rate=16000, mels=128, fmin=0, fmax=8000)


plt.figure()
plt.imshow(tf.math.log(mel_spectrogram).numpy())

# Convert to db scale mel-spectrogram
dbscale_mel_spectrogram = tfio.audio.dbscale(
    mel_spectrogram, top_db=80)

plt.figure()
plt.imshow(dbscale_mel_spectrogram.numpy())
<matplotlib.image.AxesImage at 0x7fbcfb20bd10>

بي إن جي

بي إن جي

المواصفات

بالإضافة إلى ما سبق ذكره إعداد البيانات وزيادة واجهات برمجة التطبيقات، tensorflow-io يوفر حزمة أيضا تعزيزات الطيفية المتقدمة، وأبرزها التردد والوقت إخفاء مناقشتها في SpecAugment: (بارك وآخرون، 2019) A بسيطة طريقة تكبير بيانات التعرف على الكلام التلقائي .

اخفاء التردد

في اخفاء تردد، تردد قنوات [f0, f0 + f) وملثمين حيث f يتم اختياره من توزيع الزي من 0 إلى قناع تردد المعلمة F ، و f0 يتم اختياره من (0, ν − f) حيث ν هو عدد تردد القنوات.

# Freq masking
freq_mask = tfio.audio.freq_mask(dbscale_mel_spectrogram, param=10)

plt.figure()
plt.imshow(freq_mask.numpy())
<matplotlib.image.AxesImage at 0x7fbcfb155cd0>

بي إن جي

اخفاء الوقت

في الوقت اخفاء، t خطوات وقت متتالية [t0, t0 + t) وملثمين حيث t يتم اختياره من توزيع الزي من 0 إلى قناع وقت المعلمة T ، و t0 يتم اختياره من [0, τ − t) حيث τ هو خطوات الوقت.

# Time masking
time_mask = tfio.audio.time_mask(dbscale_mel_spectrogram, param=10)

plt.figure()
plt.imshow(time_mask.numpy())
<matplotlib.image.AxesImage at 0x7fbcfb0d9bd0>

بي إن جي