データ サイエンスの分野で働いていると、通常、トレーニング、微調整、改善の長いループを終えた後に、新たな課題に直面することになります。優れたパフォーマンスを備え、ニーズに応える ML モデルの構築が完了しました。おめでとうございます。さて、あなたが直面している課題は、この素晴らしいテクノロジーを対象ユーザーにどのように提供できるかということです。あるいは、結果を社内の関係者に効果的に伝えるにはどうすればよいでしょうか?あるいは、コラボレーションを向上させるためにモデルの結果を同僚と効果的に共有するにはどうすればよいでしょうか?
機械学習の導入は、モデルの構築に必要な通常のスキルセットとは異なるテクノロジーやテクニックを使用するため、難しい場合があります。
この記事では、Python のみを使用して機械学習モデルをデプロイする方法を発見します。その過程で、機械翻訳モデルと Web ページを構築します。
ここで説明する手順は次のとおりです。
-
Huggingface 機械翻訳モデルを使用します。
-
Anvil を発見し、モデルの Web UI を構築します。
-
バックエンドとフロントエンドを接続し、私たちの仕事を世界に提供します!
機械翻訳モデルを構築する
Huggingface は、「優れた機械学習の民主化」に取り組んでいる AI コミュニティです。この取り組みでは、さまざまな機械学習タスク: 画像セグメンテーション、テキスト読み上げ、テキスト生成など、トレーニングされた多くのモデルを見つけることができます。さらに機械翻訳も可能です。
機械翻訳は、ソフトウェア (この場合はトランスフォーマーで構築された機械学習モデル) によって実行される 2 つの言語間の翻訳タスクにすぎません。
トランスフォーマーは、注意に基づく深層学習アーキテクチャです。あなたのマシンで実行してみましょう!
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)
ダウンロード サイズは約 300 MB です。完了後、次のコマンドを使用してモデルをローカル ディレクトリに保存できます。
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 を発見して Web UI を構築する
Anvil は、Python コードのみを使用して Web アプリケーションを構築できるフレームワークおよびソリューションのスタックです。 Web UI を構築するためのドラッグ アンド ドロップ エディターがあり、ローカル マシンのコードを構築した UI に接続し、共有できるリンクを提供することでアプリケーションをホストできます。
それでは、ここ からアプリケーションを作成してみましょう。空白のアプリケーションを選択し、次にマテリアル デザインを選択します。
次のようなものが表示されるはずです。
ここで、エディターを使用して、次のようなものを構築していただければ幸いです。
このシンプルな UI には、ソース言語と宛先言語を選択するための 2 つのドロップダウンがあります。また、ソーステキストを入力するための TextBox と、翻訳されたテキストを表示するための richText コンポーネントもあります。翻訳タスクを開始するボタンも表示されます。
以下に示すコード スニペットと同期するには、コンポーネントに同じ ID を与えます。以下に、コンポーネントの ID を設定できる例を示します。
私たちが使用しているIDは次のとおりです。
<テーブルボーダー="2">
<頭>
<番目>
コンポーネント
<番目>
ID
<本体>
ソース言語ドロップダウン source_lang リンク先言語のドロップダウン dest_lang ソース言語のテキストボックス source_text 翻訳されたテキストのリッチテキスト transrated_text</テーブル>
オンクリック関数
翻訳を開始するためのボタンを追加しました。エディターでボタンをクリックし、プロパティ パネルを下にスクロールします。下部にイベントセクションが表示されます。 「クリック」の隣のテキストゾーンに「translate」と入力し、このテキストゾーンの右側にある矢印をクリックします。
これにより、コード ビューが表示され、自動生成された Python コードが表示されます。
Anvil により、translate という機能が自動的に追加されていることがわかります。 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から情報を取得する
-
サーバー機能「translation」を使用してバックエンドに情報を送信します(次のセクションで説明します)。
-
翻訳されたテキストを UI に送信します。
サーバー機能
このコード行に注目してみましょう。
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
anvil.server.call を使用して、ローカル マシンのバックエンド コードで定義する「translation」というサーバー関数を呼び出します。
この関数は、Web UI と機械翻訳モデルで実行されるバックエンド コードの間の接続として機能します。
お気づきのとおり、この関数のパラメータも関数 anvil.server.call
で送信します。
MT モデルをデプロイする
まずはアンビルを設置しましょう
pip install anvil-uplink
これで、Anvil エディターで Web インターフェイスが構築され、機械翻訳モデルを実行して翻訳を行うための基本的なコード ブロックができました。
次のステップでは、前のセクションで説明したサーバー関数を定義します。
関数のコードは次のとおりです。
@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 アプリケーションに接続するための最後のステップが残っています。
Anvil オンライン エディターに移動し、歯車アイコンをクリックして、[アップリンク…] をクリックします。
以下の画面を参照してください
ポップアップが表示されるので、「このアプリのサーバー アップリンクを有効にする」をクリックして、コピーした接続コードを取得します。
コードを次のコード行に貼り付けます。
anvil.server.connect("code here")
この行は、サーバー関数として登録された関数「translation」を使用して、ローカル コード スクリプトまたは jupyter ノートブックを Anvil アプリケーションに接続するサーバーを起動します。
## 最終段階
この時点まで、バックエンド サーバーは、機械翻訳モデルをロードし、フロントエンドから送信されたパラメーターを考慮した後で翻訳を実行するサーバー関数で実行されています。この図は、これまでに一緒に実装した内容をまとめたものです。
最後のステップでは、アンビル エディターの上部中央にある実行ボタンをクリックしてアプリケーションを実行します。
アプリケーションを実行すると、右上隅に「このアプリを公開」ボタンが表示されます。このボタンを使用すると、アプリケーションにアクセスして翻訳を行うために共有できるリンクが表示されます。
## 結論
この記事に従うことで、MT モデルをデプロイし、それを使用するための Web インターフェイスを構築できるようになります。
Anvil を使用してモデルを効果的にデプロイする方法については、まだ発見すべきことがたくさんありますが、これでデプロイ作業を開始するための基本が得られ、Python の予備知識を活用してさらに多くのことができるようになりました。
無料ワークショップに参加してみませんか
無料ワークショップ でデータ サイエンティストとしてのキャリアをスタートしましょう。ワークショップは適応可能なカリキュラムに基づいており、業界の専門家が指導します。