Je souhaite exécuter un traitement à l'aide de word2vec qui a déjà été appris dans Azure Databricks. J'avais l'habitude d'utiliser word2vec de Python dans mon environnement local, mais j'en étais accro parce que je pensais que cela fonctionnerait avec le copier-coller, alors je vais l'écrire.
Si vous écrivez d'abord la conclusion, ** - Montez le BLOB qui a téléchargé le modèle entraîné sur les données et chargez-le ** ** - Notez que si vous n'utilisez pas la commande with open lors du chargement, vous obtiendrez une erreur "Fichier non trouvé" **
Comme son nom l'indique, il convertit les mots en vecteurs. Une technologie très importante indispensable au traitement du langage naturel. Remplacez une simple chaîne de mots par un vecteur afin qu'elle puisse être manipulée mathématiquement.
"Rice" "Machine learning" "Deep learning" ↓ ↓ ↓
Cela permet ** de calculer mathématiquement la similitude entre les mots en tant que distance spatiale **. On peut définir mathématiquement que les mots «apprentissage automatique» et le mot «apprentissage en profondeur» ont des significations similaires.
La prémisse de base de word2vec est l'idée que le sens d'un mot est formé par les mots environnants. C'est ce qu'on appelle «l'hypothèse de distribution».
Pour le dire clairement, la signification d'un mot peut être déduite en regardant les mots qui l'entourent.
Par exemple, supposons que vous ayez l'instruction suivante: ** ・ La technologie [d'apprentissage automatique] est indispensable pour la réalisation de l'intelligence artificielle. ** ** Même si le mot «apprentissage automatique» est inconnu, il est supposé qu'il pourrait s'agir d'une technologie liée à l'intelligence artificielle.
De même, il peut y avoir une déclaration comme celle-ci: ** ・ La technologie appelée [Deep Learning] a considérablement accéléré la recherche sur l'intelligence artificielle. ** **
En apprenant un si grand nombre de phrases, il devient possible de prédire la signification de mots inconnus. On peut également voir que [l'apprentissage automatique] et [l'apprentissage profond], dans lesquels des mots similaires apparaissent dans la zone environnante, semblent sémantiquement similaires.
Cependant, ces apprentissages nécessitent la lecture d'une grande quantité de documents et le coût de l'apprentissage est élevé. Par conséquent, il est fondamental d'utiliser d'abord un modèle entraîné.
Préparation
Exécution
Il n'y a rien à faire attention. Vous pouvez le créer normalement à partir du portail Azure.
Encore une fois, il n'y a rien à faire attention. Créez un conteneur. Le niveau d'accès public peut être privé.
Téléchargez le modèle entraîné en vous référant à l'article suivant. (Au fait, j'ai utilisé fastText)
Liste des vecteurs d'incorporation de mots prêts à l'emploi https://qiita.com/Hironsan/items/8f7d35f0a36e0f99752c
Téléchargez le fichier "model.vec" téléchargé dans le conteneur créé.
A partir de là, opérations sur le notebook Databricks.
Cet article était très facile à comprendre.
Analysez les données dans Blob avec une requête! https://tech-blog.cloud-config.jp/2020-04-30-databricks-for-ml/
python
mount_name= "(Nom du répertoire de destination du montage arbitraire)"
storage_account_name = "(Nom du compte de stockage)"
container_name = "(Nom du conteneur)"
storage_account_access_key = "(Clé d'accès au compte de stockage)"
mount_point = "/mnt/" + mount_name
source = "wasbs://" + container_name + "@" + storage_account_name + ".blob.core.windows.net"
conf_key = "fs.azure.account.key." + storage_account_name + ".blob.core.windows.net"
mounted = dbutils.fs.mount(
source=source,
mount_point = mount_point,
extra_configs = {conf_key: storage_account_access_key}
)
python
import gensim
word2vec_model = gensim.models.KeyedVectors.load_word2vec_format("mount_name/container_name/model.vec", binary=False)
Lorsque je l'exécute ci-dessus, j'obtiens une erreur pour une raison quelconque. Pourquoi la monture est-elle correctement fabriquée? (Au fait, s'il est local, cela fonctionne correctement.)
FileNotFoundError: [Errno 2] No such file or directory:
Donc, utilisez la commande with open comme indiqué ci-dessous pour le recevoir une fois avec f_read, puis chargez-le.
python
import gensim
with open("mount_name/container_name/model.vec", "r") as f_read:
word2vec_model = gensim.models.KeyedVectors.load_word2vec_format(f_read, binary=False)
Système de fichiers Databricks (DBFS) - API de fichier local https://docs.microsoft.com/ja-jp/azure/databricks/data/databricks-file-system#local-file-apis
Cette fois, ce fut un succès.
Essaye le. Essayez de mettre le mot le plus proche de «japonais».
python
word2vec_model.most_similar(positive=['Japonais'])
Out [3]: [('Chinese', 0.7151615619659424), ('Japonais', 0,5991291999816895), ('Etranger', 0,5666396617889404), ('Japonais', 0,5619238018989563), ('Coréen', 0.5443094968795776), ('Chinois', 0,5377858877182007), ('Résident au Japon', 0.5263140201568604), ('Chinois', 0,5200497508049011), ('Résidence', 0,5198684930801392), («Étudiant international», 0,5194666981697083)]
Recommended Posts