Bild
Es handelt sich um die Erstellung eines Vektors mit hoher Qualität (auf Japanisch). Je näher die Bedeutung eines Satzes am Kontext und nicht am Buchstaben basiert, desto näher kommt der Vektor.
Ich denke, dass es eine bestimmte Anzahl von Menschen gibt, die Satzvektoren erstellen, um nach Sätzen zu suchen, die in ihren Hobbys und Praktiken ähnliche Bedeutungen haben.
Obwohl der Durchschnitt der Wortvektoren nicht schlecht ist, frage ich mich, ob es einige unbefriedigende Szenen gibt, in denen ich in ein Labyrinth namens Huristics wandere (ich versuche, ein bestimmtes Wort oder einen bestimmten Teil als Stoppwort zu verwenden usw.). Versuchen Sie, ein mysteriöses Gewicht hinzuzufügen. Was ist die Basis?). Außerdem ist es schwierig, mit dem durchschnittlichen Wortvektor mit Polynomwörtern umzugehen, und da der Kontext nicht berücksichtigt wird, werden ähnliche Satzsuchen durchgeführt, die sich auf das Wort "nicht da" konzentrieren. Andererseits ist das Erlernen eines Satzvektormodells unter Verwendung eines vorhandenen tiefen neuronalen Netzwerks wie des Universal Satzcodierers zu teuer für die Berechnung, und es kann schwierig sein, es selbst zu trainieren.
Für diejenigen, die solche Probleme haben, ein qualitativ hochwertiger japanischer Satzvektor unter Verwendung der in Papiersatz-BERT: Satzeinbettungen unter Verwendung siamesischer BERT-Netzwerke vorgeschlagenen Methode. Erstellen Sie ein Modell und veröffentlichen Sie es.
Vor der technischen Erklärung von Satz-BERT werde ich erklären, wie man es benutzt. Es ist einfach. Das Beispiel macht zwei Dinge: Sie können diese Beispiele in Google Colaboratory ausprobieren.
Installieren Sie die entsprechende Bibliothek und laden Sie das japanische Modell herunter. Es ist keine detaillierte Erklärung erforderlich. Um es einfach in Colaboratory zu versuchen, habe ich dieses Mal, anstatt japanische Satztransformatoren zu installieren, in das Verzeichnis mit dem Quellcode gewechselt, aber in der Produktion verwendet, wie In [2] auskommentiert. Es ist besser, mit setup.py zu installieren.
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
Durch Entpacken des Teers wird ein Verzeichnis training_bert_japanese erstellt, in dem das Modell gespeichert ist.
In[4]
%cd sentence-transformers
Wenn Sie eine SentenceTransformer-Instanz mit dem Pfad / content / training_bert_japanese zu dem Verzeichnis erstellen, in dem sich das japanische Modell befindet, ist das Laden des Modells abgeschlossen.
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)
Berechnen Sie den Anweisungsvektor. Rufen Sie einfach model.encode (eine Liste von Anweisungen) auf. In diesem Beispiel verwende ich als Satz den Titel (eine leicht modifizierte Version) von "Irasutoya", der in Ein anderer Artikel veröffentlicht wurde. .. (Eigentlich ist es besser, einen Satz zu haben, der mehrmals länger ist, um den Effekt zu zeigen, aber ich konnte ihn nicht sofort vorbereiten, also verwende ich nur den Titel. Ich werde eine Erklärung hinzufügen, wenn ich einen passenderen Satz vorbereiten kann.)
In[6]
#Quelle: https://qiita.com/sonoisa/items/Auszug aus dem auf 775ac4c7871ced6ed4c3 veröffentlichten Bildtitel von "Irasutoya" (die Wörter "Illustration", "Markierung" und "Zeichen" wurden entfernt)
sentences = ["Männlicher Büroangestellter verbeugt sich", "Lachtasche", "Technische Evangelistin (weiblich)", "Kämpfe gegen KI", "Lachender Mann (5 Ebenen)",
...
"Ein Mann, der auf Geld starrt und grinst", "Leute, die "Danke" sagen", "Ruhestand (weiblich)", "Technischer Evangelist (männlich)", "Standing Ovations"]
In[7]
sentence_vectors = model.encode(sentences)
Dies ist die einzige Berechnung des Anweisungsvektors.
Versuchen Sie mit dem berechneten Satzvektor nach Sätzen mit ähnlichen Bedeutungen zu suchen (Titel von Irasuto). Suchen Sie nach einem Anweisungsvektor mit einem kleinen Kosinusabstand.
In[9]
import scipy.spatial
queries = ['Ausreißer-KI', 'Ausreißer künstliche Intelligenz', 'Vielen Dank an Herrn Irasutoya', 'Fortsetzung folgt']
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))
Unten ist das Ausgabeergebnis. Runaway ≒ Fight, es kann als Waffe angesehen werden, daher denke ich, dass es ein natürliches Ergebnis ist. Wenn Sie ein Herz haben, können Sie sicher denken, dass Sie außer Kontrolle geraten können.
Out[9]
======================
Query:Ausreißer-KI
Top 5 most similar sentences in corpus:
Kämpfe gegen KI(Score: 0.1521)
KI mit Herz(Score: 0.1666)
KI mit Waffen(Score: 0.1994)
Künstliche Intelligenz / KI(Score: 0.2130)
KI zur Bilderkennung(Score: 0.2306)
Paraphrasierte KI in künstliche Intelligenz. Das Ergebnis hat sich geändert. Es scheint, dass diejenigen mit ähnlichen Notationen dazu neigen, an die Spitze zu kommen.
Out[9]
======================
Query:Ausreißer künstliche Intelligenz
Top 5 most similar sentences in corpus:
Künstliche Intelligenz, die Arbeit raubt(Score: 0.1210)
Eine Person, die mit künstlicher Intelligenz streitet(Score: 0.1389)
Künstliche Intelligenz(Score: 0.1411)
Wachsende künstliche Intelligenz(Score: 0.1482)
Künstliche Intelligenz / KI(Score: 0.1629)
Danke = Sie wissen, dass "Danke".
Out[9]
======================
Query:Vielen Dank an Herrn Irasutoya
Top 5 most similar sentences in corpus:
Leute, die "Danke" sagen(Score: 0.1381)
Gutes Lachen Mumps(Score: 0.1693)
Gutes Lachen (Hyottoko)(Score: 0.1715)
Gutes Lachen (Okame)(Score: 0.1743)
Menschen, die das Lachen zurückhalten (männlich)(Score: 0.1789)
Sie können nach ähnlichen Sätzen mit einem einzelnen Wort anstelle eines Satzes suchen.
Out[9]
======================
Query:Fortsetzung folgt
Top 5 most similar sentences in corpus:
"Fortsetzung" verschiedener Filme(Score: 0.1878)
Cingularität(Score: 0.2703)
Falsches Lächeln(Score: 0.2811)
Vielen Dank(Score: 0.2881)
Harisen(Score: 0.2931)
Führen Sie den folgenden Code aus und verwenden Sie die TensorBoard-Erweiterung von Colaboratory, um den Raum des Anweisungsvektors dem niedrigdimensionalen Raum zuzuordnen und zu visualisieren.
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}
--Wenn TensorBoard startet, wählen Sie PROJEKTOR aus dem Menü oben rechts.
Hoffentlich wird der Raum des Anweisungsvektors wie folgt visualisiert: Oben links befindet sich ein "künstliches Intelligenz" -System, und rechts ist sofort eine Masse von "KI" -Systemen zu sehen. Unten links sehen Sie den Typ "Verbeugung", in der Mitte sehen Sie einige andere verschiedene Dinge, rechts sehen Sie den Typ "weiblich" und im unteren Teil sehen Sie die Masse "männlich".
(Es ist ein sehr einfach zu lesendes Papier, daher denke ich nicht, dass es notwendig ist, es zu erklären.)
--Papiere: Satz-BERT: Satz-Einbettungen mit siamesischen BERT-Netzwerken
Kurz gesagt, der Satzvektor, der durch das Einbetten von Token in BERT und das mittlere Pooling erstellt wird, wird mithilfe des siamesischen Netzwerks verfeinert. Es ist einfach. Sie können es grob sehen, indem Sie sich die Abbildungen 1 und 2 der unten genannten Artikel ansehen.
Paper hat mit anderen Methoden experimentiert, aber die japanische Modellkonstruktion verwendet diese Netzwerkstruktur, die die höchste Leistung aufweist.
Kosinusähnlichkeit und korrekte Bezeichnung unter Verwendung der englischen Version der Genauigkeitsbewertung (STSbenchmark), wie in der unten angegebenen Tabelle 2 gezeigt. Im Rangkorrelationskoeffizienten nach Spearman (je näher er an 1 liegt, desto besser) beträgt er 0,58 für die Methode unter Verwendung des Durchschnitts einfacher Wortvektoren (GloVe) und etwa 0,85 für das Modell, das der diesmal erstellten Skala entspricht.
Gemäß Tabelle 1 in Papier beträgt die Genauigkeit bei Verwendung des CLS-Vektors des einfachen BERT 0,17 und bei Verwendung des Durchschnitts der Einbettung von BERT 0,46. Das Ergebnis ist schlechter als das durchschnittliche Ergebnis des Vektors (0,58). Wie in der Originalarbeit von BERT angegeben, stellt sich heraus, dass es nicht angebracht ist, diese als Satzvektoren zu verwenden (es ist schlimmer als ich es mir vorgestellt habe).
Bei der Erstellung der japanischen Version des Modells huggingface / transformers (Das Modell ist Tohoku University Inui Suzuki Laboratory cl-tohoku / bert-japanese)) Die japanische Version des BERT-Modells wird verwendet.
Und die Lernmethode des japanischen Modells dieses Mal (Datensatz zum Lernen, Genauigkeitsbewertungsmethode) tut mir leid, aber es ist aufgrund verschiedener Umstände ein Geheimnis. Infolgedessen scheint ein Satzvektor mit Kontext erstellt zu werden, der mit der englischen Version vergleichbar ist.
Die japanische Version des im obigen Beispiel verwendeten Quellcodes und Modells kann wie folgt heruntergeladen werden.
Der Autor achtet genau auf den Inhalt, die Funktionen usw. dieses Artikels, garantiert jedoch nicht, dass der Inhalt korrekt oder sicher ist. Wir sind nicht verantwortlich. Selbst wenn dem Benutzer durch die Verwendung des Inhalts dieses Artikels Unannehmlichkeiten oder Schäden entstehen, müssen der Autor und die Organisation, zu der der Autor gehört (Nittetsu Solutions Co., Ltd. (NSSOL, ehemals Nittetsu Sumikin Solutions Co., Ltd.)). Wir übernehmen keine Verantwortung.
Ich habe einen japanischen Versionscode und ein Modell von Satz-BERT erstellt. Jetzt kann jeder leicht hochwertige Satzvektoren erstellen. Bitte benutzen Sie es.
Recommended Posts