Cet article Explication sur BERT! Faisons une prédiction en utilisant le modèle japonais! Si vous suivez la rue, vous pouvez facilement découvrir BERT sur Google colaboratory.
Je me suis demandé s'il pouvait être utilisé publiquement sur un serveur bon marché au lieu de Google colaboratory, alors j'ai essayé de l'exécuter sur Sakura VPS1G (800 yens par mois).
Le fait est que le GPU qui peut être utilisé avec Google colaboratory ne peut pas être utilisé avec Sakura VPS, il est donc nécessaire d'installer la version CPU de la bibliothèque.
Sakura VPS Mémoire 1 Go, stockage SSD 50 Go, CPU 2 cœurs (800 yens par mois) Installation standard CentOS8 x86_64
Tout d'abord, en référence à l'article suivant, j'ai créé un utilisateur "anaconda" et créé un environnement "ml_env" pour l'apprentissage automatique. Dans l'article, il a été construit avec Centos 7.7, mais je n'ai eu aucun problème avec CentOS 8. [Partie 1] Créer un environnement de développement d'apprentissage automatique Python sur CentOS (installation Anaconda) --Qiita
Dans la continuité de l'article ci-dessus, nous allons activer l'environnement d'apprentissage automatique "ml_env" en tant qu'utilisateur "anaconda" et introduire BERT dans cet environnement.
pip install transformers[tf-cpu]
pip install torch==1.7.0+cpu torchvision==0.8.1+cpu torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
conda install pytorch
, j'obtiens une erreur comme Instruction illégale (core dumped)
. Cela semble être une erreur liée au GPU, j'ai donc installé la version du processeur comme ci-dessus. Cette commande est "START LOCALLY" dans https://pytorch.org/get-started/locally/
Il est généré en sélectionnant comme. CUDA est None et il n'y a pas de GUP.Vous avez maintenant installé les bibliothèques requises.
Ensuite, le [Laboratoire Kurohashi / Kawahara / Murawaki] de l'Université de Kyoto (http://nlp.ist.i.kyoto-u.ac.jp/index.php?BERT%E6%97%A5%E6% 9C% AC% E8% AA% 9EPretrained% E3% 83% A2% E3% 83% 87% E3% 83% AB) est ouvert au public, téléchargez le modèle BERT Japanese Pretrained.
En supposant que vous êtes actuellement dans / home / anaconda /
en tant qu'utilisateur anaconda, créez et déplacez le répertoire / home / anaconda / bert / japan_test
pour stocker le modèle japonais.
mkdir bert
cd bert
mkdir japan_test
cd japan_test
Ensuite, téléchargez, décompressez et supprimez le fichier téléchargé.
curl -OL http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/JapaneseBertPretrainedModel/Japanese_L-12_H-768_A-12_E-30_BPE.zip
unzip Japanese_L-12_H-768_A-12_E-30_BPE.zip
rm -rf Japanese_L-12_H-768_A-12_E-30_BPE.zip
Le modèle est maintenant installé dans / home / anaconda / bert / japan_test / apanese_L-12_H-768_A-12_E-30_BPE
.
Quittez le répertoire que vous avez créé.
cd ../..
Placez le fichier de programme Python bert_test.py
pour le test BERT ici dans / home / anaconda /
.
bert_test.py
from transformers import BertTokenizer, BertForMaskedLM, BertConfig
import torch
import numpy as np
config = BertConfig.from_json_file('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/bert_config.json')
model = BertForMaskedLM.from_pretrained('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/pytorch_model.bin', config=config)
bert_tokenizer = BertTokenizer('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/vocab.txt',
do_lower_case=False, do_basic_tokenize=False)
tokenized_text = ['[CLS]', 'Il était une fois', 'Urashima', 'Cette', 'Pêcheur', 'Mais', 'Vivre', 'Était là', '。'
, 'y a-t-il', 'journée', '、', '[MASK]', 'Mais', 'plage', 'À', 'En marchant', 'Lorsque vous êtes', '[SEP]']
masked_index = 12
tokens=bert_tokenizer.convert_tokens_to_ids(tokenized_text)
tokens_tensor=torch.tensor([tokens])
model.eval()
with torch.no_grad():
outputs = model(tokens_tensor)
predictions = outputs[0]
_,predicted_indexes=torch.topk(predictions[0,masked_index],k=10)
predicted_tokens = bert_tokenizer.convert_ids_to_tokens(predicted_indexes.tolist())
print(predicted_tokens)
Ce programme
['[CLS]', 'Il était une fois', 'Urashima', 'Cette', 'Pêcheur', 'Mais', 'Vivre', 'Était là', '。', 'y a-t-il', 'journée', '、', '[MASK]', 'Mais', 'plage', 'À', 'En marchant', 'Lorsque vous êtes', '[SEP]']
Prédisez les mots qui entrent dans le «[MASQUE]» de.
python bert_test.py
Si vous l'exécutez avec
['Pêcheur', '[UNK]', 'Homme', 'gens', 'Homme', 'Jeunesse', 'femme', '役Homme', 'garçon', 'poisson']
Voilà le résultat. Vous avez réussi à exécuter BERT.
Je voulais utiliser ce résultat d'analyse BERT dans une application Web, j'ai donc mis en place un serveur Web local avec Flask et ai fait du modèle BERT un démon (résident) sur Flask. Ensuite, j'ai mis en place un serveur Web avec Apache et l'ai publié en tant qu'API. En d'autres termes, lorsque j'accède à l'API Apache de l'extérieur, le programme d'API accède à BERT sur Flask et obtient le résultat de l'analyse de BERT. C'est,
Démo de devinettes de mots BERT
Ce sera. Veuillez l'essayer si vous le souhaitez.
Recommended Posts