TensorFlow.js: Uç durumları ele almak için yorum spam algılama modelini yeniden eğitme

1. Başlamadan önce

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

Son codelab'de, kurgusal bir video blogu için tam işlevli bir web sayfası oluşturdunuz. Tarayıcıda TensorFlow.js tarafından desteklenen önceden eğitilmiş bir yorum spam'i algılama modeli kullanarak, depolama için sunucuya veya bağlı diğer istemcilere gönderilmeden önce yorumları spam'e karşı filtreleyebildiniz.

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

a4511e5d445706b1.gif

Bu süreç gayet iyi gitti ancak tespit edilemediği, keşfedilecek bazı uç durumlar da mevcut. Modeli, işleyemediği durumları hesaba katacak şekilde yeniden eğitebilirsiniz.

Doğal dil işlemeyi (bilgisayarda insan dilini anlama sanatı) kullanmaya odaklanan bu codelab'de, oluşturduğunuz mevcut bir web uygulamasını nasıl değiştirebileceğinizi öğrenebilirsiniz (Codelab'leri sırayla uygulamanız önemle tavsiye edilir). Yorum spam'i sorununu çözmek için birçok web geliştiricisinin sayısı giderek artan popüler web uygulamalarından biri üzerinde çalışırken kesinlikle karşılaşacaktır.

Bu codelab'de makine öğrenimi modelinizi güncel trendlere veya popüler tartışma konularına göre zaman içinde gelişebilecek spam ileti içeriğindeki değişiklikleri hesaba katacak şekilde yeniden eğiterek modeli güncel tutmanıza ve bu tür değişiklikleri hesaba katmanıza olanak tanıyacak.

Ön koşullar

  • Bu serideki ilk codelab'i tamamladınız.
  • HTML, CSS ve JavaScript gibi web teknolojileri hakkında temel düzeyde bilgi

Oluşturacaklarınız

Daha önce oluşturulan web sitesini gerçek zamanlı yorum bölümü olan kurgusal bir video blogu için yeniden kullanacak ve bu web sitesini, TensorFlow.js kullanarak spam algılama modelinin özel olarak eğitilmiş bir sürümünü yükleyecek şekilde yükselteceksiniz. Böylece, önceden başarısız olduğu uç durumlarda daha iyi performans gösterecektir. Web geliştiricileri ve mühendisler olarak elbette günlük işlerinizde üzerinde çalıştığınız herhangi bir web sitesinde yeniden kullanım için bu varsayımsal kullanıcı deneyimini değiştirebilir ve çözümü herhangi bir müşteri kullanım alanına (örneğin bir blog, forum veya Drupal gibi) uyacak şekilde uyarlayabilirsiniz.

Haydi bilgisayar korsanlığı yapalım...

Neler öğreneceksiniz?

Bu kurstan sonra:

  • Önceden eğitilen 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üncelleyip sonuçları kontrol etme

Bu laboratuvarda HTML5, CSS ve JavaScript'e aşina olmanız gerekir. Ayrıca bir "ortak laboratuvar" aracılığıyla Python kodları çalıştıracaksınız not defterine otomatik olarak ekler. Ancak bunun için Python bilgisi gerekmez.

2. Kodlamaya hazırlanın

Yine web uygulamasını barındırmak ve değiştirmek için Glitch.com'u kullanıyor olacaksınız. Ön koşul codelab'ini henüz tamamlamadıysanız başlangıç noktanız olarak nihai sonucu klonlayabilirsiniz. Kodun nasıl çalıştığıyla ilgili sorularınız varsa devam etmeden önce bu çalışan web uygulamasını nasıl hazırlayacağınız konusunda adım adım yol gösteren önceki codelab'i tamamlamanız önemle tavsiye edilir.

Glitch'te remiks yap düğmesini tıklayarak çatallayın ve düzenleyebileceğiniz yeni bir dosya grubu oluşturun.

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

Biraz önce klonladığınız tamamlanmış bir web sitesini açıp bazı yorumlar yazmayı denerseniz çoğu zaman beklendiği gibi çalıştığını, spam gibi görünen yorumları beklendiği gibi engellediğini ve meşru yanıtlara izin verdiğini fark edersiniz.

Yine de, zanaatkar olup modeli kırmak için bir şeyler ifade etmeye çalışırsanız muhtemelen bir noktada başarılı olursunuz. Biraz deneme yanılma ile aşağıda gösterilenler gibi örnekleri manuel olarak oluşturabilirsiniz. Bunları mevcut web uygulamasına yapıştırmayı deneyin, konsolu kontrol edin ve yorumun spam olup olmadığını görmek için geri gelme olasılığını görün:

Sorun içermeden yayınlanan meşru yorumlar (doğru negatifler):

  1. "Vay canına, bu videoya bayıldım. Harika bir iş çıkardınız." Spam Olasılığı: %47.91854
  2. "Bu demolara bayıldım. Daha fazla bilginiz var mı?" Spam Olasılığı: %47,15898
  3. "Daha fazla bilgi edinmek için hangi web sitesine gidebilirim?" Spam Olasılığı: %15,32495

Bu muhteşem bir gelişme. Yukarıdakilerin tümünün olasılıkları oldukça düşüktür ve işlem yapılmadan önce% 75'lik minimum olasılığın varsayılan SPAM_THRESHOLD (önceki codelab'den script.js kodunda tanımlanmıştır) ile başarıyla tamamlanmıştır.

Şimdi de, spam olarak işaretlenen ancak spam olarak işaretlenen başka rahatsız edici yorumlar yazmaya çalışalım.

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

  1. "Birileri taktığı maskenin web sitesini bağlayabilir mi?" Spam Olasılığı: %98.46466
  2. "Bu şarkıyı Spotify'dan satın alabilir miyim? Lütfen bana haber verin." Spam Olasılığı: %94.40953
  3. "TensorFlow.js'nin nasıl indirileceğiyle ilgili ayrıntılı bilgi vermek için benimle iletişime geçebilir misiniz?" Spam Olasılığı: %83.20084

Olamaz! İzin verilmesi gerektiği halde, bu meşru yorumların spam olarak işaretlendiği anlaşılıyor. Bu sorunu nasıl düzeltebilirsiniz?

Basit seçeneklerden biri, SPAM_THRESHOLD metriğinde güven oranını% 98,5'in üzerinde olacak şekilde artırmaktır. Bu durumda, yanlış sınıflandırılmış bu yorumlar yayınlanır. Bunları aklımızda tutarak aşağıdaki olası diğer sonuçlarla devam edelim...

Spam olarak işaretlenen spam yorumlar (doğru pozitifler):

  1. "Çok iyi ama web sitemdeki indirme bağlantılarına göz atsanız iyi olur." Spam Olasılığı: %99.77873
  2. "Size bazı ilaçları sunabilecek kişileri tanıyorum, ayrıntılar için pr0file dosyama bakıyorlar" Olasılık Spam: %98.46955
  3. "Çok daha iyisi, çok daha güzel videolar indirmek için profilime bakın. http://example.com" Olası Spam: %96.26383

Tamam. Bu, orijinal% 75'lik eşiğimizle beklendiği gibi işliyor. Ancak önceki adımda SPAM_THRESHOLD ayarını% 98,5'in üzerinde olacak şekilde değiştirdiğiniz düşünüldüğünde, burada 2 örneğin kabul edilmesine izin verileceği için eşik çok yüksektir. Belki% 96 daha iyidir? Ancak bunu yaparsanız önceki bölümdeki yorumlardan biri (yanlış pozitifler) %98, 46466 oranında derecelendirildiği için meşru olduğunda spam olarak işaretlenir.

Bu durumda en iyi yöntem, tüm bu gerçek spam yorumlarını yakalamak ve yukarıdaki hatalar için yeniden eğitmektir. Eşiği% 96'ya ayarladığınızda tüm doğru pozitifler yine de yakalanır ve yukarıdaki yanlış pozitiflerden 2'sini elersiniz. Tek bir numarayı değiştirmek için çok fena değil.

Devam edelim...

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

  1. "Çok daha iyisi, muhteşem videolar indirmek için profilime bakın!" Spam Olasılığı: %7,54926
  2. "Pr0file'a göz atın, spor salonu eğitimi derslerimizde indirimden yararlanın!" Spam Olasılığı: %17,49849
  3. "Aman GOOG hisse senedi parladı! Geç kalmayın." Spam Olasılığı: %20,42894

Bu yorumlar için SPAM_THRESHOLD değerini daha fazla değiştirerek herhangi bir işlem yapmanız gerekmez. Spam eşiğini% 96'dan yaklaşık% 9'a düşürmek, gerçek yorumların spam olarak işaretlenmesine neden olur. Bu yorumlardan birinin meşru olduğu halde puanı% 58'dir. Bu tür yorumlarla başa çıkmanın tek yolu, modeli eğitim verilerine dahil edilen bu uç durumlar ile yeniden eğitmektir. Böylece model, spam olan veya olmayan şeylere göre dünya görünümünü ayarlamayı öğrenir.

Şu an için geriye kalan tek seçenek modeli yeniden eğitmek olsa da, performansı artırmak için bir spam çağrısı yapmaya karar verdiğinizde eşiği nasıl hassaslaştırabileceğinizi de gördünüz. İnsan olarak, %75'i oldukça emin görünüyor ancak bu modelde örnek girişlerle daha etkili olmak için% 81, 5'e yaklaşmanız gerekiyordu.

Farklı modellerde iyi performans gösteren tek bir sihirli değer yoktur ve bu eşik değerinin, nelerin iyi performans gösterdiğini öğrenmek için gerçek dünya verileriyle denemeler yapıldıktan sonra model bazında ayarlanması gerekir.

Yanlış pozitif (veya negatif) durumun ciddi sonuçları olabileceği (ör.tıp sektöründe) bazı durumlar olabilir. Bu nedenle, eşiğinizi çok yüksek olacak şekilde ayarlayabilir ve eşiği karşılamayan kullanıcılar için daha fazla manuel inceleme talep edebilirsiniz. Geliştirici olarak bu seçimi size aittir ve bazı denemeler yapmanızı gerektirir.

4. Yorum spam'i algılama modelini yeniden eğitme

Önceki bölümde, model için başarısız olan bir dizi uç durum tanımladınız. Bu durumda tek seçenek, bu durumları hesaba katacak şekilde modeli yeniden eğitmektir. Üretim sisteminde zaman içinde kullanıcılar bir yorumu spam olarak işaretlediğinde ve işaretlenen yorumları incelerler, ancak işaretlenen yorumları inceleyen moderatörler bazılarının aslında spam olmadığını fark edip bu yorumları yeniden eğitim için işaretleyebilir. Bu uç durumlar için pek çok yeni veri topladığınızı varsayarsak (en iyi sonuçlar için mümkünse bu yeni cümlelerin bazı varyasyonlarını kullanmalısınız.) ş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 hazırlanmış model, üçüncü bir tarafın Model Oluşturucu aracılığıyla "ortalama kelime yerleştirme" kullanan ve oluşturduğu bir modeldi. iyi bir örnektir.

Model, Model Maker ile oluşturulduğundan, modeli yeniden eğitmek için kısa bir süreliğine Python'a geçmeniz ve ardından oluşturulan modeli tarayıcıda kullanabilmeniz için TensorFlow.js biçimine aktarmanız gerekecektir. Neyse ki Model Maker, modellerinin kullanımını son derece basit hale getiriyor. Bu nedenle, takip edilmesi oldukça kolay. Süreç boyunca size rehberlik edeceğiz. Bu nedenle, daha önce Python'u hiç kullanmadıysanız endişelenmeyin!

Colab'ler

Bu codelab'de, çeşitli Python yardımcı programlarının yüklü olduğu bir Linux sunucusu kurulumuyla ilgilenmediğinizden, "Colab Notebook" kullanarak web tarayıcısında kod yürütmeniz yeterlidir. Bu not defterleri bir "arka uca" bağlanabilir web tarayıcısı içinde rastgele kod yürütebileceğiniz ve sonuçları görebileceğiniz, önceden yüklenmiş bazı öğelerin bulunduğu bir sunucudur. Bu yöntem, hızlı prototip oluşturma veya bu tür eğitimlerde kullanım açısından son derece faydalıdır.

colab.research.google.com adresine gidin. Aşağıdaki gibi bir karşılama ekranı göreceksiniz:

6b82258445885c50.png

Şimdi pop-up pencerenin sağ alt tarafındaki Yeni Not Defteri düğmesini tıklayın. Aşağıdaki gibi boş bir ortak çalışma göreceksiniz:

2d52c8f7afa88564.png

Çok güzel! Sıradaki adım, ön uç colab'ini bir arka uç sunucusuna bağlamaktır. Böylece, yazacağınız Python kodunu yürütebilirsiniz. Bu işlemi sağ üstte Bağlan'ı tıklayıp Barındırılan çalışma zamanına bağlan'ı seçerek yapabilirsiniz.

fa5f578a1a3d352b.png

Bağlandıktan sonra, yerlerinde RAM ve Disk simgeleri görünecektir:

541c9894fb39d4cb.png

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

1. adım

Şu anda boş olan ilk hücreye aşağıdaki kodu kopyalayın. Python'un "pip" adlı paket yöneticisini kullanarak TensorFlow Lite Model Maker'ı sizin için yükler (bu kod laboratuvarı okuyucularının çoğunun JS ekosisteminden daha iyi aşina olabileceği npm'ye benzer):

!apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
!pip install -q tflite-model-maker

Hücreye kod yapıştırılırsa kod yürütülmez. Ardından, yukarıdaki kodu yapıştırdığınız gri hücrenin ve küçük bir "oynat" simgesinin üzerine fareyle gelin simgesi, hücrenin solunda, aşağıda vurgulandığı gibi görünür:

7ac5e3516bed6335.png Hücreye az önce girilen kodu yürütmek için oynat düğmesini tıklayın.

Model oluşturucunun yüklenmekte olduğunu göreceksiniz:

651f21b04fb648cc.png

Bu hücrenin gösterildiği şekilde çalıştırılması tamamlandıktan sonra, aşağıda verilen bir sonraki adıma geçin.

2. Adım

Ardından, gösterildiği gibi yeni bir kod hücresi ekleyin. Böylece ilk hücrenin arkasına başka bir kod yapıştırabilir ve bu hücreyi ayrı olarak çalıştırabilirsiniz:

869904a9d774c455.png

Yürütülen bir sonraki hücrede, not defterinin geri kalanındaki kodun kullanması gereken bir dizi içe aktarma işlemi bulunur. Aşağıdakini kopyalayıp oluşturulan yeni hücreye 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 konular. Yalnızca spam sınıflandırıcısı için gerekli olan bazı yardımcı programları ve Model Oluşturucu işlevlerini içe aktarıyorsunuz. Bu işlem, Model Maker'ı kullanmak için gerekli olan TensorFlow 2.x programını çalıştırıp çalıştırmadığınızı da kontrol eder.

Son olarak, daha önce olduğu gibi "play" tuşuna basarak hücreyi yürütün simgesini tıklayın ve sonraki adım için yeni bir kod hücresi ekleyin.

3. adım

Şimdi, verileri uzak bir sunucudan cihazınıza indirecek ve training_data değişkenini, indirilen elde edilen yerel dosyanın yolu olarak ayarlayacaksınız:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/jmstore/TensorFlowJS/EdX/code/6.5/jm_blog_comments_extras.csv', extract=False)

Model Maker, indirilenler gibi basit CSV dosyalarından modelleri eğitebilir. Metnin hangi sütunlarda, hangilerinin ise etiketlerde bulunduğunu belirtmeniz yeterlidir. Bunu nasıl yapacağınızı 5. Adımda görebilirsiniz. İsterseniz CSV dosyasını doğrudan indirerek içeriğini görebilirsiniz.

Dikkatli gözlerse bu dosyanın adının jm_blog_comments_extras.csv olduğunu fark edeceksiniz. Bu dosya, keşfettiğiniz yeni uç destek kaydı verileriyle birleştirilen ilk yorum spam modelini oluşturmak için kullandığımız orijinal eğitim verileridir. Bu sayede tüm veriler tek bir dosyada toplanabilir. Öğ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ı indirir ve son birkaç satırı kontrol ederseniz daha önce düzgün çalışmayan uç durumlara ilişkin örnekler görürsünüz. Bunlar, önceden hazırlanmış modelin kendini eğitmek için kullandığı mevcut eğitim verilerinin sonuna eklenmiştir.

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

4. Adım

Model Maker'ı kullanırken sıfırdan model oluşturmazsınız. Genellikle mevcut modelleri kullanırsınız ve bunları daha sonra ihtiyaçlarınıza göre özelleştirirsiniz.

Model Maker, kullanabileceğiniz çeşitli önceden öğrenilmiş model yerleştirmeleri sağlar. Bununla birlikte, web sitenizi oluşturmak için önceki codelab'de kullandığınız average_word_vec modeliyle çalışmaya en kolay ve hızlı şekilde başlayabilirsiniz. Kod:

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

Devam edin ve onu yeni hücreye yapıştırdıktan sonra çalıştırın.

num_words

parametresi

Bu, modelin kullanmasını istediğiniz kelime sayısıdır. ne kadar çok şey ifade ederseniz o kadar iyi olduğunu düşünebilirsiniz ancak genellikle her kelimenin kullanılma sıklığına göre iyi bir nokta vardır. Tüm kitaplıktaki her kelimeyi kullanırsanız model, yalnızca bir kez kullanılan kelimelerin ağırlıklarını öğrenmeye ve dengelemeye çalışıyor olabilir. Bu pek de faydalı değildir. Herhangi bir metin topluluğunda birçok kelimenin yalnızca bir veya iki kez kullanıldığını görebilirsiniz. Genel duygular üzerinde çok az etkisi olduğundan, bu kelimelerin modelinizde kullanılmasına genellikle değmez. Böylece, num_words parametresini kullanarak modelinizi istediğiniz kelime sayısına göre ayarlayabilirsiniz. Buradaki daha küçük bir sayı, daha küçük ve daha hızlı bir modele sahiptir, ancak daha az kelime algıladığı için doğruluğu daha düşük olabilir. Burada büyük bir sayı, daha büyük ve potansiyel olarak daha yavaş bir modele sahip olur. Doğru noktayı bulmak çok önemlidir. Makine öğrenimi mühendisi olarak kullanım alanınıza neyin en uygun olduğunu belirlemek size kalmıştır.

wordvec_dim

parametresi

wordvec_dim parametresi, her bir kelimenin vektörü için kullanmak istediğiniz boyut sayısıdır. Bu boyutlar, temelde herhangi bir kelimenin ölçülebildiği (eğitim sırasında makine öğrenimi algoritması tarafından oluşturulan) farklı özelliklerdir. Program, benzer kelimeleri anlamlı bir şekilde en iyi şekilde ilişkilendirmeye çalışırken bu ölçümü kullanır.

Örneğin, "tıbbi" ile ilgili bir boyutunuz varsa "hap" gibi bir kelimeydi. bu boyutta yüksek puanlı olabilir ve "röntgen", "kedi" gibi diğer yüksek puanlı kelimelerle ilişkilendirilebilir bu boyutta bir puan düşük olacaktır. "Tıbbi boyut"un önemli olan diğer boyutlarla birleştirildiğinde spam'i belirlemek açısından yararlıdır.

"Tıbbi boyutta" yüksek puan alan kelimeler söz konusu olduğunda kelimeleri insan bedeniyle ilişkilendiren bir ikinci boyutun faydalı olabileceğini tespit edebilir. "Bacak", "kol", "boy" gibi kelimeler yüksek olduğu gibi tıbbi boyutta da epey yüksek olabilir.

Model, bu boyutları kullanarak spam ile ilişkili olması muhtemel kelimeleri algılamasını sağlayabilir. Spam e-postaların hem tıbbi hem de insan vücuduna ait parçalar içerme olasılığı daha yüksektir.

Araştırmalara göre, kelime sayısının dördüncü kökü, bu parametrede işe yarar bir genel kuraldır. 2.000 kelime kullanıyorsam, bunun için 7 boyut iyi bir başlangıç noktası olabilir. Kullanılan kelime sayısını değiştirirseniz bunu da değiştirebilirsiniz.

seq_len

parametresi

Giriş değerleri söz konusu olduğunda modeller genellikle çok katıdır. Bir dil modeli için bu, dil modelinin belirli, statik ve uzunluklu cümleleri sınıflandırabileceği anlamına gelir. Bu, "dizi uzunluğu" anlamına gelen seq_len parametresiyle belirlenir. Kelimeleri sayılara (veya simgesel sembollere) dönüştürdüğünüzde cümleler bu deyimlerden oluşan bir dizi haline gelir. Bu nedenle, modeliniz (bu örnekte) 20 jetona sahip cümleleri sınıflandırıp tanıyacak şekilde eğitilir. Cümle bundan uzunsa kısaltılır. Daha kısaysa bu serideki ilk codelab'de olduğu gibi doldurulur.

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

Daha önce CSV dosyasını indirmiştiniz. Ş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ırda yalnızca iki değer olduğunu ve bunlar, dosyanın ilk satırında metinle açıklandığını görürsünüz. Genellikle her giriş bir "sütun" olarak kabul edilir. İlk sütun için açıklayıcının commenttext olduğunu ve her satırdaki ilk girişin yorum metni olduğunu görürsünüz.

Benzer şekilde, ikinci sütunun tanımlayıcısı spam şeklindedir. Metnin yorum spam'i olarak kabul edilip edilmediğini belirtmek için her satırdaki ikinci girişin DOĞRU veya YANLIŞ olduğunu görürsünüz. Diğer özellikler, 4. adımda oluşturduğunuz model spesifikasyonunu, bir ayırıcı karakterle birlikte ayarlar. Bu ayırıcı karakter, bu örnekte dosya virgülle ayrılmış olduğundan virgüldür. Ayrıca, benzer veya birlikte toplanmış olabilecek öğelerin veri kümesi genelinde rastgele dağıtılması için eğitim verilerini rastgele yeniden düzenlemek amacıyla bir karıştırma parametresi de ayarladınız.

Daha sonra verileri eğitim ve test verilerine ayırmak için data.split() kullanacaksınız. 0,9 değeri, veri kümesinin% 90'ının eğitim, geri kalanının ise test için kullanılacağını gösterir.

6. Adım - Modeli oluşturun

Modeli derlemek için kod ekleyeceğimiz başka bir hücre ekleyin:

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

Bu, Model Maker 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 belirtimini (4. adımda da ayarlanmıştır) ve bir dizi dönemi (bu örnekte 50) belirtirsiniz.

Makine öğreniminin temel ilkesi, bir kalıp eşleştirme biçimi olmasıdır. Başlangıçta kelimeler için önceden eğitilmiş ağırlıkları yükler ve bunları bir "tahmin" ile gruplandırmaya çalışır. hangilerinin spam olduğunu, hangilerinin ise olmadığını gösterir. Model henüz aşağıda gösterildiği gibi başlamakta olduğundan ilk sefer 50:50 civarında olabilir:

bbe4b896d8060bc4.png

Ardından bunun 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. Dolayısıyla, epochs=50 olarak belirtildiğinde, bu "döngü"den geçer. gösterildiği gibi 50 kez:

4ed286d114960ca.png

Dolayısıyla, 50. döneme ulaştığınızda model çok daha yüksek bir doğruluk düzeyi bildirir. 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. Bunun bir web sayfasında kullanılması için TensorFlow.js biçimine dönüştürülmesi gerekir. Aşağıdakini yeni bir hücreye yapıştırmanız ve çalıştırmanız 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 solundaki küçük klasör simgesini tıklarsanız yukarıda dışa aktardığınız klasöre (kök dizinde, bir seviye yukarı çıkmanız gerekebilir) gidebilir ve ModelFiles.zip dizininde dışa aktarılan dosyaların zip paketini bulabilirsiniz.

Bu ZIP dosyasını ilk codelab'deki gibi kullanacağınız için şimdi bilgisayarınıza indirin:

cda3c681ebf144b4.png

Çok güzel! Python kısmı sona erdi. Artık bildiğiniz ve sevdiğiniz JavaScript alanına geri dönebilirsiniz. Bora

5. Yeni makine öğrenimi modelini sunma

Artık modeli yüklemeye neredeyse hazırsınız. Bunu yapmadan önce, codelab'de daha önce indirdiğiniz yeni model dosyalarını, kodunuzun içinde barındırılıp kullanılabilmesi için yüklemeniz gerekir.

İlk olarak, henüz yapmadıysanız biraz önce çalıştırdığınız Model Maker Colab not defterinden indirdiğiniz modelin dosyalarını açın. Çeşitli klasörlerde bulunan aşağıdaki dosyaları görmeniz gerekir:

3ace87c57b98cfbc.png

Burada ne var?

  • model.json - Bu, eğitilen TensorFlow.js modelini oluşturan dosyalardan biridir. JS kodunda bu dosyaya atıfta bulunacaksınız.
  • group1-shard1of1.bin - Bu, dışa aktarılan TensorFlow.js modeliyle ilgili kaydedilen verilerin çoğunu içeren bir ikili program dosyasıdır ve indirilmek üzere yukarıdaki model.json ile aynı dizinde indirilebilmesi için sunucunuzun bir yerinde barındırılması gerekir.
  • vocab - Uzantısı olmayan bu tuhaf dosya, Model Maker'a ait bir dosyadır. Model, kelimeleri nasıl kullanacağını anlaması için cümlelerdeki kelimeleri nasıl kodlayacağınızı gösterir. Bir sonraki bölümde bu konuyu daha ayrıntılı olarak ele alacağız.
  • labels.txt - Bu, yalnızca modelin tahmin edeceği sonuç sınıf adlarını içerir. Bu model için dosyayı metin düzenleyicinizde açarsanız yalnızca "false" değeri olur. ve "true" "spam değil" olduğunu belirten bir liste veya "spam" yazın tahmin çıkışı olarak kullanır.

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

Öncelikle, bir web sunucusunda oluşturulan model.json ve *.bin dosyalarını yerleştirin. Böylece, bu dosyalara web sayfanızdan erişebilirsiniz.

Mevcut model dosyalarını silme

Bu serideki ilk codelab'in sonucunu temel alarak geliştirme yaparken öncelikle yüklenen mevcut model dosyalarını silmeniz gerekir. Glitch.com kullanıyorsanız model.json ve group1-shard1of1.bin için soldaki dosya panelini kontrol edin, her bir dosya için 3 noktalı menü açılır menüsünü tıklayın ve gösterildiği gibi sil'i seçin:

c72bfdc5a0db4d0d.png

Glitch'e yeni dosyalar yükleniyor

Çok güzel! Şimdi yenilerini yükleyin:

  1. Glitch projenizin sol panelindeki assets klasörünü açın ve aynı ada sahip olan yüklenen tüm eski öğeleri silin.
  2. Öğe yükle'yi tıklayın ve bu klasöre yüklenecek group1-shard1of1.bin öğesini seçin. Yüklendikten sonra, URL şu şekilde görünmelidir:

c6739dd30e6df977.png

  1. Çok güzel! Şimdi aynı işlemi model.json dosyası için de yapın. Böylece 2 dosyanın, öğeler klasörünüzde aşağıdaki gibi olması gerekir:

b7858eb08bea9ac3.png

  1. Yeni yüklediğiniz group1-shard1of1.bin dosyasını tıklarsanız URL'yi konumuna kopyalayabilirsiniz. Bu yolu gösterildiği gibi hemen kopyalayın:

19999f6644f61153.png

  1. Şimdi ekranın sol alt kısmındaki Araçlar > Terminal. Terminal penceresinin yüklenmesini bekleyin.
  2. Yüklendikten sonra aşağıdakileri yazın ve dizini www klasörü olarak değiştirmek için Enter tuşuna basın:

terminal:

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

İki URL arasındaki boşluğun, 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 an garip adlarla indirilecekler. Terminale ls yazıp Enter tuşuna basarsanız şuna benzer bir şey görürsünüz:

6c417fdfc64762f1.png

  1. mv komutunu kullanarak dosyaları yeniden adlandırın. Konsola aşağıdakileri 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

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

530bb651f4dbac64.png

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

  1. İndirdiğiniz yeni sözlük dosyasını doğru JS biçimine dönüştürün. Bunun için manuel olarak metin düzenleyicinizi kullanabilir veya bu aracı kullanabilir, ardından oluşturduğunuz çıkışı dictionary.js olarak www klasörünüze kaydedebilirsiniz. dictionary.js dosyanız zaten varsa yeni içeriği kopyalayıp bu dosyanın üzerine yapıştırıp dosyayı kaydedebilirsiniz.

Harika! Değiştirilen tüm dosyaları başarıyla güncellediniz. Şimdi web sitesini kullanmaya çalışırsanız yeniden eğitilen modelin, gösterildiği gibi bulunan ve öğrenilen uç durumları nasıl hesaba katabileceğini görürsünüz:

64e5cf6f6e158d6c.gif

Gördüğünüz gibi, ilk 6'sı doğru şekilde spam değil olarak sınıflandırılıyor ve 2'nci grubun tümü spam olarak tanımlanıyor. Mükemmel!

Genellemenin doğru olup olmadığını görmek için birkaç varyasyon deneyelim. İlk başta başarısız olan bir cümle vardı. Örneğin:

"Aman GOOG hisse senedi patladı! Çok geç!"

Bu ileti artık doğru bir şekilde spam olarak sınıflandırıldı. Peki, bu e-postayı aşağıdaki şekilde değiştirirseniz ne olur:

"Böylece XYZ hisse senedinin değeri arttı. Çok geç olmadan hemen alın!"

Burada, hisse senedi sembolünü ve ifadesini biraz değiştirseniz bile% 98'in spam olabileceğine dair bir tahmin görüyorsunuz. Bu doğru.

Elbette bu yeni modeli gerçekten kırmaya çalışırsanız bunu başarabilirsiniz ve bu durumda daha da fazla eğitim verisi toplayarak internette karşılaşma olasılığınız yüksek olan yaygın durumların daha benzersiz varyasyonlarını yakalama şansınızı artırabilirsiniz. Gelecekteki bir codelab'de, modelinizi işaretlendiğinde canlı verilerle nasıl sürekli olarak iyileştirebileceğinizi göstereceğiz.

6. Tebrikler!

Tebrikler. Mevcut bir makine öğrenimi modelini, bulduğunuz uç durumlara uygun durumlar için çalışmak üzere kendisini güncelleyecek şekilde yeniden eğitmeyi başardınız ve bu değişiklikleri gerçek dünyaya ait bir uygulama için 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ç durumlar bulundu
  2. Model Oluşturucu modelini, keşfettiğiniz uç durumları dikkate alacak şekilde yeniden eğitti
  3. Eğitilen yeni model TensorFlow.js biçimine aktarıldı
  4. Web uygulamanız, yeni dosyaları kullanacak şekilde güncellendi

Sırada ne var?

Dolayısıyla bu güncelleme sorunsuz çalışıyor ancak tüm web uygulamalarında olduğu gibi zaman içinde değişiklikler yapılacak. Her seferinde manuel olarak işlem yapmak zorunda kalmamak yerine, uygulamanın zaman içinde sürekli olarak gelişmesi çok daha iyi olurdu. Yanlış sınıflandırılmış olarak işaretlenen 100 yeni yorum gibi, 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ı takın ve bunu otomatik olarak yapmak için bir ardışık düzenin nasıl oluşturulacağını ortaya çıkarabilirsiniz. Henüz yapmadıysanız merak etmeyin. Serinin bu konuda yardımcı olacak bir sonraki codelab'ini kaçırmayın.

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

Bugün öğrendiklerinizi diğer yaratıcı kullanım alanlarına da kolayca genişletebilirsiniz. Ayrıca, kalıpların dışına çıkarak fikir edinmenizi ve saldırıya devam etmenizi öneririz.

Projenizin TensorFlow blogunda ve hatta gelecekteki etkinliklerde yer alması için bizi #MadeWithTFJS hashtag'iyle sosyal medyada etiketlemeyi unutmayın. Neler ürettiğinizi görmekten memnuniyet duyarız.

Ayrıntılı bilgi için diğer TensorFlow.js codelab'leri

Göz atılabilecek web siteleri