[PYTHON] Création de vecteurs de phrases à l'aide de fastText (également visualisation)

J'ai essayé de créer un vecteur de phrases japonais en utilisant ce modèle en me référant à "J'ai publié un modèle entraîné de fastText". .. Il est difficile de créer des modèles tels que BERT et fastText, donc ceux qui publient ces choses seront déçus. Je voudrais donc partager autant de savoir-faire que possible sur ce qui peut être fait avec de telles choses.

Suite à l'article précédent "Création de vecteurs de phrases à l'aide de BERT (Keras BERT)", Google Colaboratory Je voudrais utiliser .com /) d'une manière qui soit facile à faire sans mettre diverses choses dans ma machine.

Comment créer un vecteur de phrase avec fastText

Si vous voulez essayer de créer un vecteur de phrase quelle que soit la méthode, ignorez cette section et passez à la section suivante. fastText est la logique pour obtenir la représentation d'un vecteur de mots. Des vecteurs similaires sont obtenus pour des mots aux usages similaires, car la corrélation entre les mots apparaît dans la relation vectorielle. Il semble que diverses méthodes aient été mises au point pour obtenir un vecteur de phrase en utilisant ce vecteur de mot, mais cette fois, simplement, ** trouver le vecteur de tous les mots contenus dans la phrase et utiliser la moyenne comme vecteur de préparation. ** J'ai pris la méthode. Cette méthode ne convient pas aux phrases compliquées où la dépendance et le contexte affectent le sens de la phrase car les informations d'ordre des mots disparaissent, mais c'est comme une phrase conversationnelle ou une courte question avec un ordre des mots désordonné. Il semble qu'il soit entièrement disponible et le calcul est rapide.

Préparer un modèle pour fastText

Tout d'abord, préparez un modèle entraîné de fastText. Vous pouvez l'obtenir à partir d'ici présenté au début.

Il y a un lien ** Télécharger les vecteurs Word ** sur cette page, alors téléchargez le fichier à partir de là. De là, vous pouvez télécharger un modèle créé en divisant la phrase originale en mots dans un dictionnaire Mecab ordinaire. Un modèle dans lequel les mots sont divisés à l'aide de NEologd est également publié, mais dans cet exemple, le modèle normal est utilisé.

Extrayez le fichier vector.zip téléchargé et extrayez ** model.vec **. Créez un dossier ** bert ** sous ** Mon Drive ** sur votre Google Drive, créez un dossier ** fasttext ** et un dossier ** vector ** dedans, et un modèle **. Téléchargez vec **. Ce n'est pas grave si cela ressemble à ce qui suit. Cette fois, bert n'est pas pertinent, mais c'est un nom de dossier pour la commodité de l'échantillon, donc si vous vous sentez mal à l'aise, veuillez le renommer. googledrive.PNG

Exécutez un programme qui crée des vecteurs de phrases

À partir de là Téléchargez le fichier ipynb suivant, qui est le corps principal du programme, et importez-le à n'importe quel emplacement sur Google Drive.

Aussi, dans cet exemple, à la fin, j'ai ajouté une partie pour vectoriser et visualiser chaque phrase dans la liste de phrases, donc si vous voulez l'essayer jusqu'à présent, téléchargez la liste suivante et utilisez Google Drive * Veuillez le stocker directement dans le dossier * bert **.

Configurez Google Drive pour utiliser Google Colaboratory et ouvrez ** fasttext_sentencevector.ipynb ** dans Google Colaboratory. Lorsqu'il s'ouvre, exécutez-le avec Tout exécuter ([Ctrl] + [F9]).

Le code s'exécute dans l'ordre, et à un endroit sur le chemin, "Montez Google Drive dans chemin / contenu / lecteur" s'affiche comme suit. Vous devez vous authentifier pour parcourir les fichiers Google Drive. Cliquez sur le lien fourni, suivez les instructions à l'écran pour accorder des autorisations et saisissez le dernier code affiché sous "Entrez votre code d'autorisation:" Si vous le mettez à la place, cela continuera.

Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=...

Enter your authorization code:

Le texte défini dans la fonction phrase_vector dans la cellule de code ci-dessous est le texte pour créer le vecteur de texte.

print(sentence_vector('Je souhaite faire une réservation pour un restaurant'))

Le vecteur de phrase créé a 300 dimensions et ressemble à ceci.

[[ 0.1202     -0.01985181 -0.03682778  0.09241433  0.06526966 -0.03810288
   0.002114    0.031315   -0.07302511  0.05999633  0.12339155  0.036735
  -0.01310033  0.00162244 -0.1747051   0.0203813  -0.07293266 -0.16425289
        ...
  -0.113902    0.07032856  0.00790416 -0.05663266 -0.00517633  0.0051248
  -0.04521288 -0.13712189 -0.17047666 -0.01394678  0.03347553  0.09704111
  -0.04956407 -0.10511766 -0.06996578 -0.016097   -0.07823177 -0.06531233]]

At-il bougé avec succès? Si vous réécrivez l'argument et exécutez à nouveau cette cellule de code, le vecteur de phrase sera recalculé et sorti.

Visualisez le vecteur de phrase de la liste de phrases de question

En prime, trouvez le vecteur de chaque phrase dans la liste des phrases de questions, tracez-le sur un graphique et visualisez-le. Cette liste de textes de question est classée par type de question et le numéro de type de question est défini dans catégorie.

category,input
1,Pouvez-vous livrer le déjeuner?
1,Pouvez-vous livrer le déjeuner?
1,As-tu un déjeuner
1,Je veux que vous livriez le déjeuner à l'entreprise
1,As-tu un déjeuner
1,Y a-t-il un service de livraison pour le déjeuner?
1,Pouvez-vous me le livrer
1,Pouvez-vous livrer le repas?
1,Offrez-vous un service de livraison à domicile
2,Puis-je amener mon animal de compagnie avec moi?
2,Puis-je amener mon animal de compagnie
2,Mettre les animaux ensemble
2,Voulez-vous amener un chien
2,Puis-je mettre un chien
2,Peut-il être utilisé avec des chiens
..

Après avoir trouvé le vecteur de chaque phrase de question, colorez-le avec category et tracez-le. Étant donné que le vecteur du texte de la question a 300 dimensions, il ressemble à ceci lorsqu'il est compressé en 2 dimensions à l'aide de t-SNE et tracé. Il y a environ 30 catégories dans la liste de questions, mais si vous les colorez toutes, ce sera difficile à voir, alors je n'en ai colorié que 10 et j'ai rendu le reste noir. Vous pouvez voir que les mêmes types de questions sont relativement solides. En d'autres termes, on peut dire que les phrases de questions ayant des significations similaires deviennent des vecteurs de phrases proches. plot.png

Où je suis resté coincé

Un jour, j'ai soudainement eu une erreur lors du chargement de mecab. Je ne connaissais pas du tout la raison, mais grâce aux références, j'ai trouvé la cause et cela était dû à une mise à jour côté mecab. Par conséquent, l'exemple utilise une version spécifique de mecab.

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

Les références

J'ai fait référence à ce document.

en conclusion

Je vous ai montré comment créer un vecteur de phrase de la manière la plus courte possible, mais si quelque chose ne va pas, veuillez commenter. Si le texte peut être transformé en vecteur, il sera utilisé de différentes manières. BERT est bon, mais fastText est très agréable car la taille du modèle est petite et légère.

Je développe généralement des produits liés au langage naturel et à l'IA ici. Nous utilisons également des technologies autres que fastText, alors n'hésitez pas à nous contacter si vous avez des questions sur l'IA ou l'apprentissage automatique. → Ifocus Network Co., Ltd.

Recommended Posts

Création de vecteurs de phrases à l'aide de fastText (également visualisation)
Création de vecteurs de phrases avec BERT (Keras BERT)
Créer un chat en utilisant socket