我们采用了寻找维度空间里距离最为相近的中英文语料的PPG作为用来一一替换的映射对。
为每一帧的英文语料PPG寻找对应最合适的中文语料PPG,并用对应的中文的PPG(Spec)来替换原英文的PPG(Spec)
--------
采用的距离度量是欧式距离,
具体流程是:
首先,分别读取训练数据集中的中英文语料的PPG,并将其拆分成相互独立的帧级别的PPG,将二者混合在同一个列表里面;然后,为每一帧的英文PPG寻找欧式距离最近的中文PPG,由于训练数据集过大和时间复杂度过高,所以采用了KMeans的聚类方法,先对所有中英文帧的PPG进行聚类,得到1000个相互独立的类,然后再在每一个类内进行距离寻优,为每一帧的英文PPG寻找到类内最近的中文PPG,并将其认为是整个维度空间里距离最近的中文PPG;最后,根据为每一帧英文PPG找到的最近的中文PPG进行标记,最终便得到了每一帧的中英文语料PPG的一一映射对。另外就是FindA找的时候能不能借鉴拼接TTS的拼接误差的引入
https://github.com/ruclion/ppg_projector_chenxuey20
服务器路径:/datapool/home/hujk17/PPG_Projector
启动环境临时就用tensorflow_p36吧。。
https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KDTree.html
有一个额外限制:k-d树( k-维树的缩写)是在k维欧几里德空间组织点的数据结构
也就是用KL散度没办法用k-d tree优化
同时补充上k means的时间复杂度
可以提前算好ln,节省时间
500句中找到的向量存在大量连续的相同向量:
是不是应该输出每一帧PPG的最近距离差,以及一句话统计意义上的mean,std,max,min,etc
目的:找到合成英文语料第一句Hello中的第一帧对应到中文语料中哪一帧发音最像
英文语料第一句Hello中的第一帧,这一帧的ppg记为ppg_H,spec记为spec_H枚举英文语料中所有句子的每一帧,记为ppg_i和spec_i,计算欧氏距离dist_i=dist(spec_H, spec_i)dist_i代表发音是否像H的度量,dist越小,则帧的发音信息越像H(当均为一个人spec时,显然成立)训练 (ppg_H, ppg_i) -> dist_i 的NN,作为映射函数F(F的作用可以重新排列ppg,按照dist_i越小的ppg_i,合成的声音越像H)将上述拓展到中文语料的每一帧ppg_j,假设由于ppg去音色,跨语言,且只描述发音信息,因此也满足dist_j越小的ppg_j,合成的声音越像H,既认为映射函数F可以跨域那么有Trained_NN,然后枚举中文语料中所有句子的每一帧,找到最小的dist_j对应的ppg_j对应的spec_j,跳出其中NN可以退化成不含spec信息的ppg之间的欧氏距离,KL散度其中NN的输入也可以简化为欧氏距离,KL散度spec_j即为spec_H跨语言跨说话人得到的结果
讨论的图:
可以在英文句子中,当前帧所在句子top3来观察,是否和周围的PPG非常接近
传统意义上是中国人说中文语料,为了观察实验,也可以是:
英国人说英文语料LJSpeech英国人说英文语料LibriSpeech,VC验证过和ASR-PPG联合效果很好中国人说英文语料DataBaker因为英文跨到中文的实验结果不太好,那么可以考虑方言的跨语言,区分度更小一些,任务难度小,可能很容易成功