데이터 과학 분야에서 일할 때 일반적으로 긴 훈련, 미세 조정 및 개선 과정을 마친 후 새로운 도전에 직면하게 됩니다. 성능이 뛰어나고 요구 사항에 맞는 ML 모델을 구축하신 것을 축하합니다. 이제 당면한 과제는 이 멋진 기술을 의도한 사용자에게 어떻게 전달할 수 있는가 하는 것입니다. 아니면 회사의 이해관계자들과 결과를 어떻게 효과적으로 전달할 수 있을까요? 아니면 더 나은 협업을 위해 어떻게 모델 결과를 동료와 효과적으로 공유할 수 있습니까?
모델을 구축하는 데 필요한 일반적인 기술 세트에서 벗어난 기술과 기법을 사용하게 되므로 기계 학습을 배포하는 것이 때로는 어려울 수 있습니다.
이 기사에서는 Python만을 사용하여 기계 학습 모델을 배포하는 방법을 알아보겠습니다. 그리고 그 과정에서 우리는 기계 번역 모델과 웹 페이지를 구축할 것입니다.
따라서 우리가 보게 될 단계는 다음과 같습니다.
-
Huggingface 기계 번역 모델을 사용합니다.
-
Anvil을 발견하고 모델용 웹 UI를 구축합니다.
-
백엔드와 프론트엔드를 연결하고 세상에 봉사하는 것이 우리의 일입니다!
기계 번역 모델 구축
Huggingface는 '좋은 머신러닝의 민주화'를 위해 노력하는 AI 커뮤니티입니다. 이 이니셔티브에 따라 이미지 분할, 텍스트 음성 변환, 텍스트 생성 등 다양한 기계 학습 작업에 대해 훈련된 많은 모델을 찾을 수 있으며 기계 번역도 가능합니다!
기계 번역은 단순히 소프트웨어(우리의 경우 변환기로 구축된 기계 학습 모델)에 의해 수행되는 두 언어 간의 번역 작업입니다.
변환기는 주의를 기반으로 하는 딥 러닝 아키텍처입니다. 컴퓨터에서 실행해 봅시다!
Python 라이브러리인 transformers를 사용하여 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)
다운로드 크기는 약 300MB입니다. 완료 후 다음을 사용하여 로컬 디렉터리에 모델을 저장할 수 있습니다.
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을 발견하고 웹 UI 구축
Anvil은 Python 코드만 사용하여 웹 애플리케이션을 구축할 수 있는 프레임워크이자 솔루션 스택입니다. 여기에는 웹 UI를 구축하기 위한 드래그 앤 드롭 편집기가 있으며 공유할 수 있는 링크를 제공하여 로컬 컴퓨터의 코드를 구축한 UI에 연결하고 애플리케이션을 호스팅할 수 있습니다.
그럼 여기에서 애플리케이션을 만드는 것부터 시작해 보겠습니다. 빈 애플리케이션을 선택한 다음 머티리얼 디자인을 선택하세요.
다음과 같은 내용이 표시됩니다.
이제 편집기를 사용하여 다음과 유사한 것을 빌드해 보겠습니다.
이 간단한 UI에는 소스 및 대상 언어를 선택하기 위한 두 개의 드롭다운이 있습니다. 또한 소스 텍스트를 입력하는 TextBox와 번역된 텍스트를 표시하는 richText 구성 요소도 있습니다. 번역 작업을 시작하는 버튼도 볼 수 있습니다.
아래에 표시되는 코드 조각과 동기화하려면 구성 요소에 동일한 ID를 제공하십시오. 아래에서는 구성 요소의 ID를 설정할 수 있는 위치의 예를 찾을 수 있습니다.
우리가 사용하는 ID는 다음과 같습니다.
<테이블 테두리="2">
<머리>
<일>
구성요소
<일>
ID
<본체>
소스 언어 드롭다운 source_lang 대상 언어 드롭다운 dest_lang 소스 언어 TextBox source_text 번역된 텍스트 RichText translated_text온클릭 기능
번역을 시작하는 데 사용되는 버튼을 추가했습니다. 편집기에서 버튼을 클릭한 다음 속성 패널에서 아래로 스크롤합니다. 하단에 이벤트 섹션이 표시됩니다. "클릭" 옆의 텍스트 영역에 "번역"을 입력한 다음 이 텍스트 영역 오른쪽에 있는 화살표를 클릭하세요.
그러면 자동 생성된 Python 코드를 볼 수 있는 코드 보기로 이동됩니다.
모루에 번역이라는 기능이 자동으로 추가된 것을 볼 수 있습니다. UI의 버튼을 클릭할 때마다 호출됩니다.
함수의 모양은 다음과 같습니다.
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가지 주요 작업을 수행합니다.
-
UI에서 정보 가져오기
-
서버 기능 "번역"을 사용하여 백엔드로 정보를 보냅니다. (다음 섹션에서 설명하겠습니다)
-
번역된 텍스트를 UI로 보냅니다.
서버 기능
다음 코드 줄에 집중해 보겠습니다.
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
우리는 anvil.server.call을 사용하여 로컬 머신의 백엔드 코드에서 정의할 'translation'이라는 서버 함수를 호출합니다.
이 기능은 웹 UI와 기계 번역 모델에서 실행될 백엔드 코드 간의 연결 역할을 합니다.
아시다시피 우리는 anvil.server.call
함수에서 이 함수의 매개변수도 보냅니다.
MT 모델 배포
먼저 앤빌을 설치하자
pip install anvil-uplink
이제 앤빌 편집기에 웹 인터페이스를 구축했으며 기계 번역 모델을 실행하고 번역을 수행하기 위한 기본 코드 블록이 있습니다.
다음 단계는 이전 섹션에서 논의한 서버 기능을 정의하는 것입니다.
함수의 코드는 다음과 같습니다.
@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.server.callable
.
jupyter 노트북에서 실행할 수 있는 백엔드 코드를 앤빌 애플리케이션에 연결하기 위한 마지막 단계가 하나 있습니다.
앤빌 온라인 편집기로 이동하여 기어 아이콘을 클릭한 다음 "업링크…"를 클릭합니다.
아래 화면을 참고하세요
팝업이 나타나면 "이 앱에 대해 서버 업링크 활성화"를 클릭하여 복사한 연결 코드를 가져옵니다.
다음 코드 줄에 코드를 붙여넣습니다.
anvil.server.connect("code here")
이 줄은 서버 기능으로 등록된 translation
기능을 사용하여 로컬 코드 스크립트 또는 jupyter 노트북을 앤빌 애플리케이션에 연결하는 서버를 시작합니다.
마지막 단계
지금까지 백엔드 서버는 기계 번역 모델을 로드하고 프런트엔드에서 전송된 매개변수를 고려한 후 번역을 수행하는 서버 기능을 실행하고 있습니다. 이 그림에는 지금까지 우리가 함께 구현한 내용이 요약되어 있습니다.
마지막 단계는 앤빌 편집기 상단 중앙에 있는 실행 버튼을 클릭하여 애플리케이션을 실행하는 것입니다.
애플리케이션을 실행한 후 오른쪽 상단에 "이 앱 게시" 버튼이 표시됩니다. 이 버튼을 누르면 애플리케이션에 액세스하고 번역을 수행하기 위해 공유할 수 있는 링크가 제공됩니다!
결론
이 문서를 따라가면 MT 모델을 배포하고 이를 사용할 웹 인터페이스를 구축할 수 있었습니다.
앤빌을 사용하여 모델을 효과적으로 배포하는 방법에 대해 아직 발견해야 할 것이 많지만 이제 배포 여정을 시작하기 위한 기본 사항을 갖추고 Python에 대한 사전 지식을 활용하여 훨씬 더 많은 작업을 수행할 수 있습니다!
무료 워크숍에 오세요
적응형 커리큘럼을 기반으로 업계 전문가가 안내하는 무료 워크숍을 통해 데이터 과학자로서의 경력을 시작해 보세요.