TensorFlow.js: Sıra dışı durumları ele almak için yorum spam'i algılama modelini yeniden eğitme

1. Başlamadan önce

Bu codelab, TensorFlow.js kullanarak yorum spam'i algılama için bu serideki önceki codelab'in nihai sonucunu temel alacak şekilde tasarlanmıştır.

Son codelab'de kurgusal bir video blog için tamamen işlevsel bir web sayfası oluşturdunuz. Tarayıcıda TensorFlow.js tarafından desteklenen önceden eğitilmiş bir yorum spam'i algılama modeliyle yorumları depolama için sunucuya gönderilmeden önce veya diğer bağlı istemcilere göndermeden önce spam filtresi ekleyebilirsiniz.

Bu codelab'in nihai sonucu aşağıda gösterilmiştir:

ee0f13398ea4e91e.gif

Her ne kadar çok iyi çalışsa da, tespit edilemediği keşfedilecek uç örnekler vardır. Modeli, başa çıkamadığı durumları dikkate alacak şekilde yeniden eğitebilirsiniz.

Bu codelab'de doğal dil işleme (bir bilgisayarla insan dilini anlama sanatı) kullanmaya odaklanılmıştır ve oluşturduğunuz mevcut bir web uygulamasını nasıl değiştireceğinizi gösterir (kod laboratuvarlarını sırayla almanız önemle tavsiye edilir). Yorum spam'i olan bu gerçek sorunun üstesinden gelmek için birçok web geliştiricisinin, giderek artan popüler web uygulamalarından biri üzerinde çalıştıklarından emin olabilirsiniz.

Bu codelab'de, makine öğrenimi modelinizi bir adım daha ileri taşıyarak, spam trendleriyle ilgili mevcut trendlere veya popüler tartışma konularına göre zaman içinde gelişebilecek değişiklikler hakkında bilgi verecek şekilde makine öğrenimi modelinizi yeniden eğitebilirsiniz. Bu sayede, modeldeki değişiklikleri takip edebilir ve ilgili değişiklikleri takip edebilirsiniz.

Ön koşullar

  • Bu serideki ilk codelab'i tamamladınız.
  • HTML, CSS ve JavaScript gibi web teknolojileriyle ilgili temel bilgiler.

Geliştireceğiniz uygulama

Önceden oluşturulmuş web sitesini, gerçek zamanlı bir yorum bölümü ile hayali bir video blogu için yeniden kullanır ve TensorFlow.js kullanarak spam algılama modelinin özel eğitimli bir sürümünü yüklemek üzere yeni sürüme geçirirsiniz. Böylece daha önce başarısız olabileceği uç durumlarda daha iyi performans gösterir. Elbette web geliştiricileri ve mühendisler olarak, bu varsayımsal kullanıcı deneyimini, günlük rollerinizde üzerinde çalıştığınız herhangi bir web sitesinde yeniden kullanılmak üzere değiştirebilir ve çözümü herhangi bir müşteri kullanım alanına (örneğin, bir blog, forum veya Drupal gibi bir İYS türü) uyacak şekilde uyarlayabilirsiniz.

Bilgisayar korsanlığı yapalım...

Neler öğreneceksiniz?

Aşağıdaki işlemleri gerçekleştirirsiniz:

  • Önceden eğitilmiş modelin başarısız olduğu uç durumları belirleme
  • Model Maker kullanılarak oluşturulan Spam Sınıflandırma Modeli'ni yeniden eğitin.
  • Tarayıcılarda kullanmak için bu Python tabanlı modeli TensorFlow.js biçimine aktarın.
  • Barındırılan modeli ve sözlüğünü yeni eğitilen modelle güncelleyin ve sonuçları kontrol edin

Bu laboratuvarda HTML5, CSS ve JavaScript bilgisine sahip olduğunuz varsayılmaktadır. Ayrıca, Model Maker kullanılarak oluşturulan modeli yeniden eğitmek için bir "co lab&quot" not defteri aracılığıyla bazı Python kodları çalıştırırsınız, ancak bunun için Python ile ilgili bilgi sahibi olmanız gerekmez.

2. Kodlayıcıyı kurma

Yine, web uygulamasını barındırmak ve değiştirmek için Glitch.com'u kullanacaksınız. Ön koşul codelab'ini henüz tamamlamadıysanız başlangıç noktanız olarak burada nihai sonucu klonlayabilirsiniz. Kodun işleyiş şekliyle ilgili sorularınız varsa, devam etmeden önce bu çalışan web uygulamasının nasıl yapılacağını açıklayan önceki codelab'i tamamlamanız önemle tavsiye edilir.

Glitch'i, çatallamak ve düzenleyebileceğiniz yeni bir dosya kümesi oluşturmak için bu remiks düğmesini tıklamanız yeterlidir.

3. Önceki çözümde uç durumları keşfedin

Tamamlanan klonladığınız web sitesini açıp bazı yorumlar yazmayı denerseniz, web sitesinin genellikle amaçlandığı gibi çalıştığını, spam gibi görünen yorumları engellediğini ve meşru yanıtlar vererek izin verdiğini fark edersiniz.

Bununla birlikte, üretken davranıp modeli çiğnemeye çalışırsanız büyük olasılıkla bir noktada başarıya ulaşacaksınız. Biraz deneme yanılma yaparak, aşağıda gösterilenlere benzer örnekleri manuel olarak oluşturabilirsiniz. Bunları mevcut web uygulamasına yapıştırmayı deneyin, konsolu kontrol edin ve yorum spam ise geri gelme olasılığını inceleyin:

Sorunsuz bir şekilde yayınlanan meşru yorumlar (gerçek negatifler):

  1. "Bu videoyu çok seviyorum, muhteşem iş çıkardım." Olası Spam: %47,91854
  2. "Bu demoları çok beğendim. Daha fazla ayrıntı var mı? Olası Spam: %47,15898
  3. &"Daha fazla bilgi edinmek için hangi web sitesini ziyaret edebilirim?" Olası Spam: %15,32495

Bu çok yüksektir, yukarıdakilerin tümüne ilişkin olasılık çok düşüktür ve herhangi bir işlem yapılmadan önceki% 75 olan minimum olasılığın varsayılan SPAM_THRESHOLD oranında başarılı bir şekilde mümkündür (önceki codelab'den script.js koduyla tanımlanmıştır).

Şimdi, spam değil olarak işaretlenen daha garip bazı yorumlar yazmaya çalışalım...

Spam olarak işaretlenen meşru yorumlar (yanlış pozitif):

  1. "Birisi giydiği maske için web sitesini bağlayabilir mi?" Olası Spam: %98,46466
  2. &;"Bu şarkıyı Spotify'da satın alabilir miyim? Birisi lütfen bana haber versin." Olası Spam: %94,40953
  3. &; Olası Spam: %83.20084

Olamaz! Bu yasal yorumların, izin verilmesi gerektiğinde spam olarak işaretlendiği anlaşılıyor. Bu sorunu nasıl düzeltebilirsiniz?

Basit bir seçenek, %98,5'in üzerinde bir güven elde etmek için SPAM_THRESHOLD değerini artırmaktır. Bu durumda, söz konusu yanlış sınıflandırılmış yorumlar yayınlanır. Bunu göz önünde bulundurarak aşağıdaki olası diğer sonuçlarla devam edelim...

Spam olarak işaretlenen spam yorumlar (gerçek pozitifler):

  1. "Bu çok güzel ama web sitemdeki indirme bağlantılarında daha iyisini görebilirsiniz! Olası Spam: %99,77873
  2. "Size uyuşturucu getirebilen bazı kişiler var.Ayrıntılar için pr0file'ımı görüyorum" Olası Spam: %98,46955
  3. "Daha da iyi videolar indirmek için profilime bak! http://example.com"Olası Spam: %96.26383

Tamam, bu da orijinal% 75 eşiğimizle beklendiği gibi çalışıyor. Ancak önceki adımda SPAM_THRESHOLD değerini% 98,5'in üzerinde olacak şekilde değiştirdiğinizde bu durumda 2 örneğe izin verilir. Bu durumda eşik çok yüksek olabilir. %96 daha iyi olabilir mi? Bunu yaparsanız önceki bölümde yer alan yorumlardan biri (yanlış pozitif), %98,46466 olarak derecelendirildiğinde meşru olduğu için spam olarak işaretlenir.

Bu durumda en iyisi, gerçek spam yorumlarının tümünü yakalamak ve yukarıdaki hatalar için yeniden eğitim vermektir. Eşiğin% 96 olarak ayarlanması durumunda tüm pozitif pozitifler yakalanır ve yukarıdaki yanlış pozitiflerden 2 tane kaldırılır. Tek bir numarayı değiştirmek çok kötü değil.

Devam edelim...

Yayınlanmasına izin verilen spam yorumlar (yanlış negatifler):

  1. "Daha da iyi videolar indirmek için profilime bak! Olası Spam: %7,54926
  2. &"Spor salonu eğitimlerimizde indirimden yararlanın pr0file!" Olası Spam: %17,49849
  3. &Gogt GOOG hisse senedi az önce yükseltildi. Çok geç olmadan geç kalmayın. Olası Spam: %20,42894

Bu yorumlarda, SPAM_THRESHOLD değerini daha fazla değiştirerek yapmanız gereken bir şey yoktur. Spam eşiğinin% 96'dan% 9'a düşürülmesi, gerçek yorumların spam olarak işaretlenmesine neden olur. Bunlardan biri, meşru olmasına rağmen% 58'lik bir derecelendirmedir. Bu tür yorumlarla başa çıkmanın tek yolu, modeli eğitim verilerine dahil edilen bu gibi örneklerle yeniden eğitmektir. Böylece, eğitimin spam olup olmadığına dair bakış açısını düzenlemeyi öğrenir.

Şu anda kalan tek seçenek modeli yeniden eğitmektir. Ancak, performansı iyileştirmek için spam olarak çağırmaya karar verirken eşiği nasıl hassaslaştırabileceğinizi de gördünüz. Gerçek kişi olarak% 75'lik bir kısmı oldukça güvenilir görünüyor.Ancak bu modelde, örnek girişlerle daha etkili olmak için% 81, 5'e yaklaşmanız gerekiyor.

Farklı modellerde işe yarayan tek bir sihirli değer yoktur ve bu eşik değerinin, iyi sonuç veren gerçek dünya verileriyle denemeler yapıldıktan sonra her model için ayrı ayrı ayarlanması gerekir.

Yanlış bir pozitif (veya negatif) değerin ciddi sonuçlar doğurabileceği (ör. tıbbi sektör) bazı durumlarda eşiğinizi çok yüksek olacak şekilde ayarlayabilir ve eşiği karşılamayanlar için daha fazla manuel inceleme isteğinde bulunabilirsiniz. Bu, geliştirici olarak sizin kararınızdır ve biraz deneme gerektirir.

4. Spam yorumları algılama modelini yeniden eğitme

Önceki bölümde, modelin başarısız olduğu birtakım uç durumları tespit etmiştiniz. Tek seçenek, bu durumları hesaba katmak için modeli yeniden eğitmekti. Bir üretim sisteminde kullanıcılar zamanla manuel olarak spam olarak işaretlenen yorumları işaretlediklerinde veya işaretlenen yorumları inceleyen moderatörler bunların gerçekten spam olmadığını fark ettiğinde ve bu yorumları yeniden eğitilecek şekilde işaretlediklerinde zaman içinde bu sorunlarla karşılaşabilirsiniz. Bu uç durumlar için çok sayıda yeni veri topladığınızı varsayarak (en iyi sonuçlar için bu yeni cümlelerin bazı varyasyonlarını bulundurmanız gerekir) şimdi, bu uç durumları göz önünde bulundurarak modeli nasıl yeniden eğiteceğinizi göstereceğiz.

Önceden hazırlanmış model özeti

Kullandığınız önceden oluşturulmuş model, "ortalama kelime yerleştirme" modelinin kullanılması için Model Oluşturucu tarafından üçüncü taraflarca oluşturulan bir modeldir.

Model, Model Oluşturucu ile oluşturulduğundan, modeli yeniden eğitmek için kısa süreliğine Python'a geçmeniz ve ardından oluşturulan modeli tarayıcıda kullanabilmek için TensorFlow.js biçimine aktarmanız gerekecektir. Neyse ki Model Oluşturucu, modellerinin kullanımını son derece kolaylaştırıyor. Bu nedenle takip edilmesi çok kolay olacak ve süreç boyunca size rehberlik edeceğiz. Yani daha önce Python'u hiç kullanmadıysanız endişelenmeyin.

Colab'lar

Bu codelab'de, tüm Python Python yardımcı programlarının yüklü olduğu bir Linux sunucusu kurmak istediğiniz için çok endişe duymadığınızdan, "Colab" not defteri kullanarak web tarayıcısı üzerinden kod yürütebilirsiniz. Bu not defterleri, bazı öğelerin önceden yüklenmiş olduğu bir sunucu olan ve daha sonra web tarayıcısında rastgele bir kod çalıştırıp sonuçları görebileceğiniz bir "arka uç" ağına bağlanabilir. Bu, hızlı prototip oluşturma veya buna benzer eğiticilerde kullanım için çok yararlıdır.

colab.research.google.com adresine gidin. Burada, bir karşılama ekranı gösterilir:

b2df89c1f7b38cc9.png

Pop-up pencerenin sağ alt kısmındaki Yeni Not Defteri düğmesini tıklayın. Böyle bir boş colab görürsünüz:

94a875f67d6e34f6.png

Güzel! Sonraki adım, ön uç colab'ini bazı arka uç sunucusuna bağlamaktır. Böylece yazacağınız Python kodunu yürütebilirsiniz. Bunun için sağ üstte Bağlan'ı tıklayıp Barındırılan çalışma zamanına bağlan'ı seçin.

f4fcd56ae53527bd.png

Bağlandıktan sonra, RAM ve Disk simgelerinin yerine şu şekilde görünür:

d979e93ba595d1de.png

Tebrikler! Artık Model Maker modelini yeniden eğitmek için Python'da kodlama yapmaya başlayabilirsiniz. Aşağıdaki adımları izlemeniz yeterlidir.

1. Adım

Şu anda boş olan ilk hücrede aşağıdaki kodu kopyalayın. TensorFlow Lite Model Maker'ı sizin için Python' adlı paket yöneticisini kullanarak yükler (kod kodu laboratuvarının çoğu okuyucusu, JS ekosisteminden daha iyi tanıdık olabilecek npm gibi):

!pip install -q tflite-model-maker

Ancak hücrenin içine yapıştırıldığında kod çalıştırılmaz. Ardından, imlecinizi yukarıdaki kodu yapıştırdığınız gri hücrenin üzerine getirdiğinizde hücrenin sol tarafında, aşağıda vurgulandığı gibi küçük bir "oynat" simgesi görünür:

be966130d68b5aac.png Hücreye yazdığınız kodu çalıştırmak için oynat düğmesini tıklayın.

Artık model üreticisinin yüklendiğini göreceksiniz:

376bc0fbde89a60d.png

Bu hücrenin yürütme işlemi aşağıda gösterildiği gibi tamamlandıktan sonra aşağıdaki adıma geçin.

2. Adım

Ardından, gösterildiği gibi yeni bir kod hücresi ekleyin. Böylece, ilk hücreden sonra biraz daha fazla kod yapıştırıp bunu ayrı olarak yürütebilirsiniz:

7ec405d0d82b2143.png

Yürütülen bir sonraki hücrede, not defterinin geri kalanındaki kodun kullanması gereken bir dizi içe aktarma işlemi olur. Oluşturulan yeni hücreye aşağıdakileri kopyalayıp yapıştırın:

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Python'a aşina olmasanız bile oldukça standart şeyler. Yalnızca bazı yardımcı programları ve spam sınıflandırıcı için gereken Model Oluşturucu işlevlerini içe aktarıyorsunuz. Bu işlem, Model Oluşturucu'yu kullanmak için gerekli olan TensorFlow 2.x sürümünü çalıştırıp çalıştırmadığınızı da kontrol eder.

Son olarak, önceden olduğu gibi hücrenin üzerine geldiğinizde &&t;play simgesinebasın, ve sonraki adım için yeni bir kod hücresi ekleyin.

3. Adım

Ardından, verileri uzak bir sunucudan cihazınıza indirip training_data değişkenini, indirdiğiniz yerel dosyanın yolu olarak ayarlayın:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/jm_blog_comments_extras.csv', extract=False)

Model Oluşturucu, indirilen CSV dosyası gibi basit CSV dosyalarındaki modelleri eğitebilir. Yapmanız gereken işlem, metni hangi sütunların ve hangilerinin etiketlerin sahibi olduğunu belirtmektir. Bunu nasıl yapacağınızı 5. Adımda göreceksiniz. İsterseniz dosyanın içeriğini görmek için CSV dosyasını doğrudan kendiniz indirebilirsiniz.

Aranızda meraklı biri olarak bu dosyanın adının jm_blog_comments_extras.csv olduğunu fark edeceksiniz. Bu dosya, ilk yorum spam modelini oluşturmak için kullandığımız orijinal eğitim verileri olan ve yepyeni bir destek kaydı verisi verilerini bir araya getirerek bunların hepsini tek bir dosyada oluşturuyor. Öğrenmek istediğiniz yeni cümlelere ek olarak, modeli eğitmek için kullanılan orijinal eğitim verilerine de ihtiyacınız vardır.

İsteğe bağlı: Bu CSV dosyasını indirip son birkaç satırı kontrol ederseniz daha önce düzgün çalışmayan sınır durumları için örnekler görürsünüz. Bunlar, önceden eğitilmiş modelin kendini eğitmek için kullandığı mevcut eğitim verilerinin sonuna eklenmiştir.

Bu hücreyi çalıştırın, ardından yürütme bittikten sonra yeni bir hücre ekleyin ve 4. adıma geçin.

4. Adım

Model Oluşturucu'yu kullanırken sıfırdan model oluşturamazsınız. Genellikle ihtiyaçlarınıza göre özelleştireceğiniz mevcut modelleri kullanırsınız.

Model Oluşturucu, önceden öğrenebileceğiniz çeşitli model yerleştirmeleri sağlar ancak en basit ve hızlı başlangıç yöntemi, average_word_vec web sitenizi oluşturmak için önceki codelab'de kullandığınız yöntemdir. Kod:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Şimdi bunu yeni hücreye yapıştırdıktan sonra çalıştırın.

Google Analytics

num_words

parametre

Bu, modelin kullanmasını istediğiniz kelime sayısıdır. Ne kadar iyi olduğunu düşünebilirsiniz, ancak genellikle her kelimenin kullanılma sıklığına göre en uygun noktaya sahip olursunuz. Tüm kitaplığın her kelimesini kullanırsanız sonuçta sadece bir kez kullanılan kelimelerin ağırlıklarını öğrenmeye ve dengelemeye çalışırsınız. Bu pek faydalı değildir. Herhangi bir metin arşivinde pek çok kelimenin yalnızca bir veya iki kez kullanıldığını ve genel fikir üzerinde olumsuz etki yaratabileceğinden, bunların modelinizde kullanılması genellikle değer taşımaz. Bu nedenle, num_words parametresini kullanarak modelinizi istediğiniz kelime sayısına göre ayarlayabilirsiniz. Burada daha küçük bir sayı daha küçük ve daha hızlı bir model içerir, ancak daha az kelime tanıdığı için daha az doğru olabilir. Burada daha büyük bir sayı, daha büyük ve muhtemelen daha yavaş bir modele sahip olacaktır. Sizin için en uygun olanı bulmak, sizin için en uygun yöntemi belirlemek amacıyla makine öğrenimi mühendisi olarak size bağlıdır.

Google Analytics

wordvec_dim

parametre

wordvec_dim parametresi, her bir kelimenin vektörü için kullanmak istediğiniz boyutların sayısıdır. Bu boyutlar, belirli bir kelimenin, eğitim sırasında makine öğrenimi algoritması tarafından oluşturulan ve benzer anlamlara sahip kelimeleri anlamlı bir şekilde en iyi şekilde denemek için kullanabileceği farklı özelliklerdir.

Örneğin, "evde ilaç" gibi bir kelimenin nasıl bir boyutu olduğu varsayıldığında, "pilling" gibi bir kelime bu boyutta yüksek bir puana sahip olabilir ve "xray" gibi düşük puanlı kelimelerle ilişkilendirilebilir. Ancak "kedi"nin boyutu bu boyutun altında kalır. "Tıbbi boyut"un, önemli olabilecek diğer potansiyel boyutlarla birleştiğinde spam'i belirlemek için yararlı olduğu ortaya çıkabilir.

"Tıbbi boyutta" yüksek puan alan kelimeler söz konusu olduğunda, kelimeleri insan vücuduyla ilişkilendiren 2. bir boyut kullanışlı olabilir. "Bacak", "kol" ve " boyun" gibi kelimeler burada da yüksek oranda, tıbbi boyutta da yüksek puan alabilir.

Model, bu boyutları kullanarak daha sonra spam ile ilişkilendirilebilecek kelimeleri algılayabilir. Spam e-postaların hem tıbbi hem de insan vücuduna ait parçalar içeren kelimeler içermesi daha olası olabilir.

Araştırmalardan elde edilen genel kural, kelime sayısının dördüncü kökünün bu parametre için iyi çalışmasıdır. Bu nedenle, 2000 kelime kullanırsam bunun için iyi bir başlangıç noktası 7 boyuttur. Kullanılan kelime sayısını değiştirirseniz bunu da değiştirebilirsiniz.

Google Analytics

seq_len

parametre

Giriş değerleri söz konusu olduğunda modeller genellikle çok katıdır. Bir dil modelinde bu, dil modelinin belirli, statik bir uzunlukdaki cümleleri sınıflandırabileceği anlamına gelir. Bu, seq_len dizisi tarafından belirlenir. Buradaki"dizi uzunluğu"anlamına gelir. Kelimeleri sayılara (veya jetonlara) dönüştürdüğünüzde cümleler bu jetonlardan oluşan bir dizi haline gelir. Bu nedenle, modeliniz 20 jeton içeren cümleleri sınıflandırmak ve tanımak için eğitilir (bu örnekte). Cümle daha uzunsa kısaltılır. Daha kısaysa bu serideki ilk codelab'de olduğu gibi bu iki karakterden oluşan, dolgulu olacak.

5. Adım: Eğitim verilerini yükleyin

CSV dosyasını daha önce indirdiniz. Şimdi bunu, modelin tanıyabileceği eğitim verilerine dönüştürmek için bir veri yükleyici kullanma zamanı.

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext', 
      label_column='spam', 
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

CSV dosyasını bir düzenleyicide açarsanız her satırın yalnızca iki değeri olduğunu ve bunların, dosyanın ilk satırındaki metinle açıklandığını görürsünüz. Genellikle her giriş, "sütun" olarak kabul edilir. İlk sütundaki tanımlayıcının commenttext olduğunu ve her satırdaki ilk girişin yorumun metni olduğunu görürsünüz.

Benzer şekilde, ikinci sütunun tanımlayıcısı spam olur. Her satırdaki ikinci girişin, spam veya YANLIŞ olduğunu ve bu metnin yorum spam olarak değerlendirilip değerlendirilmediğini gösterir. Diğer özellikler, 4. adımda oluşturduğunuz model spesifikasyonunu bir sınırlayıcı karakteriyle birlikte ayarlar. Bu örnekte, dosya virgülle ayrılmışken ayırıcı olarak virgül kullanılmıştır. Ayrıca, eğitim verilerini rastgele yeniden düzenlemek için bir karıştırma parametresi de ayarlayabilirsiniz. Böylece, benzer veya toplanmış olabilecek veriler, veri kümesi boyunca rastgele dağıtılır.

Ardından, verileri eğitim ve test verilerine bölmek için data.split() kullanırsınız. .9, veri kümesinin% 90'ının eğitim için, kalan kısmının ise test için kullanılacağını gösterir.

6. Adım: Modeli oluşturma

Modeli oluşturmak için kod ekleyeceğiniz bir başka hücre ekleyin:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Bu, Model Oluşturucu ile bir metin sınıflandırıcı modeli oluşturur ve kullanmak istediğiniz eğitim verilerini (4. adımda tanımlanmıştır), model spesifikasyonunu (4. adımda da ayarlanmıştır) ve bir dizi dönem (bu örnekte 50) belirtirsiniz.

Makine Öğrenimi'nin temel ilkesi, kalıp eşleştirmenin bir biçimi olmasıdır. Başlangıçta, bu kelimeler için önceden eğitilmiş ağırlıklar yüklenir ve bunları birlikte gruplandırıldığında hangilerinde spam olduğu, hangilerinin gösterilmediği ise bir "tahmin" ile gruplandırılır. Model yalnızca aşağıdaki gibi başladığı için ilk kez 50:50'ye yakın olabilir:

d6c8116f8e7e781b.png

Ardından, bu işlemin sonuçlarını ölçer ve tahminini değiştirmek için modelin ağırlıklarını değiştirir ve tekrar dener. Bu bir dönem. Yani, epochs=50 belirtildiğinde bu "loop' değerinin 50 defa gösterildiği gibi"

fc7bf6a948b7aa26.png

Dolayısıyla, 50. döneme geldiğinizde, model çok daha yüksek bir doğruluk düzeyi rapor eder. Bu örnekte %99,1 gösteriliyor!

7. Adım: Modeli Dışa Aktarın

Eğitiminiz tamamlandıktan sonra modeli dışa aktarabilirsiniz. TensorFlow, bir modeli kendi biçiminde eğitir ve bunun bir web sayfasında kullanılmak üzere TensorFlow.js biçimine dönüştürülmesi gerekir. Aşağıdakini yeni bir hücreye yapıştırıp yürütmeniz yeterlidir:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Bu kodu çalıştırdıktan sonra, Colab'ın sol tarafındaki küçük klasör simgesini tıklarsanız yukarıda dışa aktardığınız klasöre (bir dizinden yukarı gitmeniz gerekebilir) gidip ModelFiles.zip klasöründe bulunan dosyaların zip paketini bulabilirsiniz.

Bu codelab'de olduğu gibi, bu zip dosyasını şimdi bilgisayarınıza indirin:

a9d8595a3e2564dc.png

Güzel! Python bölümü bitti, artık bildiğiniz ve sevdiğiniz JavaScript dünyasına dönebilirsiniz. Bora

5. Yeni makine öğrenimi modeli sunuluyor

Modeli yüklemeye neredeyse hazırsınız. Ancak bunu yapabilmeniz için, codelab'de daha önce indirilen yeni model dosyalarını yüklemeniz ve kodda barındırılıp kullanılabilmesi gerekir.

Öncelikle, henüz yapmadıysanız, Model Maker Colab not defterinden indirdiğiniz model dosyalarının sıkıştırmasını açın. Çeşitli klasörlerin içinde aşağıdaki dosyaları görmeniz gerekir:

5634d536ef8be9ca.png

Burada ne var?

  • model.json - Bu, eğitilmiş TensorFlow.js modelini oluşturan dosyalardan biridir. JS kodunda bu özel dosyayı referans alacaksınız.
  • group1-shard1of1.bin - Bu, dışa aktarılan TensorFlow.js modeli için kayıtlı verilerin çoğunu içeren ikili bir dosyadır ve yukarıdaki model.json ile aynı dizinde indirmek için sunucunuzda bir yerde barındırılması gerekir.
  • vocab - Uzantı içermeyen bu tuhaf dosya, modelin cümleleri nasıl kodlayacağını gösteren bir modeldir. Bu sayede model, kelimelerin nasıl kullanılacağını anlayabilir. Bir sonraki bölümde bu konuyu daha ayrıntılı olarak ele alacağız.
  • labels.txt - Bu model, modelin tahmin edeceği sınıf adlarını içerir. Bu model için bu dosyayı metin düzenleyicide açarsanız tahmin sonucu olarak "spam" veya "spam" değil, "spam" olarak listelenmiş haldedir.

TensorFlow.js model dosyalarını barındırma

Bir web sunucusunda oluşturulan model.json ve *.bin dosyalarını ilk olarak web sayfanıza erişebilmek için yerleştirin.

Mevcut model dosyalarını silin

Bu serideki ilk codelab'in sonucu üzerinde derleme yaparken, önce mevcut model dosyalarını silmeniz gerekir. Glitch.com'u kullanıyorsanız soldaki dosyalar panelini model.json ve group1-shard1of1.bin için kontrol edin, her dosya için 3 noktalı menü açılır menüsünü tıklayın ve aşağıda gösterildiği gibi delete'i seçin:

7412b0b795d3b84f.png

Yeni dosyaları Glitch'e yükleme

Güzel! Şimdi yenilerini yükleyin:

  1. Glitch projenizin sol panelindeki öğeler klasörünü açın ve adları aynı olan yüklenmiş tüm öğeleri silin.
  2. Öğe yükle'yi tıklayın ve bu klasöre yüklenecek group1-shard1of1.bin'i seçin. Yüklendikten sonra şu şekilde görünür:

25a2251c7f165184.png

  1. Güzel! Şimdi model.json dosyası için de aynısını yapın. Böylece, öğeler klasörünüzde 2 dosyanın olması gerekir:

51a6dbd5d3097ffc.png

  1. Az önce yüklediğiniz group1-shard1of1.bin dosyasını tıklarsanız URL'yi bulunduğu konuma kopyalayabilirsiniz. Bu yolu aşağıda gösterildiği gibi kopyalayın:

92ded8d46442c404.png

  1. Şimdi ekranın sol alt tarafındaki Araçlar > Terminal'i tıklayın. Terminal penceresinin yüklenmesini bekleyin.
  2. Yükleme işlemi tamamlandığında aşağıdakileri yazın ve ardından, dizini www klasörüyle değiştirmek için Enter tuşuna basın:

terminal:

cd www
  1. Ardından, az önce yüklenen 2 dosyayı indirmek için wget adresini kullanın. Aşağıdaki URL'leri, Glitch'teki items klasöründe bulunan dosyalar için oluşturduğunuz URL'lerle değiştirin (her bir dosyanın özel URL'sinin öğe klasörünü kontrol edin).

İki URL arasındaki boşluğun ve kullanmanız gereken URL'lerin, gösterilenlerden farklı olacağını ancak benzer görüneceğini unutmayın:

terminal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Süper! Artık www klasörüne yüklenen dosyaların bir kopyasını oluşturdunuz.

Ancak şu anda tuhaf adlarla indiriliyorlar. Terminale ls yazıp enter tuşuna basarsanız aşağıdakine benzer bir sonuç görürsünüz:

9cc90f1d053f517f.png

  1. mv komutunu kullanarak dosyaları yeniden adlandırın. Konsola şunu yazın ve her satırdan sonra enter tuşuna basın:

terminal:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Son olarak, terminale refresh yazıp Enter tuşuna basarak Glitch projesini yenileyin:

terminal:

refresh

Sayfa yenilendikten sonra, kullanıcı arayüzünün www klasöründe model.json ve group1-shard1of1.bin öğelerini görürsünüz:

50dd98c0a8f3e629.png

Güzel! Son adım, dictionary.js dosyasını güncellemektir.

  1. İndirilen yeni kelime öbeği dosyanızı metin düzenleyici üzerinden manuel olarak veya bu aracı kullanarak doğru JS biçimine dönüştürün ve sonuçta kaydedilen dosyayı www klasörünüze dictionary.js olarak kaydedin. Bir dictionary.js dosyanız varsa yeni içeriği kopyalayıp dosyanın içine yapıştırın ve dosyayı kaydedin.

Harika! Değiştirilen tüm dosyaları başarıyla güncellediniz. Şimdi web sitesini kullanmayı denerseniz, yeniden eğitilen modelin, aşağıda gösterilen ve öğrenilen uç örnekleri nasıl hesaba katabileceğini göreceksiniz:

3ece5dbd0a673987.gif

Gördüğünüz gibi, ilk 6 filtre artık spam değil olarak sınıflandırılıyor ve 6'lık grubun 2'si de spam olarak tanımlanıyor. Mükemmel!

İyi bir genelleştirme yapılıp yapılmadığını görmek için bazı varyasyonları da deneyelim. Başlangıçta aşağıdakiler gibi başarısız bir cümle vardı:

"gogo GOOG hisse senedi az önce yükseldi! Çok geç olmadan!

Bu değişiklik artık spam olarak doğru şekilde sınıflandırılmaktadır ancak bu ayarı aşağıdaki şekilde değiştirirseniz ne olur?

"XYZ hisse senedinin değeri arttı. Çok geç olmadan hemen bir şeyler alın!&quot

Burada, hisse senedi simgesini ve ifadeyi biraz değiştirmiş olsanız bile doğru olacağı tahmin edilen% 98'lik bir spam tahmini alırsınız.

Bu yeni modeli kırmaya çalışırsanız kesinlikle internette daha sık karşılaşabileceğiniz durumlara özgü daha fazla varyasyon yakalamak için daha fazla eğitim verisi toplayabileceksiniz. Gelecekteki bir codelab'de, modelinizin işaretlenmiş olduğu canlı verilerle sürekli olarak nasıl geliştirileceğini göstereceğiz.

6. Tebrikler!

Tebrikler, mevcut bir makine öğrenimi modelini yeniden bulduğunuzda, bulduğunuz son kullanım örneklerine uygun şekilde güncelleme yaptınız ve gerçek bir uygulama için bu değişiklikleri TensorFlow.js ile tarayıcıya dağıttınız.

Özet

Bu codelab'de:

  1. Önceden hazırlanmış yorum spam modeli kullanılırken çalışmayan uç örnekler bulundu
  2. Keşfettiğiniz uç durumları hesaba katabilmek için Model Oluşturucu modelini yeniden eğittiniz
  3. Yeni eğitilmiş model TensorFlow.js biçimine aktarıldı
  4. Web uygulamanız yeni dosyaları kullanacak şekilde güncellendi

Sırada ne var?

Yani bu güncelleme son derece işe yarar ancak her web uygulamasında olduğu gibi zaman içinde değişiklikler gerçekleşir. Her seferinde manuel olarak bunu yapmak zorunda kalmadan, uygulamanın kendisini zaman içinde sürekli geliştirmesi çok daha iyi olur. Örneğin, 100 yeni yorum yanlış sınıflandırıldı olarak işaretledikten sonra, bir modeli otomatik olarak yeniden eğitmek için bu adımları nasıl otomatik hale getirebileceğinizi düşünüyor musunuz? Normal web mühendisliği şapkanızı taktığınızda büyük olasılıkla bunu otomatik olarak yapmak için bir ardışık düzen oluşturmayı öğrenebilirsiniz. Denediyseniz endişelenmeyin. Serideki bir sonraki codelab'i inceleyin.

Yaptıklarınızı bizimle paylaşın

Yaratıcılıkla ilgili diğer kullanım alanları için bugün yaptığınız çalışmaları kolayca genişletebilirsiniz. Kutunun dışında düşünmenizi ve bilgisayar korsanlığı yapmaya devam etmenizi öneririz.

Projenizin TensorFlow blogunda veya gelecekteki etkinliklerde yer alması için #MadeWithTFJS hashtag'ini kullanarak bizi sosyal medyada etiketlemeyi unutmayın. Yaratıcılığınızı görmekten memnuniyet duyarız.

Daha ayrıntılı bilgi için TensorFlow.js codelab'leri

Ödeme yapılacak web siteleri