我试图理解新实现的keras
转换器类:https://keras.io/examples/nlp/text_classification_with_transformer/
我看到文本首先被嵌入,然后使用自我关注。但是,如果我想使用另一种嵌入而不是TokenAndPositionEmbedding
-例如,在我的例子中,我有预嵌入的句子,并且喜欢对它们使用自我关注
我不明白的是self.pos_emb
做了什么。类{{CD2}}正在返回^ {< CD5> }和^ {CD6> },其中{{CD5}}是^ {CD8}}和^ {CD6}},是要考虑的单词数吗?那么它基本上返回了两件事?我不明白这一点
class TokenAndPositionEmbedding(layers.Layer):
def __init__(self, maxlen, vocab_size, emded_dim):
super(TokenAndPositionEmbedding, self).__init__()
self.token_emb = layers.Embedding(input_dim=vocab_size, output_dim=emded_dim)
self.pos_emb = layers.Embedding(input_dim=maxlen, output_dim=emded_dim)
def call(self, x):
maxlen = tf.shape(x)[-1]
positions = tf.range(start=0, limit=maxlen, delta=1)
positions = self.pos_emb(positions)
x = self.token_emb(x)
return x + positions
或者我只是把我嵌入的句子输入到MultiHeadSelfAttention
,然后在后面放一个密集的层用于分类
正如你所知道的,变压器是一种只基于大量
Dense
层的结构,具有剩余的概念;然而,这使得时间序列数据失去其时间依赖性。因此,对于变压器,您需要<强>定位位置< /强>,您可以将其视为该结构的附加信息,从而不会错过时间依赖性。如果您想通过使用keras更好地理解它,我将推荐Tensorflow编写的官方教程:https://www.tensorflow.org/tutorials/text/transformer 详细说明了你想知道的事情相关问题 更多 >
编程相关推荐