[PYTHON] Après tout, qui est l'intégration?

introduction

Lorsque vous touchez le traitement du langage naturel à l'aide de l'apprentissage en profondeur, Je tombe sur un type inconnu appelé Embedding.

Traduit directement en japonais, il est ** intégré **. time_cupsule_kids_30.png

~~ Je ne comprends pas le sens ~~ Je ne suis pas sûr, alors je l'ai recherché.

Quel genre d'opération?

La conversion d'un langage naturel en une forme calculable semble s'appeler l'incorporation. Dans de nombreux cas, il fait référence à ** des opérations qui convertissent des mots, des phrases, etc. en représentations vectorielles **.

pour quoi?

Il y a deux principales raisons.

1. Pour permettre à l'ordinateur de traiter

Fondamentalement, les algorithmes d'apprentissage automatique actuels ne sont pas conçus pour gérer les types de chaîne. Par conséquent, il doit être converti en une forme calculable.

2. Parce que l'on peut s'attendre à ce que la précision s'améliore en fonction de la méthode de conversion

Aussi, en concevant une méthode d'expression vectorielle, pas seulement en en faisant une forme calculable. Vous pourrez exprimer les caractéristiques des mots et des phrases dans un vecteur.

Par exemple, en convertissant des mots qui ont des significations similaires en vecteurs proches **, Vous serez en mesure d'exprimer le sens (comme) d'un mot par la distance et la similitude du vecteur.

Je vais le déplacer pour le moment

Je l'ai écrit comme ça, mais je ne peux pas vraiment le sentir à moins de le déplacer, alors j'écrirai le code.

Technologie utilisée

Intégrons-le avec ** Word2Vec **, une bibliothèque appelée gensim, facile à implémenter. J'ai utilisé le modèle pré-entraîné suivant tel quel.

Essayez d'intégrer divers

Pour le moment, essayez d'intégrer "Bonjour" et "Bonsoir".

print(model["Bonjour"])

# [ 0.36222297 -0.5308175   0.97112703 -0.50114137 -0.41576928  1.7538059
#  -0.17550747 -0.95748925 -0.9604152  -0.0804095  -1.160322    0.22136442
# ...

print(model["Bonsoir"])

# [-0.13505702 -0.11360763  0.00522657 -0.01382224  0.03126004  0.14911242
#   0.02867801 -0.02347831 -0.06687803 -0.13018233 -0.01413341  0.07728481
# ...

Vous pouvez voir que la chaîne a été convertie en vecteur.

.. .. .. C'est pourquoi j'ai eu l'impression qu'on me l'avait dit, alors je vais vérifier si je peux exprimer le sens.

Vérifiez la similitude

Jetons un coup d'œil à la similitude cosinus qui est souvent utilisée lors du calcul de la similitude d'un document. À propos, la similitude cosinus est exprimée entre 0 et 1, et plus elle est proche de ** 1, plus elle est similaire **.

Tout d'abord, regardons la similitude entre ** "Bonjour" et "Bonsoir" **.

print(cos_similarity(model["Bonjour"],model["Bonsoir"]))
# 0.8513177

Le score est de 0,85 ... Cela semble assez proche.

Regardons maintenant le degré de similitude entre des mots qui ont des significations éloignées.


print(cos_similarity(model["Bonjour"],model["Hijiki"]))
# 0.17866151

Le score était de 0,17 ... ** «Bonjour» et «Hijiki» ** peuvent être considérés comme loin.

Il semble que le vecteur ait un sens en termes d'expérience.

en conclusion

J'avais l'impression de pouvoir saisir l'image de Embedding. J'ai entendu dire que Embedding de BERT, que j'ai bourdonné il y a un moment, est vraiment bon, alors je vais essayer.

code

import numpy as np
import gensim

#Modèle de charge
model_path = "entity_vector/entity_vector.model.bin"
model = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=True)

#Similitude cosinus
def cos_similarity(a,b):
    return np.dot(a,b) / ((np.sqrt(np.dot(a,a))) * (np.sqrt(np.dot(b,b))))

print(model["Bonjour"])
print(model["Bonsoir"])

print(cos_similarity(model["Bonjour"],model["Bonsoir"]))
print(cos_similarity(model["Bonjour"],model["Hijiki"]))

Recommended Posts

Après tout, qui est l'intégration?
Après tout, qu'est-ce que la modélisation statistique?
Quel est l'outil de visualisation Python le plus populaire après tout?
Après tout, il est faux de chat avec le sous-processus python.
[Linux] Qui est le travail d'arrière-plan! ??