image
C'est une histoire de création d'un vecteur de haute qualité (en japonais), c'est-à-dire que plus le sens d'une phrase est basé sur le contexte plutôt que sur la lettre, plus le vecteur se rapproche.
Je pense qu'il y a un certain nombre de personnes qui créent des vecteurs de phrases dans le but de rechercher des phrases qui ont des significations similaires dans leurs passe-temps et leurs pratiques.
Cependant, bien que la moyenne des vecteurs de mots ne soit pas mauvaise, je me demande s'il y a des scènes insatisfaisantes dans lesquelles je me retrouve à errer dans un labyrinthe appelé Huristics (en essayant d'utiliser un mot ou une partie spécifique comme mot stop, etc. Essayez d'ajouter un poids mystérieux. Quelle est la base?). De plus, le vecteur de mots moyen est difficile à gérer les mots polynomiaux, et du fait que le contexte n'est pas pris en considération, des recherches de phrases similaires qui se concentrent sur le mot "pas là" sont effectuées. D'un autre côté, l'apprentissage d'un modèle de vecteur de phrase à l'aide d'un réseau neuronal profond existant tel que Universal Sentence Encoder est trop coûteux à calculer et il peut être difficile de l'entraîner par vous-même.
Pour ceux qui ont de tels problèmes, vecteur de phrases japonais de haute qualité utilisant la méthode proposée dans Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks Créez un modèle et publiez-le.
Avant l'explication technique de Sentence-BERT, je vais vous expliquer comment l'utiliser. c'est simple. L'exemple fait deux choses: Vous pouvez essayer ces exemples dans Google Colaboratory.
Installez la bibliothèque appropriée et téléchargez le modèle japonais. Aucune explication détaillée n'est nécessaire. Pour la commodité de l'essayer facilement dans Colaboratory, cette fois au lieu d'installer des transformateurs de phrases japonais, je me suis déplacé vers le répertoire avec le code source, mais en utilisation de production, comme In [2] commenté. Il est préférable d'installer avec setup.py.
In[1]
!git clone https://github.com/sonoisa/sentence-transformers
!cd sentence-transformers; pip install -r requirements.txt
In[2]
#!cd sentence-transformers; python setup.py install
In[3]
!wget -O sonobe-datasets-sentence-transformers-model.tar "https://www.floydhub.com/api/v1/resources/JLTtbaaK5dprnxoJtUbBbi?content=true&download=true&rename=sonobe-datasets-sentence-transformers-model-2"
!tar -xvf sonobe-datasets-sentence-transformers-model.tar
En décompressant le tar, un répertoire training_bert_japanese qui stocke le modèle est créé.
In[4]
%cd sentence-transformers
Si vous créez une instance SentenceTransformer avec le chemin / content / training_bert_japanese vers le répertoire dans lequel le modèle japonais est placé, le chargement du modèle est terminé.
In[5]
%tensorflow_version 2.x
from sentence_transformers import SentenceTransformer
import numpy as np
model_path = "/content/training_bert_japanese"
model = SentenceTransformer(model_path, show_progress_bar=False)
Calculez le vecteur d'instruction. Appelez simplement model.encode (une liste d'instructions). Dans cet exemple, j'utiliserai le titre (une version légèrement modifiée) de "Irasutoya" publié dans Another article. .. (En fait, il est préférable d'avoir une phrase plusieurs fois plus longue pour montrer l'effet, mais je n'ai pas pu la préparer tout de suite, alors je vais simplement utiliser le titre. J'ajouterai une explication lorsque je pourrai préparer une phrase plus appropriée.)
In[6]
#La source: https://qiita.com/sonoisa/items/Extrait du titre de l'image "Irasutoya" publié le 775ac4c7871ced6ed4c3 (suppression des mots "illustration", "marque" et "caractère")
sentences = ["Employé de bureau masculin s'inclinant", "Sac de rire", "Évangéliste technique (femme)", "Combattre l'IA", "Homme qui rit (5 niveaux)",
...
"Un homme regardant l'argent et souriant", "Les gens qui disent "Merci"", "Retraite (femme)", "Évangéliste technique (homme)", "Ovation debout"]
In[7]
sentence_vectors = model.encode(sentences)
C'est le seul calcul du vecteur de déclaration.
En utilisant le vecteur de phrases calculé, essayez de rechercher des phrases avec des significations similaires (titre d'Irasuto). Recherchez un vecteur d'instruction avec une petite distance cosinus.
In[9]
import scipy.spatial
queries = ['IA fugitive', 'Intelligence artificielle en fuite', 'Merci à M. Irasutoya', 'à suivre']
query_embeddings = model.encode(queries)
closest_n = 5
for query, query_embedding in zip(queries, query_embeddings):
distances = scipy.spatial.distance.cdist([query_embedding], sentence_vectors, metric="cosine")[0]
results = zip(range(len(distances)), distances)
results = sorted(results, key=lambda x: x[1])
print("\n\n======================\n\n")
print("Query:", query)
print("\nTop 5 most similar sentences in corpus:")
for idx, distance in results[0:closest_n]:
print(sentences[idx].strip(), "(Score: %.4f)" % (distance / 2))
Voici le résultat de sortie. Runaway ≒ Combattez, cela peut être considéré comme une arme, donc je pense que c'est un résultat naturel. Si vous avez un cœur, vous pouvez certainement penser que vous pouvez perdre le contrôle.
Out[9]
======================
Query:IA fugitive
Top 5 most similar sentences in corpus:
Combattre l'IA(Score: 0.1521)
AI avec un cœur(Score: 0.1666)
IA avec armes(Score: 0.1994)
Intelligence artificielle / IA(Score: 0.2130)
AI pour la reconnaissance d'image(Score: 0.2306)
A paraphrasé l'IA en intelligence artificielle. Le résultat a changé. Il semble que ceux qui ont des notations similaires ont tendance à arriver au sommet.
Out[9]
======================
Query:Intelligence artificielle en fuite
Top 5 most similar sentences in corpus:
L'intelligence artificielle qui vole le travail(Score: 0.1210)
Une personne qui se dispute avec l'intelligence artificielle(Score: 0.1389)
Intelligence artificielle(Score: 0.1411)
Croissance de l'intelligence artificielle(Score: 0.1482)
Intelligence artificielle / IA(Score: 0.1629)
Merci = Vous savez que "Merci".
Out[9]
======================
Query:Merci à M. Irasutoya
Top 5 most similar sentences in corpus:
Les gens qui disent "Merci"(Score: 0.1381)
Bon rire oreillons(Score: 0.1693)
Bon rire (Hyottoko)(Score: 0.1715)
Bon rire (Okame)(Score: 0.1743)
Les gens qui retiennent le rire (homme)(Score: 0.1789)
Vous pouvez rechercher des phrases similaires avec un seul mot au lieu d'une phrase.
Out[9]
======================
Query:à suivre
Top 5 most similar sentences in corpus:
"Suite" de divers films(Score: 0.1878)
Cingularité(Score: 0.2703)
Faux sourire(Score: 0.2811)
Je vous remercie(Score: 0.2881)
Harisen(Score: 0.2931)
Exécutez le code suivant et utilisez l'extension TensorBoard de Colaboratory pour mapper et visualiser l'espace du vecteur d'instruction sur l'espace de faible dimension.
In[10]
%load_ext tensorboard
import os
logs_base_dir = "runs"
os.makedirs(logs_base_dir, exist_ok=True)
In[11]
import torch
from torch.utils.tensorboard import SummaryWriter
import tensorflow as tf
import tensorboard as tb
tf.io.gfile = tb.compat.tensorflow_stub.io.gfile
summary_writer = SummaryWriter()
summary_writer.add_embedding(mat=np.array(sentence_vectors), metadata=sentences)
In[12]
%tensorboard --logdir {logs_base_dir}
--Lorsque TensorBoard démarre, sélectionnez PROJECTOR dans le menu en haut à droite.
Espérons que l'espace du vecteur d'instruction sera visualisé comme suit: Il y a un système «d'intelligence artificielle» en haut à gauche, et une masse de systèmes «IA» peut être vue immédiatement à droite. En bas à gauche, vous pouvez voir le type "s'inclinant", au centre vous pouvez voir quelques autres choses diverses, à droite vous pouvez voir le type "femelle", et dans la partie inférieure, vous pouvez voir la masse de type "mâle".
(C'est un article très facile à lire, donc je ne pense pas qu'il soit nécessaire de l'expliquer.)
--Papers: Sentence-BERT: Phrases Embeddings using Siamese BERT-Networks
En un mot, le vecteur de phrase créé en incorporant des jetons dans BERT et la mise en commun des moyennes est affiné à l'aide du réseau siamois. C'est simple. Vous pouvez le voir grossièrement en regardant les figures 1 et 2 des articles cités ci-dessous.
Paper a expérimenté d'autres méthodes, mais la construction du modèle japonais utilise cette structure de réseau, qui a les performances les plus élevées.
Similitude cosinus et étiquette correcte en utilisant la version anglaise de la cote de précision (STSbenchmark), comme indiqué dans le tableau 2 ci-dessous. Dans le coefficient de corrélation de rang de Spearman (plus il est proche de 1, mieux c'est), il est de 0,58 pour la méthode utilisant la moyenne des vecteurs de mots simples (GloVe), et d'environ 0,85 pour le modèle équivalent à l'échelle créée cette fois.
De plus, selon le tableau 1 de Paper, la précision est de 0,17 lors de l'utilisation du vecteur CLS du BERT ordinaire et de 0,46 lors de l'utilisation de la moyenne de l'incorporation de BERT. Le résultat est pire que le résultat moyen du vecteur (0,58). Comme indiqué dans l'article original de BERT, il s'avère qu'il n'est pas approprié de les utiliser comme vecteurs de phrases (c'est pire que ce que j'imaginais).
Lors de la création de la version japonaise du modèle, huggingface / transformers (Le modèle est Tohoku University Inui Suzuki Laboratory cl-tohoku / bert-japanese)) Version japonaise Le modèle BERT est utilisé.
Et la méthode d'apprentissage du modèle japonais cette fois (ensemble de données utilisé pour l'apprentissage, méthode d'évaluation de la précision), je suis désolé, mais c'est un secret en raison de diverses circonstances. En conséquence, il semble qu'un vecteur de phrase avec contexte soit créé, ce qui est comparable à la version anglaise.
La version japonaise du code source et du modèle utilisés dans l'exemple ci-dessus peut être téléchargée à partir de ce qui suit.
L'auteur porte une attention particulière au contenu, aux fonctions, etc. de cet article, mais ne garantit pas que le contenu est exact ou sûr. Nous ne sommes pas responsables. Même si des inconvénients ou des dommages surviennent à l'utilisateur en utilisant le contenu de cet article, l'auteur et l'organisation à laquelle appartient l'auteur (Nittetsu Solutions Co., Ltd. (NSSOL, ancien Nittetsu Sumikin Solutions Co., Ltd.)) Nous ne prennons aucune responsabilité.
J'ai créé un code de version japonaise et un modèle de Sentence-BERT. Désormais, n'importe qui peut facilement créer des vecteurs de phrases de haute qualité. Veuillez l'utiliser.
Recommended Posts