Veri bilimi alanında çalışırken, uzun bir eğitim, ince ayar ve iyileştirme döngüsünü tamamladıktan sonra genellikle kendinizi yeni bir zorlukla karşı karşıya bulursunuz. İyi performansa sahip ve ihtiyaçlarınızı karşılayan bir makine öğrenimi modeli oluşturduğunuz için tebrikler. Şimdi karşı karşıya olduğunuz zorluk, bu güzel teknolojiyi hedeflenen kullanıcılara nasıl sunabileceğinizdir? Ya da belki sonucunuzu şirketinizdeki paydaşlara etkili bir şekilde nasıl iletebilirsiniz? Veya daha iyi bir işbirliği için model sonuçlarınızı iş arkadaşlarınızla etkili bir şekilde nasıl paylaşabilirsiniz?
Modelleri oluşturmak için gereken olağan becerilerin dışındaki teknolojileri ve teknikleri kullanacağımız için makine öğrenimini uygulamak bazen zor olabilir.
Bu yazıda makine öğrenimi modellerini yalnızca python kullanarak dağıtmanın bir yolunu keşfedeceğiz. Bu arada bir makine çevirisi modeli ve bir web sayfası oluşturacağız.
İşte göreceğimiz adımlar:
-
Huggingface makine çevirisi modellerini kullanma.
-
Örs'ü keşfetmek ve modelimiz için bir web kullanıcı arayüzü oluşturmak.
-
Arka uç ile ön ucu birbirine bağlamak ve işimizi dünyaya sunmak!
Makine Çevirisi modelini oluşturun
Huggingface, "iyi makine öğrenimini demokratikleştirmek" için çalışan bir yapay zeka topluluğudur. Bu girişim kapsamında, farklı makine öğrenimi görevleri konusunda eğitimli birçok model bulabilirsiniz: görüntü segmentasyonu, metinden konuşmaya, metin oluşturma… ve ayrıca makine çevirisi!
Makine çevirisi, iki dil arasında bir yazılım parçası tarafından gerçekleştirilen bir çeviri görevidir; bizim durumumuzda, transformatörlerle oluşturulmuş bir makine öğrenimi modelidir.
Transformatör dikkati temel alan derin bir öğrenme mimarisidir. Hadi makinenizde çalıştıralım!
MT modelini indirmek ve çeviri gerçekleştirmek için bir python kütüphanesi olan transformers kullanacağız.
pip install torch
pip install transformers
Gerekli paketleri kurduktan sonra aşağıdaki modülleri içe aktarın:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Bir cümleyi Almancadan İngilizceye çeviren bir model elde edelim. Modelin adına ihtiyacımız var:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Şimdi aşağıdaki satırları kullanarak eğitilmiş modeli ve tokenizer’ı içe aktaralım:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
İndirme boyutu yaklaşık 300 MB'tır, bitirdikten sonra aşağıdakileri kullanarak modeli yerel bir dizinde saklayabilirsiniz:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Modeli yapalım:
text="ich habe keine ahnung"
gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
print(words[0])
Artık cümlenin İngilizce çevirisini "words[0]" içinde saklamış olmalısınız.
Anvil'i keşfedin ve bir web kullanıcı arayüzü oluşturun
Anvil, yalnızca python kodunu kullanarak web uygulamaları oluşturmanıza olanak tanıyan bir çerçeve ve bir dizi çözümdür. Web kullanıcı arayüzü oluşturmak için bir sürükle ve bırak düzenleyicisine sahiptir ve yerel makinenizdeki kodu, oluşturduğunuz kullanıcı arayüzüne bağlamanıza ve paylaşabileceğiniz bir bağlantı vererek uygulamanızı barındırmanıza olanak tanır.
O halde buradan bir uygulama oluşturmaya başlayalım. Boş uygulamayı ve ardından malzeme tasarımını seçin.
Bunun gibi bir şey görmelisiniz:
Şimdi editörü kullanmanız ve aşağıdakine benzer bir şey oluşturmanız konusunda size güveneceğim:
Bu basit kullanıcı arayüzünde kaynak ve hedef dilleri seçmek için iki Açılır Menüye sahibiz. Ayrıca kaynak metni girmek için bir TextBox'ımız ve çevrilmiş metni görüntülemek için bir richText bileşenimiz var. Ayrıca çeviri görevini başlatmak için bir Düğme de görebilirsiniz.
Aşağıda göreceğiniz kod parçacıklarıyla senkronizasyon yapabilmek için bileşenlere aynı ID’leri verin. Aşağıda bir bileşenin kimliğini nerede ayarlayabileceğinize ilişkin bir örnek bulabilirsiniz:
Kullandığımız kimlikler:
<tablo sınırı = "2">
Bileşen
Kimlik
Kaynak dil Açılır Penceresi source_lang Hedef dil Açılır Penceresi dest_lang Kaynak dil TextBox source_text Çevrilmiş metin Zengin Metin translated_textTıklama işlevi
Çeviriyi başlatmak için kullanılan bir düğme ekledik. Editörünüzden düğmeye tıklayın ve ardından özellikler panelinde aşağı kaydırın. Alt kısımda bir etkinlik bölümü göreceksiniz. "Tıklama"nın yanındaki metin alanına "çevir" yazın ve ardından bu metin bölgesinin sağındaki oka tıklayın.
Bu sizi otomatik olarak oluşturulan bazı python kodlarını göreceğiniz kod görünümüne götürecektir.
Anvil'in otomatik olarak çeviri adı verilen bir işlevi eklediğini göreceksiniz. Kullanıcı arayüzümüzdeki düğmeye her tıklandığında çağrılacaktır.
İşte fonksiyonun nasıl görünmesi gerektiği:
def translate(self, **event_args):
"""This method is called when the button is clicked"""
src_lang=self.source_lang.selected_value #get the selected source language
dest_lang=self.dest_lang.selected_value #get the selected destination language
text=self.source_text.text #get the text written in source language
#call the server function
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
#write the translated text to the UI
self.translated_text.content=translated_text
Bu işlev 3 ana görevi yerine getirir:
-
Kullanıcı Arayüzünden Bilgi Alın
-
Sunucu fonksiyonu “translation”ı kullanarak bilgileri arka uçumuza gönderin (bunu bir sonraki bölümde açıklayacağız)
-
Çevrilen metni kullanıcı arayüzüne gönderin.
Sunucu işlevi
Bu kod satırına odaklanalım:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Backend kodumuzda tanımlayacağımız “translation” isimli sunucu fonksiyonunu yerel makinede çağırmak için anvil.server.call kullanıyoruz.
Bu işlev, web kullanıcı arayüzü ile makine çeviri modelimizde çalışacak arka uç kodu arasında bir bağlantı görevi görecektir.
Fark ettiğiniz gibi bu fonksiyonun parametrelerini de 'anvil.server.call' fonksiyonuna gönderiyoruz.
MT modelimizi dağıtın
İlk önce örsü yerleştirelim
pip install anvil-uplink
Artık web arayüzümüzü örs düzenleyicide oluşturduk ve makine çeviri modelimizi çalıştırmak ve çeviri yapmak için temel kod bloklarımız var.
Bir sonraki adım, önceki bölümde tartıştığımız sunucu fonksiyonunu tanımlamaktır.
İşte fonksiyonun kodu:
@anvil.server.callable
def translation(text,src,dest):
lang_code={"English":"en",
"German":"de",
"French":"fr",
"Spanish":"es"}
model=MarianMTModel.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest])
tok=MarianTokenizer.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest]+"/tok")
gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
return words[0]
İşlev, ön uçtan gönderilen 3 parametreyi alacak, kaynak ve hedef dilleri ilgili dil kodlarına dönüştürecek ve ardından modelleri yükleyerek çeviriyi hesaplayacak ve sonucu döndürecektir.
Bu işlevi örs'e sunucu işlevi olarak bildirmenin yolu dekoratörü kullanmaktır.
'@anvil.server.callable'.
Jupyter notebook'ta çalıştırabileceğimiz backend kodunu anvil uygulamamıza bağlamak için yapmamız gereken son bir adım var.
Anvil çevrimiçi düzenleyicisine gidin, dişli simgesine tıklayın ve ardından “Uplink…” seçeneğine tıklayın.
Aşağıdaki ekrana bakın
Bir açılır pencerenin göründüğünü göreceksiniz, ardından kopyaladığınız bağlantı kodunu almak için "Bu uygulama için sunucu yukarı bağlantısını etkinleştir" seçeneğine tıklayın.
Kodu aşağıdaki kod satırına yapıştırırsınız:
anvil.server.connect("code here")
Bu satır, yerel kod komut dosyanızı veya jupyter not defterinizi, sunucu işlevi olarak kayıtlı 'çeviri' işleviyle örs uygulamasına bağlayan bir sunucuyu başlatacaktır.
Son adım
Bu noktaya kadar arka uç sunucunuzun, makine çeviri modelini yükleyen ve ön uçtan gönderilen parametreleri dikkate alarak çeviriyi yapan bir sunucu fonksiyonu ile çalışmasını sağlarsınız. Bu şekil şu ana kadar birlikte hayata geçirdiklerimizi özetlemektedir.
Son adım, örs düzenleyicinin üst orta kısmındaki çalıştır düğmesine tıklayarak uygulamayı çalıştırmaktır.
Uygulamayı çalıştırdıktan sonra sağ üst köşede, uygulamaya erişmek ve çevirinizi yapmak için paylaşabileceğiniz bir bağlantı verecek olan "bu uygulamayı yayınla" düğmesini göreceksiniz!
Çözüm
Bu makaleyi takip ederek bir MT modelini dağıtabildiniz ve onu kullanmak için bir web arayüzü oluşturabildiniz.
Bir modelin örs kullanarak etkili bir şekilde nasıl konuşlandırılacağına dair hala keşfedilecek çok şey var, ancak artık dağıtım yolculuğunuza başlamak için temel bilgilere sahipsiniz ve çok daha fazlasını yapmak için Python'daki önceki bilgilerinizin potansiyelini artırabilirsiniz!
Ücretsiz Atölyelerimizden Birine Gelin
Uyarlanabilir bir müfredatı temel alan ve sektör uzmanlarının rehberliğinde olan ücretsiz atölyelerimizle veri bilimci olarak kariyerinize başlayın.