Resim kredisi: Pawe Durczok / Unsplash
Makinenin metni okuma şeklini görselleştirmek için, bu makale metin modelinin nerede "okuduğunu" belirlemek ve metinde bahsedilen kahvenin hafif kavrulmuş mu yoksa koyu kavrulmuş mu olduğunu belirlemek için bir ısı haritası oluşturacaktır.
Yıllar geçtikçe, bilgisayarla görme görevlerinde sürekli olarak Evrişimli Sinir Ağlarını (CNN) geliştirdik ve bu da aşağıdaki alanlarda büyük gelişmeler sağladı:
· Modelin sağlamlığını artırdı
· Model sapmasını görselleştirin ve azaltın
· Rakip görüntülerin derin öğrenme modellerinin çıktılarını nasıl değiştirdiğini daha iyi anlayın
Şimdi daha iyi model anlayışı bu kadar bariz faydalar getirdiğine göre, modellerin yorumlanabilirliğine neden doğal dil işleme (NLP) alanında aynı önem verilmiyor?
Yukarıdaki resim, sinir ağının dambıl hakkında düşündüğü şeydir. Bu örnekte, modelin insan kolunu dambıldan ayırmadığını, dolayısıyla modelin halterin genel şekline tam olarak nüfuz etmediğini unutmayın. (Google Yapay Zeka Blogu tarafından sağlanan resim)
Bu makale, vizyona dayalı olarak CNN'nin odak konumunu anlamak için kullanılan teknolojiyi metin tanımaya uygulayacak ve ardından sınıflandırma için giriş metninin belirli bir alanında CNN'nin odak konumunu gösteren bir ısı haritası oluşturacaktır.
GPT-2, BERT, ELMo ve diğer modellerin oldukça geliştirildiği bu çağda, CNN biraz yetişemedi. Bununla birlikte, CNN gerçek uygulamalarda hala iyi bir performansa sahiptir ve bazı gelişmiş modeller gibi büyük boyut, uzun çıkarım süresi ve büyük bellek ayak izi gibi dezavantajlara sahip değildir.
Kahvenin nasıl kavrulacağını tahmin edin:
Bu örneği size göstermek için, önce genel bir sınıflandırıcı oluşturun ve kahvenin açık kavrulmuş mu yoksa koyu kavrulmuş mu olduğunu anlamak için onun açıklamasını kullanın.
Veri seti birçok kahve değerlendirmesini içerir. Örnek kahvenin hafif kavrulmuş mu yoksa koyu kavrulmuş mu olduğunu anlamak için aşağıdaki tablodaki kahvenin kör tadım kaydını kullanmaya çalışacağız.
Aşağıda, Keras'ta bir CNN oluşturmak ve verileri eğitmek için kod verilmiştir:
X = df.blind_assesment.values y = df.y.values tokenizer = Tokenizer (num_words = 4000) tokenizer.fit_on_texts (X) X = tokenizer.texts_to_sequences (X) vocab_size = len (tokenizer.word_index) + 1 # Ayrılmış 0 indeksi nedeniyle 1 ekleniyor maxlen = 200 embedding_dim = 50 X = pad_sequences (X, padding = 'post', maxlen = maxlen) Sequence_input = layer.Input (şekil = (maxlen,), dtype = 'int32') embedded_sequences = layerlar. l_cov1 = layer.Conv1D (317, 3, aktivasyon = 'relu') (embedded_sequences) l_pool1 = layer.MaxPooling1D (2) (l_cov1) l_cov2 = layer.Conv1D (317, 1, aktivasyon = 'relu') (l_pool1) l_cov3 = layer.Conv1D (317, 2, aktivasyon = 'relu') (l_cov2) l_pool3 = layer.GlobalMaxPooling1D () (l_cov3) # global maksimum havuzlama l_bnorm = layer.BatchNormalization () (l_pool3) l_dense = layer.Dense (128, activation = 'relu') (l_pool3) preds = layer.Dense (1, activation = 'sigmoid', name = 'preds') (l_dense) model = Model (sequ_input, outputs = preds) model.compile (optimize edici = 'adam', kayıp = 'binary_crossentropy', metrics =) model.summary () model.fit (X, y, epochs = 3, validation_split = 0.1, batch_size = 10)Keras'taki model bundan biraz farklı görünüyorsa, bunun nedeni Keras'ın işlevsel bir uygulama programlama arayüzü kullanmasıdır (https://keras.io/getting-started/functional-api-guide/). Bu kod, modeli eğitir ve uyarlar ve doğrulama verileriyle ilgili eğitimin doğruluğu yaklaşık% 75-% 80'dir. CNN metin sınıflandırıcılarının oluşturulmasıyla ilgili birçok makale var ve bunları burada detaylandırmayacağım. Bu makale, bu sınıflandırıcı tarafından yapılan tahminlerin nasıl yorumlanacağına odaklanacaktır.
Aktivasyon haritası oluşturun:
Keras'ı kullanmak hızlı ve kolaydır, yalnızca birkaç satır kod gerektirir.
1. Model tahminini ve CNN'nin son çıktı katmanını alın.
Model yapısının dökümünü almak için Keras'ta model.summary () işlevini kullanabilirsiniz. Diyagramda, conv1d_45, modeldeki son CNN katmanının adıdır.
Aşağıdaki kod yalnızca tahmin edilen kategoriyi değil, aynı zamanda CNN'nin son katmanını da alabilir:
class_idx = np.argmax (y_pred) # sadece iki sınıf olduğu için bu durumda gerekli değildir class_output = model.output last_conv_layer = model.get_layer ("conv1d_45")2. Özellik haritasına göre çıktı kategorisini hesaplayın ve tüm gradyanları bir araya toplayın.
Bu karmaşık görünse de, aslında Keras arka uç işlevlerini kullanmak için yalnızca birkaç satır kod gerektirir:
grads = K.gradients (class_output, last_conv_layer.output) pooled_grads = K.mean (mezun) yineleme = K.function (,) pooled_grads_value, conv_layer_output_value = iterate ()3. Özellik haritalarının ortalamasını alın ve 0 ile 1 arasına normalleştirin (düzenleyin).
heatmap = np.mean (conv_layer_output_value, axis = -1) ısı haritası = np.maximum (ısı haritası, 0) heatmap / = np.max (ısı haritası) # tahmindeki değerleri normalleştirŞimdi, CNN son katmanının çıktı şeklinin boyutundan elde edilen tahmin edilen kategoriye dayalı bir aktivasyon ısı haritası elde edilir. Daha sonra, hangi kelimelerin sinir ağını tetiklediğini anlamak için boyutu yalnızca ilk giriş bilgilerinin uzunluğuna (kelime sayısı) göre yeniden ayarlamanız (uzatmanız) gerekir.
Son tahmine bazı temel hiper metin biçimlendirme dili eklemek, modelin nasıl tahminler yaptığını anlama yeteneğini artırırken çok etkili bir kullanıcı arabirimi oluşturabilir.
norm_len = maxlen / last_conv_layer.output_shape # metnin konv katmanı uzunluğuna oranını bulun html = "" y_pred ise > 0.5: pred = 'ışık' Başka: pred = 'karanlık' html + = " < açıklık > < h3 > Açıklamaya göre, model bunun bir {} kahve kavurması. ".Format (önceden) olduğuna inanmaktadır. html + = " < küçük > < br > Güven:% {: .0f} < br > < br > < /küçük > < / h3 > < / span > ".format (abs (((y_pred * 100) -50) * 2)) j için i numaralandırmada (tokenizer.sequences_to_texts (Xtst) .split ()): html + = " < span style = 'background-color: rgba ({}, 0,150, {})' > {} < / span > ".format (ısı haritası * 255, ısı haritası-0.3, i) HTML (html)Bu köprü metni biçimlendirme dili kod parçacığı, Google Colab'da aşağıdaki çıktıyı verir:
Buradan modelin metni "anladığını" ve metinde anlatılan kahvenin biraz "tatlılık" ve "taze ekşilik" ile "yabani çilek" tadı olduğunu fark ettiğini görebiliriz, dolayısıyla model Olumlu (doğru) olarak onu hafif kavrulmuş kahve olarak değerlendirin.
Özet olarak, bu makale modelin tahminler (sınıflandırmalar) yaptığı alanların "okuyarak" kolayca nasıl vurgulanacağını açıklamaktadır. Bunun aşağıdakiler için önemli çıkarımları vardır:
1. Modelin temel hata ayıklama ve mantık testlerini gerçekleştirin.
2. Modelin eğitim örneklerini neden yanlış sınıflandırdığının daha iyi anlaşılması.
3. Olası model sapmalarını tespit edin.
Kod portalı:
https://colab.research.google.com/drive/1taIt9A9tsENJTYh3eK0ZuUyRIdrHeNty
Yorum Beğen Takip Et
AI öğrenme ve geliştirmenin kuru mallarını paylaşalım
Tam platform yapay zeka dikey öz medya "temel okuma" yı takip etmeye hoş geldiniz