Keras PlatoBlockchain Veri Zekası ile Transformer Token ve Pozisyon Yerleştirme. Dikey Arama. Ai.

Keras ile Transformer Token ve Konum Gömme

Giriş

Transformatörlerin nasıl çalıştığını açıklayan ve bunların önemli bir unsuru olan belirteç ve konum gömme üzerine bir sezgi oluşturmak için çok sayıda kılavuz vardır.

Konumsal olarak gömme belirteçleri, dönüştürücülerin belirteçler (genellikle kelimeler) arasındaki katı olmayan ilişkileri temsil etmesine izin verdi; bu, dil modellemede bağlam odaklı konuşmamızı modellemede çok daha iyi. İşlem nispeten basit olsa da, oldukça geneldir ve uygulamalar hızla standart hale gelir.

Bu kısa kılavuzda, resmi Keras eklentisi olan KerasNLP'yi gerçekleştirmek için nasıl kullanabileceğimize bir göz atacağız. PositionEmbedding ve TokenAndPositionEmbedding.

KerasNLP

KerasNLP, NLP için yatay bir eklemedir. Yazarken, sürüm 0.3'te hala çok genç ve belgeler hala oldukça kısa, ancak paket zaten kullanılabilir olmaktan daha fazlası.

Gibi Keras katmanlarına erişim sağlar. TokenAndPositionEmbedding, TransformerEncoder ve TransformerDecoder, bu da özel transformatörler oluşturmayı her zamankinden daha kolay hale getiriyor.

KerasNLP'yi projemizde kullanmak için aşağıdaki adresten kurabilirsiniz. pip:

$ pip install keras_nlp

Projeye aktarıldıktan sonra, herhangi birini kullanabilirsiniz. keras_nlp standart bir Keras katmanı olarak katman.

dizgeciklere

Bilgisayarlar sayılarla çalışır. Düşüncelerimizi kelimelerle ifade ederiz. Bilgisayarın bunları aşmasına izin vermek için, kelimeleri bir şekilde sayılarla eşleştirmemiz gerekecek.

Bunu yapmanın yaygın bir yolu, sözcükleri, her tamsayının bir sözcüğü temsil ettiği sayılarla basitçe eşlemektir. Bir sözcük topluluğu bir sözcük dağarcığı oluşturur ve sözcük dağarcığındaki her sözcük bir dizin alır. Böylece, bir kelime dizisini, olarak bilinen bir dizin dizisine dönüştürebilirsiniz. token kazanabilirsiniz.:

def tokenize(sequence):
    
    return tokenized_sequence

sequence = ['I', 'am', 'Wall-E']
sequence = tokenize(sequence)
print(sequence) 

Bu belirteç dizisi daha sonra belirteçleri gizli uzayda tanımlayan yoğun bir vektöre gömülebilir:

[[4], [26], [472]] -> [[0.5, 0.25], [0.73, 0.2], [0.1, -0.75]]

Bu genellikle ile yapılır Embedding Keras'taki katman. Transformatörler yalnızca bir standart kullanarak kodlamaz Embedding katman. onlar gerçekleştirir Embedding ve PositionEmbeddingve gizli uzaydaki konumlarına göre normal yerleştirmeleri değiştirerek bunları bir araya ekleyin.

KerasNLP ile – performans TokenAndPositionEmbedding düzenli belirteç yerleştirmeyi birleştirir (Embedding) konumsal gömme ile (PositionEmbedding).

Pozisyon Gömme

Bir göz atalım PositionEmbedding ilk. Tensörleri ve düzensiz tensörleri kabul eder ve son boyutun özellikleri temsil ettiğini, sondan ikinci boyutun ise diziyi temsil ettiğini varsayar.

# Seq
(5, 10)
     # Features

katman kabul eder sequence_length giriş ve çıkış dizisinin uzunluğunu belirten argüman. Devam edelim ve konumsal olarak rastgele bir düzgün tensör yerleştirelim:

seq_length = 5
input_data = tf.random.uniform(shape=[5, 10])

input_tensor = keras.Input(shape=[None, 5, 10])
output = keras_nlp.layers.PositionEmbedding(sequence_length=seq_length)(input_tensor)
model = keras.Model(inputs=input_tensor, outputs=output)
    
model(input_data)

Bunun sonucu:

<tf.Tensor: shape=(5, 10), dtype=float32, numpy=
array([[ 0.23758471, -0.16798696, -0.15070847,  0.208067  , -0.5123104 ,
        -0.36670157,  0.27487397,  0.14939266,  0.23843127, -0.23328197],
       [-0.51353353, -0.4293166 , -0.30189738, -0.140344  , -0.15444171,
        -0.27691704,  0.14078277, -0.22552207, -0.5952263 , -0.5982155 ],
       [-0.265581  , -0.12168896,  0.46075982,  0.61768025, -0.36352775,
        -0.14212841, -0.26831496, -0.34448475,  0.4418767 ,  0.05758983],
       [-0.46500492, -0.19256318, -0.23447984,  0.17891657, -0.01812166,
        -0.58293337, -0.36404118,  0.54269964,  0.3727749 ,  0.33238482],
       [-0.2965023 , -0.3390794 ,  0.4949159 ,  0.32005525,  0.02882379,
        -0.15913549,  0.27996767,  0.4387421 , -0.09119213,  0.1294356 ]],
      dtype=float32)>

TokenAndPosition Gömme

Belirteç ve konum yerleştirme, kullanmaya bağlı Embedding giriş sırası, PositionEmbedding gömülü belirteçler üzerinde ve ardından bu iki sonucu bir araya getirerek, göreceli anlamlı ilişkilerini kodlamak için belirteç yerleştirmelerini uzayda etkin bir şekilde yer değiştirir.

Bu teknik olarak şu şekilde yapılabilir:

seq_length = 10
vocab_size = 25
embed_dim = 10

input_data = tf.random.uniform(shape=[5, 10])

input_tensor = keras.Input(shape=[None, 5, 10])
embedding = keras.layers.Embedding(vocab_size, embed_dim)(input_tensor)
position = keras_nlp.layers.PositionEmbedding(seq_length)(embedding)
output = keras.layers.add([embedding, position])
model = keras.Model(inputs=input_tensor, outputs=output)
    
model(input_data).shape 

Girdiler gömülür ve ardından konumsal olarak gömülür, ardından bir araya getirilerek konumsal olarak gömülü yeni bir şekil üretilir. Alternatif olarak, TokenAndPositionEmbedding kaputun altında bunu yapan katman:

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

... 
def call(self, inputs):
        embedded_tokens = self.token_embedding(inputs)
        embedded_positions = self.position_embedding(embedded_tokens)
        outputs = embedded_tokens + embedded_positions
        return outputs

Bu, gerçekleştirmeyi çok daha temiz hale getirir TokenAndPositionEmbedding:

seq_length = 10
vocab_size = 25
embed_dim = 10

input_data = tf.random.uniform(shape=[5, 10])

input_tensor = keras.Input(shape=[None, 5, 10])
output = keras_nlp.layers.TokenAndPositionEmbedding(vocabulary_size=vocab_size, 
                                                     sequence_length=seq_length, 
                                                     embedding_dim=embed_dim)(input_tensor)
model = keras.Model(inputs=input_tensor, outputs=output)
    
model(input_data).shape 

Katmana aktardığımız veriler artık konumsal olarak 10 boyutlu bir gizli uzaya gömülüdür:

model(input_data)
<tf.Tensor: shape=(5, 10, 10), dtype=float32, numpy=
array([[[-0.01695484,  0.7656435 , -0.84340465,  0.50211895,
         -0.3162892 ,  0.16375223, -0.3774369 , -0.10028353,
         -0.00136751, -0.14690581],
        [-0.05646318,  0.00225556, -0.7745967 ,  0.5233861 ,
         -0.22601983,  0.07024342,  0.0905793 , -0.46133494,
         -0.30130145,  0.451248  ],
         ...

Daha İleriye Gitmek – Elde Tutulan Uçtan Uca Proje

Meraklı doğanız daha ileri gitmek istemenizi sağlıyor mu? bizim kontrol etmenizi öneririz Rehberli Proje: “CNN'lerle Görüntü Altyazısı ve Keras'la Transformatörler”.

Bu rehberli projede - bir resmi girdi olarak kabul eden ve çıktı olarak metinsel bir resim yazısı üreten bir resim yazısı modelinin nasıl oluşturulacağını öğreneceksiniz.

Siz öğreneceksiniz:

  • Önişlem metni
  • Metin girişini kolayca vektörleştirin
  • ile çalışmak tf.data API ve yüksek performanslı Veri Kümeleri oluşturun
  • TensorFlow/Keras ve KerasNLP ile sıfırdan Transformatörler oluşturun – son teknoloji NLP modelleri oluşturmak için Keras'ın resmi yatay eklentisi
  • Bir ağın çıktısının diğeri için kodlandığı hibrit mimariler oluşturun

Resim altyazısını nasıl çerçeveleriz? Çoğu kişi bunu üretken derin öğrenmenin bir örneği olarak görüyor, çünkü biz bir ağa açıklamalar üretmeyi öğretiyoruz. Ancak buna sinirsel makine çevirisi örneği olarak bakmayı seviyorum - bir görüntünün görsel özelliklerini kelimelere çeviriyoruz. Çeviri yoluyla, sadece yeni bir anlam üretmek yerine, bu görüntünün yeni bir temsilini üretiyoruz. Bunu çeviri olarak ve yalnızca uzantı oluşturma yoluyla görüntülemek, görevi farklı bir açıdan ele alır ve onu biraz daha sezgisel hale getirir.

Sorunu bir çeviri olarak çerçevelemek, hangi mimariyi kullanmak isteyeceğimizi bulmayı kolaylaştırır. Yalnızca Kodlayıcı Transformatörler metni anlamada (duygu analizi, sınıflandırma vb.) mükemmeldir çünkü Kodlayıcılar anlamlı temsilleri kodlar. Yalnızca kod çözücü modeller, kod çözücüler aynı anlama sahip başka bir diziye anlamlı temsiller çıkarabildikleri için (GPT-3 gibi) üretim için mükemmeldir. Çeviri tipik olarak bir kodlayıcı-kod çözücü mimarisi tarafından yapılır, kodlayıcıların bir cümlenin (veya bizim durumumuzda görüntünün) anlamlı bir temsilini kodladığı ve kod çözücülerin bu diziyi bizim için daha yorumlanabilir başka bir anlamlı temsile (örneğin bir cümle) dönüştürmeyi öğrendiği yer.

Sonuç

Transformatörler 2017'den beri büyük bir dalga yarattı ve birçok harika rehber nasıl çalıştıkları hakkında fikir veriyor, ancak özel uygulamaların yükü nedeniyle çoğu kişi için hala anlaşılması zordu. KerasNLP, önceden paketlenmiş çözümler yerine esnek, güçlü NLP sistemleri oluşturmanıza izin veren yapı taşları sağlayarak bu sorunu ele alır.

Bu kılavuzda, Keras ve KerasNLP ile belirteç ve konum yerleştirmeye bir göz attık.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı