Працуючы ў галіне навукі аб дадзеных, вы звычайна сутыкаецеся з новай праблемай пасля завяршэння доўгага цыкла навучання, тонкай налады і паляпшэння. Віншуем са стварэннем мадэлі ML, якая мае добрую прадукцыйнасць і адпавядае вашым патрэбам. Цяпер перад вамі стаіць задача: як даставіць гэтую выдатную тэхналогію мэтавым карыстальнікам? Ці, можа быць, як вы можаце эфектыўна данесці свой вынік да зацікаўленых бакоў у вашай кампаніі? Ці нават як вы можаце эфектыўна падзяліцца вынікамі сваёй мадэлі з калегамі для лепшага супрацоўніцтва?
Разгортванне машыннага навучання часам можа быць складаным, паколькі мы будзем выкарыстоўваць тэхналогіі і метады, якія не ўваходзяць у звычайны набор навыкаў, неабходных для стварэння мадэляў.
У гэтым артыкуле мы збіраемся адкрыць для сябе спосаб разгортвання мадэляў машыннага навучання, выкарыстоўваючы толькі Python. І на гэтым шляху мы створым мадэль машыннага перакладу і вэб-старонку.
Такім чынам, вось крокі, якія мы збіраемся ўбачыць:
-
Выкарыстанне мадэляў машыннага перакладу Huggingface.
-
Адкрыццё Anvil і стварэнне вэб-інтэрфейсу для нашай мадэлі.
-
Злучаючы бэкэнд і інтэрфейс і абслугоўваючы свет сваёй працай!
Стварыце мадэль машыннага перакладу
Huggingface - гэта супольнасць штучнага інтэлекту, якая працуе над «дэмакратызацыяй добрага машыннага навучання». У рамках гэтай ініцыятывы вы можаце знайсці шмат навучаных мадэляў па розным задачам машыннага навучання: сегментацыя выявы, пераўтварэнне тэксту ў маўленне, стварэнне тэксту… а таксама машынны пераклад!
Машынны пераклад - гэта проста задача перакладу паміж дзвюма мовамі, якая выконваецца часткай праграмнага забеспячэння, у нашым выпадку, мадэллю машыннага навучання, пабудаванай з трансфарматарамі.
Трансфарматар - гэта архітэктура глыбокага навучання, заснаваная на ўвазе. Давайце запусцім яго на вашай машыне!
Мы будзем выкарыстоўваць transformers, бібліятэку Python для загрузкі мадэлі MT і выканання перакладу.
pip install torch
pip install transformers
Пасля ўстаноўкі неабходных пакетаў імпартуйце наступныя модулі:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Давайце атрымаем мадэль, якая перакладае сказ з нямецкай на англійскую. Нам патрэбна назва мадэлі:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Зараз давайце імпартуем навучаную мадэль і токенизатор з дапамогай наступных радкоў:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
Памер загрузкі складае каля 300 МБ, пасля завяршэння вы можаце захаваць мадэль у лакальным каталогу, выкарыстоўваючы наступнае:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Давайце мадэль:
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])
Цяпер вы павінны мець ангельскі пераклад прапановы, захаваны ў words[0]
.
Адкрыйце для сябе Anvil і стварыце вэб-інтэрфейс
Anvil - гэта фрэймворк і набор рашэнняў, якія дазваляюць ствараць вэб-праграмы толькі з дапамогай кода Python. Ён мае рэдактар перацягвання для стварэння вэб-інтэрфейсу і дазваляе падключаць код з вашай лакальнай машыны да карыстацкага інтэрфейсу, які вы ствараеце і размяшчаеце сваё прыкладанне, даючы вам спасылку, якой вы можаце падзяліцца.
Такім чынам, давайце пачнем са стварэння прыкладання адсюль. Выберыце пустое прыкладанне, а потым матэрыяльны дызайн.
Вы павінны ўбачыць нешта накшталт гэтага:
Цяпер я спадзяюся, што вы скарыстаецеся рэдактарам і пабудуеце нешта падобнае да наступнага:
У гэтым простым карыстальніцкім інтэрфейсе ў нас ёсць два выпадаючых меню для выбару зыходнай мовы і мовы прызначэння. У нас таксама ёсць TextBox для ўводу зыходнага тэксту і кампанент richText для адлюстравання перакладзенага тэксту. Вы таксама можаце ўбачыць кнопку для запуску задачы перакладу.
Для сінхранізацыі з фрагментамі кода, якія вы ўбачыце ніжэй, дайце аднолькавыя ідэнтыфікатары кампанентам. Ніжэй вы можаце знайсці прыклад таго, дзе можна ўсталяваць ідэнтыфікатар кампанента:
Ідэнтыфікатары, якія мы выкарыстоўваем:
<мяжа табліцы="2">
<загаловак>
<й>
Кампанент
<й>
ID
Выпадальнае меню зыходнай мовы source_lang Выпадальнае меню мовы прызначэння dest_lang Зыходная мова TextBox крынічны_тэкст Перакладзены тэкст RichText перакладзены_тэкстФункцыя Onclick
Мы дадалі кнопку, якая выкарыстоўваецца для пачатку перакладу. У вашым рэдактары націсніце на кнопку, а потым пракруціце панэль уласцівасцей уніз. Унізе вы ўбачыце раздзел падзей. У тэкставай зоне побач з «націсніце» увядзіце «перакласці», а затым націсніце на стрэлку справа ад гэтай тэкставай зоны.
Гэта прывядзе вас да прагляду кода, дзе вы ўбачыце аўтаматычна згенераваны код Python.
Вы ўбачыце, што anvil аўтаматычна дадаў функцыю пад назвай translate. Ён будзе выклікаць кожны раз, калі націскаецца кнопка ў нашым карыстальніцкім інтэрфейсе.
Вось як павінна выглядаць функцыя:
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
Гэтая функцыя выконвае 3 асноўныя задачы:
-
Атрымлівайце інфармацыю з карыстацкага інтэрфейсу
-
Адпраўце інфармацыю на наш бэкэнд з дапамогай сервернай функцыі «пераклад» (мы растлумачым гэта ў наступным раздзеле)
-
Адпраўце перакладзены тэкст у карыстацкі інтэрфейс.
Функцыя сервера
Давайце засяродзімся на гэтым радку кода:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Мы выкарыстоўваем anvil.server.call для выкліку функцыі сервера пад назвай translation
, якую мы вызначым у нашым бэкэнд-кодзе на лакальнай машыне.
Гэта функцыя будзе служыць злучэннем паміж вэб-інтэрфейсам і бэкэнд-кодам, які будзе працаваць на нашай мадэлі машыннага перакладу.
Як вы заўважылі, мы таксама адпраўляем параметры гэтай функцыі ў функцыі anvil.server.call
.
Разгортванне нашай мадэлі MT
Давайце спачатку ўсталюем кавадлу
pip install anvil-uplink
Цяпер мы стварылі вэб-інтэрфейс у рэдактары anvil і маем асноўныя блокі кода для запуску нашай мадэлі машыннага перакладу і выканання перакладу.
Наступным крокам з'яўляецца вызначэнне функцыі сервера, якую мы абмяркоўвалі ў папярэднім раздзеле.
Вось код функцыі:
@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]
Функцыя будзе прымаць 3 параметры, адпраўленыя з інтэрфейсу, пераўтвараць зыходную і мэтавую мовы ў адпаведныя моўныя коды, а затым загружаць мадэлі і вылічваць пераклад і вяртаць вынік.
Спосаб аб'явіць гэту функцыю ў anvil як функцыю сервера - выкарыстоўваць дэкаратар
@anvil.server.callable
.
У нас ёсць апошні крок, каб падключыць бэкэнд-код, які мы можам запусціць у нататніку Jupyter, да нашага прыкладання anvil.
Перайдзіце ў онлайн-рэдактар anvil, націсніце на значок шасцярэнькі, а затым націсніце «Uplink…».
Глядзіце экран ніжэй
Вы ўбачыце ўсплывальнае акно, затым націсніце «Уключыць спасылку на сервер для гэтай праграмы», каб атрымаць код злучэння, які вы капіруеце.
Вы ўстаўляеце код у наступны радок кода:
anvil.server.connect("code here")
Гэты радок запусціць сервер, які падключае ваш лакальны скрыпт кода або нататнік jupyter да прыкладання anvil з функцыяй "пераклад", зарэгістраванай у якасці функцыі сервера.
Апошні крок
Да гэтага моманту ваш бэкэнд-сервер працуе з функцыяй сервера, якая загружае мадэль машыннага перакладу і выконвае пераклад пасля ўліку параметраў, адпраўленых з інтэрфейсу. Гэтая лічба абагульняе тое, што мы разам рэалізавалі да гэтага часу.
Апошнім крокам з'яўляецца запуск прыкладання, націсканне кнопкі запуску ў верхнім цэнтры рэдактара кавадлы.
Пасля запуску праграмы вы ўбачыце ў правым верхнім куце кнопку «апублікаваць гэтую праграму», якая дасць вам спасылку, якой вы можаце падзяліцца, каб атрымаць доступ да праграмы і зрабіць свой пераклад!
Выснова
Выконваючы гэты артыкул, вы змаглі разгарнуць мадэль MT і стварыць вэб-інтэрфейс для яе выкарыстання.
Трэба яшчэ шмат даведацца аб тым, як эфектыўна разгарнуць мадэль з дапамогай кавадлы, але цяпер у вас ёсць асновы, каб пачаць свой шлях да разгортвання, і патэнцыял вашых папярэдніх ведаў у Python, каб зрабіць значна больш!
Прыходзьце на адзін з нашых бясплатных семінараў
Пачніце сваю кар'еру ў якасці навукоўца па апрацоўцы дадзеных з нашых бясплатных семінараў, якія заснаваны на адаптаванай праграме і праводзяцца экспертамі галіны.
Асвойце Машыннае навучанне з Code Labs Academy! Далучайцеся да нашага онлайн-курса навучання – даступныя гнуткія варыянты няпоўнага і поўнага працоўнага дня.