TextToSpeech-神經網路如何理解文字

更新於 2024/05/27閱讀時間約 7 分鐘

一.引言

  上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。

二.文字前處理流程

  上篇稍微提到了文字分析,那麼,實際上要做甚麼呢 ?

其實就是我們需要將非中文的表達轉換成中文表達,以及刪除一些對於語音表達無效的字元

例如 :

  • 日期處理 : "2024-05-27" >>> "二零二四年五月二十七日"
  • 縮寫處理 : "NTD100" >>> "新台幣一百元"
  • 符號/空格處理 : "本日推薦 ◎醬油拉麵◎" >>> "本日推薦醬油拉麵"
  • 其他自定義處理

其餘如逗號、句號、問號、驚嘆號等對於句子停頓、語氣等有意義的符號可以保留,我們能夠期待網路能從中學到這些特性。

  但是這樣還不夠,對於神經網路而言,"二零二四年五月二十七日",這樣的輸入是無法處理的,沒轉換成數學表達,就無法參與到神經網路的計算中,那麼如何轉換成數學表達呢?

字典索引

  我們可以建立一個字典庫,根據每個字去定義對應的字典索引。例如:"二零二四年五月二十七日" 可以編碼成 "[10,8,10,12,23,13,31,10,18,15,57]",其中每個數字代表字典中的索引。這樣一來,文字與數字就有了對應關係。

One-hot 編碼

  單純的索引列表仍不足以讓神經網路提取有用的訊息。儘管後續有人提出利用 One-hot 編碼將連續整數轉變成離散型編碼,也就是[0]這個索引若在有10個字的字典庫中,則編碼成[1,0,0,0,0,0,0,0,0,0],只有索引[0]為1,其他則為0的方式編碼,這種編碼方式可以避免順序偏見(即避免某些模型因數值大的索引而給予更大的關注),但無論是字典索引還是 One-hot 編碼,兩者之間的字詞並無關聯性,缺乏語義信息,所以這樣做仍無法解決語義相關性問題,且 One-hot 編碼還有儲存量龐大的問題,通常一個字典庫裏頭的字詞成千上萬,若是使用 One-hot ,則會有大量部分為0,在存儲及計算上都會有浪費問題。

Word Embedding

  為了解決這個問題,有人提出了 Word Embedding 的想法,這也奠定了自然語言處理深度模型的輸入基礎,Word Embedding 使用神經網路訓練詞與詞的關係,並將詞映射到指定維度的向量上,這樣一來,就不用使用與字典同維度的空間去紀錄一個字詞。

Word Embedding 可以捕捉到詞與詞之間的語義關係,這樣即使兩個詞在表面上看起來完全不同,它們的向量表示也能夠反映出它們之間的相關性。這種方法大大提升了神經網路在自然語言處理任務中的效果。

現在如果要快速使用的話,可以使用Word2Vec套件提供的方法訓練你自己的 Word Embedding 模型,以及使用jieba進行詞分割,例如 :

import jieba
from gensim.models import Word2Vec

jieba.load_userdict("Mydict.txt")

# 準備訓練數據
sentences = [
"臺灣鐵路已放棄興建的路線",
"人是一種從動物進化的生物",
"你是英文系的,可以幫我翻譯一下嗎?"
]

# 將句子分詞
tokenized_sentences = [list(jieba.cut(sentence)) for sentence in sentences]
print(tokenized_sentences)

這樣我們切分出的句子便會是

['臺灣', '鐵路', '已', '放棄', '興建', '的', '路線']

['人', '是', '一種', '從', '動物', '進化', '的', '生物']

['你', '是', '英文系', '的', ',', '可以', '幫', '我', '翻譯', '一下', '嗎', '?']

model = Word2Vec(sentences=tokenized_sentences, vector_size=100, 
window=5, min_count=1, sg=0)

# 保存模型
model.save("word2vec.model")

# 加載模型
model = Word2Vec.load("word2vec.model")

# 測試模型
word_vectors = model.wv

# 測試是否符合預期​
print(word_vectors.similarity("人", "鐵路"))
print(word_vectors.similarity("人", "生物"))

# 直接檢視詞向量​
print(word_vectors["人"])

結果人與鐵路的相關性為 -0.027132183;人與生物的相關性為 0.12371957,雖然有拉開,但似乎並沒有很好,這是因為案例只有三句話,需要更多的樣本進行訓練方能獲得較好的結果。

而我們映射完的詞向量可能會長這樣(上方案例為100維不適合展示,這邊以5維為例)

人 : [-0.01270834 -0.14365004 0.20052692 0.0955428 0.18737748]

生物 : [ 0.10361788 0.17437415 -0.02223953 -0.18728271 0.08719231]

這樣一來,我們便充分的利用小維度的向量代表這兩種字詞

實務上,可以使用其他人已經訓練好的模型來進行 Embedding ,若你的詞專業性偏高,也能夠使用此方法訓練出更符合你資料集的 Embedding 模型。

三.結語

  今天介紹了該如何處理文字訓練輸入,但對於 Embedding ,我打算使用單獨的一篇進行詳解其是如何做到將字詞映射到更小維度的向量中,所以這篇只先帶一下套件用起來的功能便利性,以及 Embedding 出現的理由,畢竟這個是自然語言相關的應用中,必不可少的課題,我想好好面對它。


avatar-img
8會員
21內容數
AI、電腦視覺、圖像處理、AWS等等持續學習時的學習筆記,也包含一些心得,主要是幫助自己學習,若能同時幫助到不小心來到這裡的人,那也是好事一件 : )
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
貓貓學習筆記 的其他內容
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
不知道大家會不會有這種感覺,在使用現今的一些預訓練模型時,雖然好用,但是實際在場域部屬時總感覺殺雞焉用牛刀,實際使用下去後續又沒有時間讓你去優化它,只好將錯就錯反正能用的想法持續使用,現在有個不錯的方法讓你在一開始就可以用相對低廉的成本去優化這個模型,讓後續使用不再懊悔。
  經過三篇的進展,我們目前實作的網路已經能做到同時訓練多種風格,且後續可以直接進行轉換,不用重新訓練,但是這種方法畢竟還是受到了預訓練的風格制約,無法跳脫出來,那麼有什麼辦法能夠讓他對於沒學過的風格也有一定的反應能力呢?
上篇我們已經把風格融入在一個網路之中,實現了訓練一次就可以轉換不同的圖片成我們訓練的風格,但是這樣還不夠,因為這樣每個風格都得訓練一個網路來轉換,太浪費了,那麼,我們有沒有辦法在同一個網路中訓練多個風格呢?
在第一篇我講到一開始的圖像風格轉換,每產生一張圖片都得重新訓練,這對於使用上難免綁手綁腳,所以理所當然的下一步就是要解決這個問題,看看能不能只要訓練一次,就可以重複使用。
  最近遇到一些人想做音訊的合成,我回答他或許可以從圖像風格轉換中找到些靈感,我才突然想起我對於這部分的認知只止於知道他能做什麼及結果大概如何,對於內部訓練邏輯及結構並沒有認真的去了解,現在剛好趁此機會好好的學習一下。
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
不知道大家會不會有這種感覺,在使用現今的一些預訓練模型時,雖然好用,但是實際在場域部屬時總感覺殺雞焉用牛刀,實際使用下去後續又沒有時間讓你去優化它,只好將錯就錯反正能用的想法持續使用,現在有個不錯的方法讓你在一開始就可以用相對低廉的成本去優化這個模型,讓後續使用不再懊悔。
  經過三篇的進展,我們目前實作的網路已經能做到同時訓練多種風格,且後續可以直接進行轉換,不用重新訓練,但是這種方法畢竟還是受到了預訓練的風格制約,無法跳脫出來,那麼有什麼辦法能夠讓他對於沒學過的風格也有一定的反應能力呢?
上篇我們已經把風格融入在一個網路之中,實現了訓練一次就可以轉換不同的圖片成我們訓練的風格,但是這樣還不夠,因為這樣每個風格都得訓練一個網路來轉換,太浪費了,那麼,我們有沒有辦法在同一個網路中訓練多個風格呢?
在第一篇我講到一開始的圖像風格轉換,每產生一張圖片都得重新訓練,這對於使用上難免綁手綁腳,所以理所當然的下一步就是要解決這個問題,看看能不能只要訓練一次,就可以重複使用。
  最近遇到一些人想做音訊的合成,我回答他或許可以從圖像風格轉換中找到些靈感,我才突然想起我對於這部分的認知只止於知道他能做什麼及結果大概如何,對於內部訓練邏輯及結構並沒有認真的去了解,現在剛好趁此機會好好的學習一下。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
本文介紹了在深度學習中使用Batch Normalization來解決error surface複雜性的問題。通過特徵歸一化來加速收斂速度和訓練順利程度。同時,也提到了在測試階段使用moving average計算平均值和標準差的方法。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
之前有提到有時我們在微分之後會得到gradient = 0的值,就以為我們已經找到最小值,但其實它只是local minima。 那這一節主要想跟大家分享我們要怎麼區分是不是Local Minima。
Thumbnail
隨著生成式AI不斷的推陳出新,對於能有效壓縮這些豐富且大量內容的技術,變得至關重要,影響著傳輸速度與執行速度,本文的壓縮架構,能夠有效地做成專用IC,在同樣的畫質水準下,甚至能夠達成JPEG 1/3的壓縮後容量,此方法可應用在各種3D NeRF生成作品上面,各種VR與3D生成技術都必然會用到。
Thumbnail
你聽過神經網路連結時,會發出聲音嗎? 頭腦是人類的的重要器官,主宰日常的思考、感情及行動。 有趣的是,腦的重量,只有一個人體重的2%;但是腦消耗的能量,佔我們一日所用能量的20%。 這是因為腦神經元在幫忙傳導與處理信號時,靠著電壓及觸突釋放的化學成份,所以很耗能。 因此,在運用能量這事,大腦
Thumbnail
數位神經網路,是依據筆記的脈絡與情境編織聯結而成,其內容包括行動、分享、機制與專案等形式的筆記,密集交錯的聯結網絡,猶如牽一髮而動全身的骨牌,而視覺化的量化衡量數據(即目標狀態或設定值的Metadata)就是觸動神經的那張骨牌或是初始設定的條件改變,引發猶如骨牌效應、蝴蝶效應般的連鎖反應。
Thumbnail
本次直播為【方格子X全球政經解碼】2023年3月會員直播 本集最重要的兩個焦點: (1) 上半場-蘇茨克維的翻譯系統是此一概念的延伸。他利用史密斯胡德與格雷夫在瑞士研發的長短記憶模型,將一大堆英文字句連同其法文翻譯輸入神經網路。透過分析原文與譯本,神經網路可以為英文的字句建立一個向量...
Thumbnail
首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
Thumbnail
自從深度學習於2012年開始受到關注後,全世界有非常多的專家學者致力於改良它,也因此造就了許多的創新以及突破。今天我們就來談談深度學習近幾年來一個非常熱門的新主題”生成對抗網路”GAN(*),這是2014年由當時為蒙特婁大學博士生的Ian Goodfellow所提出之類神經網路。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
本文介紹了在深度學習中使用Batch Normalization來解決error surface複雜性的問題。通過特徵歸一化來加速收斂速度和訓練順利程度。同時,也提到了在測試階段使用moving average計算平均值和標準差的方法。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
之前有提到有時我們在微分之後會得到gradient = 0的值,就以為我們已經找到最小值,但其實它只是local minima。 那這一節主要想跟大家分享我們要怎麼區分是不是Local Minima。
Thumbnail
隨著生成式AI不斷的推陳出新,對於能有效壓縮這些豐富且大量內容的技術,變得至關重要,影響著傳輸速度與執行速度,本文的壓縮架構,能夠有效地做成專用IC,在同樣的畫質水準下,甚至能夠達成JPEG 1/3的壓縮後容量,此方法可應用在各種3D NeRF生成作品上面,各種VR與3D生成技術都必然會用到。
Thumbnail
你聽過神經網路連結時,會發出聲音嗎? 頭腦是人類的的重要器官,主宰日常的思考、感情及行動。 有趣的是,腦的重量,只有一個人體重的2%;但是腦消耗的能量,佔我們一日所用能量的20%。 這是因為腦神經元在幫忙傳導與處理信號時,靠著電壓及觸突釋放的化學成份,所以很耗能。 因此,在運用能量這事,大腦
Thumbnail
數位神經網路,是依據筆記的脈絡與情境編織聯結而成,其內容包括行動、分享、機制與專案等形式的筆記,密集交錯的聯結網絡,猶如牽一髮而動全身的骨牌,而視覺化的量化衡量數據(即目標狀態或設定值的Metadata)就是觸動神經的那張骨牌或是初始設定的條件改變,引發猶如骨牌效應、蝴蝶效應般的連鎖反應。
Thumbnail
本次直播為【方格子X全球政經解碼】2023年3月會員直播 本集最重要的兩個焦點: (1) 上半場-蘇茨克維的翻譯系統是此一概念的延伸。他利用史密斯胡德與格雷夫在瑞士研發的長短記憶模型,將一大堆英文字句連同其法文翻譯輸入神經網路。透過分析原文與譯本,神經網路可以為英文的字句建立一個向量...
Thumbnail
首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
Thumbnail
自從深度學習於2012年開始受到關注後,全世界有非常多的專家學者致力於改良它,也因此造就了許多的創新以及突破。今天我們就來談談深度學習近幾年來一個非常熱門的新主題”生成對抗網路”GAN(*),這是2014年由當時為蒙特婁大學博士生的Ian Goodfellow所提出之類神經網路。