カタロニアのアルバート(Lite Bert)、Googleは言語表現の自己教師の学習を引き受けています。
InRiaのオスカーデータセットのカタロニアのサブセットから抽出された19.557.475文のペア(7億2900万のユニークな単語を含む)のコーパスで訓練されています。モデルを評価するには、833.259文のペアの検証セットを使用します。
ここで元のアルバートペーパーを読むことができます。
Huggingfaceのモデルハブページで利用できます
| モデル | アーチ。 | トレーニングデータ | それで遊んでください | それを視覚化します |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | 小さな(覆われている) | オスカー(4.3 GBのテキスト) | モデルハブのカード | Exbertで視覚化します |
codegram / calbert-base-uncased | ベース(覆われている) | オスカー(4.3 GBのテキスト) | モデルハブのカード | Exbertで視覚化します |
transformersライブラリが必要です。クローンまたはインストールするものは他にありません。
使用するモデルバージョン( tiny 、またはbase )を選択するには、小さなモデルはそれほど強力ではありませんが、ニンブラーであり、リソースが発生しないことを検討します。
pip install transformers from transformers import AutoModel , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "codegram/calbert-base-uncased" )
model = AutoModel . from_pretrained ( "codegram/calbert-base-uncased" )
model . eval () # disable dropout今、あなたができる2つの主要なユースケースに。
これは最も単純なユースケースですが、最も有用ではありません。それでも、ここにあります!マスクしたい単語が何であれ、特別なトークン[MASK]を使用してそれを示します。モデルは、マスクされた単語の最も可能性の高い候補を出力します。
from transformers import pipeline
calbert_fill_mask = pipeline ( "fill-mask" , model = "codegram/calbert-base-uncased" , tokenizer = "codegram/calbert-base-uncased" )
results = calbert_fill_mask ( "M'agrada [MASK] això" )
# results
# [{'sequence': "[CLS] m'agrada molt aixo[SEP]", 'score': 0.614592969417572, 'token': 61},
# {'sequence': "[CLS] m'agrada moltíssim aixo[SEP]", 'score': 0.06058056280016899, 'token': 4867},
# {'sequence': "[CLS] m'agrada més aixo[SEP]", 'score': 0.017195818945765495, 'token': 43},
# {'sequence': "[CLS] m'agrada llegir aixo[SEP]", 'score': 0.016321714967489243, 'token': 684},
# {'sequence': "[CLS] m'agrada escriure aixo[SEP]", 'score': 0.012185849249362946, 'token': 1306}]抽出された特徴ベクトルを使用して、たとえばElasticSearchの密なベクトルとしてドキュメントをインデックス作成し、類似性検索を実行できます。
別のユースケースは、自然言語の理解です。これらのベクトルを、分類子などの他の下流モデルへの入力として使用できるドキュメント/文の抽象表現として使用します。
文またはドキュメントからベクトルを抽出する方法は次のとおりです。
import torch
# Tokenize in sub-words with SentencePiece
tokenized_sentence = tokenizer . tokenize ( "M'és una mica igual" )
# ['▁m', "'", 'es', '▁una', '▁mica', '▁igual']
# 1-hot encode and add special starting and end tokens
encoded_sentence = tokenizer . encode ( tokenized_sentence )
# [2, 109, 7, 71, 36, 371, 1103, 3]
# NB: Can be done in one step : tokenize.encode("M'és una mica igual")
# Feed tokens to Calbert as a torch tensor (batch dim 1)
encoded_sentence = torch . tensor ( encoded_sentence ). unsqueeze ( 0 )
embeddings , _ = model ( encoded_sentence )
embeddings . size ()
# torch.Size([1, 8, 768])
embeddings . detach ()
# tensor([[[-0.0261, 0.1166, -0.1075, ..., -0.0368, 0.0193, 0.0017],
# [ 0.1289, -0.2252, 0.9881, ..., -0.1353, 0.3534, 0.0734],
# [-0.0328, -1.2364, 0.9466, ..., 0.3455, 0.7010, -0.2085],
# ...,
# [ 0.0397, -1.0228, -0.2239, ..., 0.2932, 0.1248, 0.0813],
# [-0.0261, 0.1165, -0.1074, ..., -0.0368, 0.0193, 0.0017],
# [-0.1934, -0.2357, -0.2554, ..., 0.1831, 0.6085, 0.1421]]]) これは、Codegramで行う応用研究の一部です(時間とコンピューティングに感謝することになります!)。
これは、Faceの強力なトランスとトークンザーライブラリを抱きしめることなく、構築するための大量の痛みだったでしょう。 NLPを実際に仕事をしてくれてありがとう!
また、そもそもアルバートを作成し、オープンソーシングしてくれたGoogle Researchに感謝します。
アルバートは言語モデル、つまり、自然言語の文などの特定の構造のシーケンスを学習できるニューラルネットワークです(ただし、自然言語だけでなく!)。
しかし、彼らはどのように言語を学びますか?さまざまな言語モデルには、さまざまな口実のタスク、すなわち、言語の仕組みを学ぶことができるようにする課題があります。アイデアは、この1つのタスクを繰り返し得るほど良いことをするためには、言語の文法、さらにはその意味論とスタイルさえ間接的に学ばなければならないということです。
従来の(因果関係としても知られています)言語モデルは、通常、次の単語を予測するタスクで訓練されています。
しかし、アルバートはMasked Language Modelsと呼ばれる別の家族です。この家族では、彼らが学ばなければならない口実のタスクは似ていますが、常に最後の単語をシーケンスで予測する代わりに、文のいくつかの単語は、このようにランダムに空白(またはマスクされた)に変わります。
このタスクはもう少し難しく、さらに重要なことには、空白を取り巻くコンテキストをはるかに良く理解する必要があります。
結局のところ、言語モデルがこのかなり無意味な口実のタスクで本当に優れていると、より興味深いタスクのために簡単に再利用できます。
言語が文法とセマンティクスを学ぶと、たとえば、文書の非常に優れた分類器になる可能性があります。
その後、ツイートまたはドキュメントをカテゴリに分類する(または感情や毒性を特定する)に教えると、混乱するキャラクターの束がなくなるだけでなく、より抽象的なレベルでドキュメントを「読む」ことができます。 (空気の引用に注意してください、これは魔法ではありませんが、おそらく最も近いものです。)
カタロニア語には言語モデルがないからです!そして、処理されるカタロニアのテキストがたくさんあります。 (カタロニアで)。
依存関係管理には、詩(そしてもちろんDocker)を使用します。
pip install -U poetry
poetry install
poetry shellモデルをトレーニングするための制作画像はdocker/下にあり、 codegram/calbertと呼ばれます。すべての最新の依存関係が含まれていますが、コードはありません - DeepKitはすべての実験でコードを出荷します(DeepKitの詳細をご覧ください)。
すべての構成はconfigの下で存在します。そこで、トレーニング、トークン化、すべてに関連するパラメーターを制御し、トレーニングするモデルのバージョンを選択することさえできます。
Hydra構成であるため、すべての構成は過度に配置されます。ドキュメントを確認してください。
データセットの小さなサブセットはdist/dataの下に存在しているため、小さなモデルをトレーニングして地元で簡単に実験することができます。
完全なデータセットをダウンロードし、トレーニング /検証で自動的に分割するには、このコマンドを実行するだけです。
python -m calbert download_data --out-dir dataset前処理されたトークンザーはdist/tokenizer-{cased,uncased}にあります。彼らは完全なトレーニングセットでのみトレーニングされています。
トークン剤を再訓練したい場合(デフォルトでは覆われていません):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerケースのあるものを訓練するには、適切なHydra構成をオーバーライドするだけです。
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=FalseDeepKitを使用して、実験を実行して追跡します。ローカルで実行する場合は、選択したプラットフォームのために無料でダウンロードするか、ドキュメントをチェックして無料のコミュニティサーバーに対して実行してください。
すべてが機能することを確認するには、実際のDocker画像をDeepkitでテストモデルをトレーニングしましょう。
deepkit run test.deepkit.ymlデフォルトでは、CPUを使用して、ローカルディープキットインスタンスでトレーニングします。ドキュメントを読んで、実行をカスタマイズする方法を学びます。
GPUを備えた少なくとも1つのマシンを使用して、ローカルディープキットのクラスターを構成します。
deepkit run --cluster訓練されたモデルを取得したら、それをエクスポートして、ハグFace Transformers標準モデルとして使用できます。
たとえば、 base-uncasedモデルをトレーニングし、エクスポートしたいと思います。
DeepKit実行の出力からexportフォルダーをダウンロードして実行します。
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test