[PYTHON] [Mit japanischem Modell] Satzvektormodell empfohlen für Personen, die 2020 natürliche Sprache verarbeiten

Der Punkt

Bild UMAP.png

Einführung

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.

Vorausgesetztes Wissen

Beispiel für die Verwendung des japanischen Satzvektormodells

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.

  1. Suchen Sie nach Anweisungen, die eine ähnliche Bedeutung wie die angegebene Abfrageanweisung haben.
  2. Visualisieren Sie mit UMAP den latenten semantischen Raum des Titelsatzes.

installieren

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

Japanisches Modell wird geladen

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)

Berechnung des Anweisungsvektors

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.

Suchen Sie nach Sätzen mit ähnlichen Bedeutungen

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)

Visualisieren Sie den latenten semantischen Raum mit TensorBoard

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".

TensorBoard.png

Übersicht über Satz-BERT

(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.

SBERT_architecture.png

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.

Performance.png

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.

Laden Sie den Quellcode und das Modell der japanischen Version herunter

Die japanische Version des im obigen Beispiel verwendeten Quellcodes und Modells kann wie folgt heruntergeladen werden.

Haftungsausschluss

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.

Zusammenfassung

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

[Mit japanischem Modell] Satzvektormodell empfohlen für Personen, die 2020 natürliche Sprache verarbeiten
Verarbeitung natürlicher Sprache für vielbeschäftigte Menschen
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Verarbeiten Sie mehrere Listen mit for in Python
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
Erstellen Sie einen japanischen Satzvektor mit BertModel von huggingface / transformers
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
Verhalten in jeder Sprache, wenn Collouts mit for wiederverwendet werden
Für diejenigen, die in der Atmosphäre analysieren (lineares Regressionsmodell 1)