如何在keras中使用令牌和预计算的BERT嵌入的多个输入?

2024-10-04 07:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个keras模型,该模型具有多个输入,用于序列标记任务。特别是,我正在喂不同长度的句子,并为句子中的每个标记预计算伯特嵌入。

在预处理步骤中计算伯特嵌入(由1024个浮点数组表示的句子中的每个令牌),然后将每个句子作为格式字典保存:

{'tokens':['The', 'dog', 'barked'],
'BERT_embedding':[[float1,float2,...,float1024],
                  [float1,float2,...,float1024],
                  [float1,float2,...,float1024]]}

{'tokens':['A', 'cat', 'purred', 'softly'],
 'BERT_embedding':[[float1,float2,...,float1024],
                   [float1,float2,...,float1024],   
                   [float1,float2,...,float1024],
                   [float1,float2,...,float1024]]}

对于keras模型,我将令牌作为输入发送,并将输入连接到Word2Vec嵌入层,该层将每个令牌转换为其300维Word2Vec表示。所以在我打印的模型摘要中,我有:

^{pr2}$

我需要的建议/帮助是为我预计算的伯特嵌入定义一个输入层,这样我就可以将两个输入合并到一个连接层中,这将是一个类似的:

^{pr3}$

我对keras函数API的一些复杂问题仍然相当陌生,特别是在定义具有多个输入的模型时,我还是很新的,我希望得到一些建议。

我的主要困惑来自于每个输入标记,其中包含一个与它关联的BERT_uEmbedderingList对象。

如何构造我的BERT嵌入输入层,以便对于每个输入令牌,我传递与其关联的1024个浮点,而不是列表对象本身(因为keras显然不将list type对象本身作为输入)?

我希望得到正确配置模型输入形状的答案,而不是建议将伯特嵌入作为模型本身的一个层来计算(即,改变输入数据的性质)。我计算并存储伯特嵌入作为预处理步骤,因为我希望我的输入数据可以被其他人使用,即使它们有硬件限制,可能会阻止他们快速计算伯特嵌入本身。


Tags: 对象标记模型步骤word2vecembedding建议句子