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é **.
~~ Je ne comprends pas le sens ~~ Je ne suis pas sûr, alors je l'ai recherché.
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 **.
Il y a deux principales raisons.
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.
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 l'ai écrit comme ça, mais je ne peux pas vraiment le sentir à moins de le déplacer, alors j'écrirai le code.
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.
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.
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.
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.
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"]))