點擊可下載完整電子書《阿里雲機器學習PAI-DSW入門指南》
語音降噪,在開源領域通過科學計算肯定有現有的解決方案。從業務需求上講,最有價值的一件事情是,怎麼讓大家能迅速地做POC,架起解決方案?
本文將實戰講解賈揚清在回答內部同學提出的業務問題時,給自己設的一個挑戰:半小時內架構一個有體感的demo,達到語音降噪的效果。
半小時實驗達到的語音降噪的效果
首先給大家看一下最終的效果。我錄了一個關著吸塵器的時候的語音:
In [2]:
import IPython
IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/normal.wav')
Out[2]:
https://developer.aliyun.com/topic/download?id=826
以及開著吸塵器的時候講話的語音:
In [3]:
IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_with_noise.wav')
Out[3]:
https://developer.aliyun.com/topic/download?id=827
以及,通過降噪以後,帶著吸塵器的那一段音頻的降噪效果:
In [4]:
IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_reduced_noise.wav')
Out[4]:
https://developer.aliyun.com/topic/download?id=828
效果怎麼樣?
在實際業務當中,我們的思路往往不是上來就開始鑽研算法,而是按照這樣的一個思路:
- 怎麼將業務問題翻譯成技術問題?
- 有沒有現有解決方案來測試一下效果?
- 效果好的話,怎麼落地?
- 效果不好的話,怎麼做算法迭代?
今天想展示的就是通過DSW快速解決前兩個問題,即如何迅速安裝開源的算法包、做數據的可視化、到最後算法效果的測試這整個流程。用現有的平臺迅速地驗證這些業務問題的效果,是不是一件很有意思的事情呢?
通過DSW快速驗證
首先,通過搜索,我們發現有一個github的項目,noisereduce,和我們需要解決的場景很相似。基本上,可以通過兩段語音,一段是噪音(做建模),一段是帶噪音的語音,來實現降噪的效果。
對於標準的Python算法包,在DSW裡面拉起很容易。因為DSW預裝了底層的一些科學計算框架,比如說TensorFlow,因此只需要安裝新增的這些包的需求:
In [5]:
!pip install noisereduce > /dev/null
我拿iPhone和家裡的吸塵器錄了幾段視頻,上傳到DSW上面,然後就是大家常見的碼代碼了:
In [6]:
from matplotlib import pyplot
import io
import noisereduce as nr
import numpy as np
import soundfile as sf
from urllib.request import urlopen
/Users/huanghong/opt/anaconda3/lib/python3.7/site-packages/tqdm/autonotebook.py:17: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console) " (e.g. in jupyter console)", TqdmExperimentalWarning)
In [7]:
# 先把音頻文件導入進來:
normal_data, normal_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/normal.wav').read()))
noise_data, noise_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/noise.wav').read()))
mixed_data, mixed_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_with_noise.wav').read()))
# iPhone的音頻是立體聲的,我們只處理一個聲道,所以我們先選單聲道。
normal_data = np.ascontiguousarray(normal_data[:,0])
noise_data = np.ascontiguousarray(noise_data[:,0])
mixed_data = np.ascontiguousarray(mixed_data[:,0])
rate = normal_rate
我們可以用Notebook的功能來播放這些音頻。在開頭大家已經聽過樣例了,這裡我們聽一下噪聲:
In [8]:
IPython.display.Audio(data=noise_data,rate=rate)
Out[8]:
https://developer.aliyun.com/topic/download?id=829
對於噪聲文件,我們來截取中間一段作為噪聲的建模。先看看,哪段比較合適。
In [9]:
pyplot.plot(noise_data)
Out[9]:
[]
看來,截取40000到200000的這一段最合適,我們剪一下。
In [10]:
noise_data = noise_data[40000:200000]
pyplot.plot(noise_data)
Out[10]:
[]
然後,我們就可以直接調用一下noisereduce裡面的功能看看結果怎麼樣。一行代碼:
In [11]:
reduced_version = nr.reduce_noise(audio_clip=mixed_data, noise_clip=noise_data)
我們來聽一下,降噪之後的語音效果怎麼樣。
In [12]:
IPython.display.Audio(data=reduced_version,rate=rate)
Out[12]:
https://developer.aliyun.com/topic/download?id=830
再聽一下降噪之前的版本。
In [13]:
IPython.display.Audio(data=mixed_data,rate=rate)
Out[13]:
https://developer.aliyun.com/topic/download?id=831
我們可以把降噪之後的版本存下來:
In [14]:
sf.write('voice_reduced_noise.wav', reduced_version, rate)
算法是AI的核心,但是要實現業務,功夫在算法之外。
大家可以看到,在上面的樣例當中,其實核心算法很短:首先,有大量的開原算法可以讓我們快速驗證現有的技術在不同場景當中的價值;其次,很多應用並不一定在第一時間就需要特別高大上的算法。對於關注業務的工程師來說,如何快速做POC,驗證可行性,然後從淺到深來把算法落地,做算法創新,實現業務落地,這是我們今天關注的重點。
今天,一切業務都會數據化,一切數據都會業務化。相應的,一切應用就會數據化和智能化。我們對AI的看法可以用英語來做一下類比:幾十年前,英語是一種服務,我們僱傭專業的翻譯來幫我們做業務;但是今天,英語是一種工具,我們絕大多數人用各種工具來學習英語,使用英語。
這就對平臺提出了更高的要求。PAI一直向“最懂你的AI平臺”不斷努力。DSW(Data Science Workshop)這個產品,目標是給大家一個雲上託管的,易用、開放的機器學習和深度學習開發平臺,讓大家很容易地能夠拉起一個典型的開發環境,迅速投入到算法和應用的開發當中。