我按照这个例子使用BERT进行情感分类。
text_input = tf.keras.layers.Input(shape=(), dtype=tf.string)
preprocessor = hub.KerasLayer(
"https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3") # 128 by default
encoder_inputs = preprocessor(text_input)
encoder = hub.KerasLayer(
"https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/4",
trainable=True)
outputs = encoder(encoder_inputs)
pooled_output = outputs["pooled_output"] # [batch_size, 768].
sequence_output = outputs["sequence_output"] # [batch_size, seq_length, 768].
embedding_model = tf.keras.Model(text_input, pooled_output)sentences = tf.constant(["(your text here)"])print(embedding_model(sentences))
从encoder_inputs的输出形状来看,默认的序列长度似乎是128。然而,我不知道如何改变这一点?理想情况下,我想使用更大的序列长度。
有一个修改序列长度的例子从预处理器页面,但我不确定如何将其纳入我上面的功能模型定义?我将非常感谢任何帮助。
只是从这里的文档(还没有测试过),但您可以这样做:
preprocessor = hub.load(
"https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3")
text_inputs = [tf.keras.layers.Input(shape=(), dtype=tf.string)]
看起来不像你在上面标记了你的数据-见下面
tokenize = hub.KerasLayer(preprocessor.tokenize)
tokenized_inputs = [tokenize(segment) for segment in text_inputs]
下一步选择序列长度:
seq_length = 128 # Your choice here.
这里是你传入seq_length:
的地方bert_pack_inputs = hub.KerasLayer(
preprocessor.bert_pack_inputs,
arguments=dict(seq_length=seq_length)) # Optional argument.
现在通过运行bert_pack_inputs
(取代上面的preprocessor(text_input)
)对输入进行编码
encoder_inputs = bert_pack_inputs(tokenized_inputs)
然后剩下的代码:
encoder = hub.KerasLayer(
"https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/4",
trainable=True)
outputs = encoder(encoder_inputs)
pooled_output = outputs["pooled_output"] # [batch_size, 768].
sequence_output = outputs["sequence_output"] # [batch_size, seq_length, 768].
embedding_model = tf.keras.Model(text_input, pooled_output)
sentences = tf.constant(["(your text here)"])
print(embedding_model(sentences))