如何将langdetect语言概率向量正确融入Keras Sequential模型
歌唱语言识别模型复现问题解答
一、文本分支MLP模型修正
论文明确要求是3层MLP,每一层由「128单元全连接层 + 批量归一化层 + ReLU激活」组成。你当前的代码只实现了1层,不符合要求,修正后的代码如下:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Input, Dense, BatchNormalization, Activation text_model = Sequential() text_model.add(Input((56,), name='input')) # 第一层 text_model.add(Dense(128)) text_model.add(BatchNormalization()) text_model.add(Activation('relu')) # 第二层 text_model.add(Dense(128)) text_model.add(BatchNormalization()) text_model.add(Activation('relu')) # 第三层 text_model.add(Dense(128)) text_model.add(BatchNormalization()) text_model.add(Activation('relu'))
注意:论文里的“each layer”指MLP的每一层都要包含这三个组件,必须严格对应三层结构。
二、langdetect结果转56维概率向量
langdetect返回的是仅包含高概率语言的结果,而模型需要固定56维的向量(对应langdetect支持的全部56种语言),处理步骤如下:
- 先获取langdetect支持的所有语言代码列表(共56种):
from langdetect import DetectorFactory # 获取langdetect支持的所有语言代码并固定顺序 supported_langs = list(DetectorFactory.langs.keys()) supported_langs.sort()
- 将detect_langs的结果转换为56维向量:
from langdetect import detect_langs def langdetect_to_vector(metadata): detected = detect_langs(metadata) # 初始化全0的56维向量 vec = [0.0] * len(supported_langs) for lang in detected: lang_code = lang.lang if lang_code in supported_langs: idx = supported_langs.index(lang_code) vec[idx] = lang.prob return vec # 示例使用 metadata = "待处理的元数据文本" text_input = langdetect_to_vector(metadata) # 转换为模型可接受的张量(单样本输入需扩展维度) import numpy as np text_input_tensor = np.array(text_input).reshape(1, 56)
生成的向量即可直接输入到text_model中使用。
内容的提问来源于stack exchange,提问作者Anton Shadrin
相关产品推荐
相关产品推荐

