You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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种语言),处理步骤如下:

  1. 先获取langdetect支持的所有语言代码列表(共56种):
from langdetect import DetectorFactory

# 获取langdetect支持的所有语言代码并固定顺序
supported_langs = list(DetectorFactory.langs.keys())
supported_langs.sort()
  1. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:10:34