[PYTHON] Satzvektorerstellung mit fastText (auch Visualisierung)

Ich habe versucht, mit diesem Modell einen japanischen Satzvektor zu erstellen, indem ich auf "Ich habe ein trainiertes Modell von fastText veröffentlicht" verwiesen habe. .. Es ist schwierig, Modelle wie BERT und fastText herzustellen, daher werden diejenigen, die diese Dinge veröffentlichen, enttäuscht sein. Deshalb möchte ich so viel Know-how wie möglich darüber teilen, was mit solchen Dingen getan werden kann.

Nach dem vorherigen Artikel "Erstellen von Satzvektoren mit BERT (Keras BERT)", Google Colaboratory Ich möchte .com /) auf eine Weise verwenden, die einfach zu bewerkstelligen ist, ohne dass verschiedene Dinge in meine Maschine eingegeben werden müssen.

Wie erstelle ich einen Satzvektor mit fastText?

Wenn Sie versuchen möchten, unabhängig von der Methode einen Satzvektor zu erstellen, überspringen Sie diesen Abschnitt und fahren Sie mit dem nächsten Abschnitt fort. fastText ist die Logik, um die Darstellung eines Wortvektors zu erhalten. Ähnliche Vektoren können für Wörter mit ähnlichen Verwendungen erhalten werden, da die Korrelation zwischen Wörtern in der Vektorbeziehung erscheint. Es scheint, dass verschiedene Methoden entwickelt wurden, um einen Satzvektor unter Verwendung dieses Wortvektors zu erhalten, aber dieses Mal einfach ** den Vektor aller im Satz enthaltenen Wörter finden und den Durchschnitt als präparativen Vektor verwenden. ** Ich habe die Methode genommen. Diese Methode eignet sich nicht für komplizierte Sätze, bei denen die Abhängigkeit oder der Kontext die Bedeutung des Satzes beeinflusst, da die Informationen zur Wortreihenfolge verschwinden. Sie ähnelt jedoch einem Konversationssatz oder einem kurzen Fragensatz mit einer ungeordneten Wortreihenfolge. Es scheint, dass es vollständig verfügbar ist und die Berechnung schnell ist.

Bereiten Sie ein Modell für fastText vor

Bereiten Sie zunächst ein geschultes Modell von fastText vor. Sie können es hier zu Beginn vorstellen.

Auf dieser Seite befindet sich ein Link zum Herunterladen von Word-Vektoren. Laden Sie die Datei von dort herunter. Von hier aus können Sie ein Modell herunterladen, das durch Teilen des ursprünglichen Satzes in Wörter in einem normalen Mecab-Wörterbuch erstellt wurde. Ein Modell, in dem Wörter mit NEologd geteilt werden, wird ebenfalls veröffentlicht, in diesem Beispiel wird jedoch das normale Modell verwendet.

Extrahieren Sie die heruntergeladene vector.zip und extrahieren Sie ** model.vec **. Erstellen Sie einen ** bert ** -Ordner unter ** Mein Laufwerk ** auf Ihrem Google Drive, erstellen Sie einen ** Fasttext ** -Ordner und einen ** Vektor ** -Ordner und ein ** Modell. Laden Sie vec ** hoch. Es ist in Ordnung, wenn es wie folgt aussieht. Dieses Mal ist bert nicht relevant, aber es ist ein Ordnername für die Bequemlichkeit des Beispiels. Wenn Sie sich also unwohl fühlen, benennen Sie ihn bitte um. googledrive.PNG

Führen Sie ein Programm aus, das Satzvektoren erstellt

Von hier Laden Sie die folgende ipynb-Datei herunter, die den Hauptteil des Programms darstellt, und laden Sie sie an einen beliebigen Ort auf Google Drive hoch.

Außerdem habe ich in diesem Beispiel am Ende einen Teil hinzugefügt, um jeden Satz in der Satzliste zu vektorisieren und zu visualisieren. Wenn Sie ihn also bisher ausprobieren möchten, laden Sie die folgende Liste herunter und verwenden Sie Google Drive * Bitte speichern Sie es direkt im Ordner * bert **.

Richten Sie Google Drive für die Verwendung von Google Colaboratory ein und öffnen Sie ** fasttext_sentencevector.ipynb ** in Google Colaboratory. Führen Sie es beim Öffnen mit Alle ausführen ([Strg] + [F9]) aus.

Der Code wird in der richtigen Reihenfolge ausgeführt und an einer Stelle auf dem Weg wird "Google Drive in Pfad / Inhalt / Laufwerk einbinden" wie folgt angezeigt. Sie müssen sich authentifizieren, um die Google Drive-Dateien zu durchsuchen. Klicken Sie daher auf den angegebenen Link, befolgen Sie die Anweisungen auf dem Bildschirm, um Berechtigungen zu erteilen, und geben Sie den letzten Code ein, der unter "Geben Sie Ihren Autorisierungscode ein:" angezeigt wird. Wenn Sie es an der richtigen Stelle platzieren, wird es fortgesetzt.

Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=...

Enter your authorization code:

Der in der Funktion "satz_vektor" in der folgenden Codezelle festgelegte Text ist der Text zum Erstellen des Textvektors.

print(sentence_vector('Ich möchte ein Restaurant reservieren'))

Der erstellte Satzvektor hat 300 Dimensionen und sieht folgendermaßen aus.

[[ 0.1202     -0.01985181 -0.03682778  0.09241433  0.06526966 -0.03810288
   0.002114    0.031315   -0.07302511  0.05999633  0.12339155  0.036735
  -0.01310033  0.00162244 -0.1747051   0.0203813  -0.07293266 -0.16425289
        ...
  -0.113902    0.07032856  0.00790416 -0.05663266 -0.00517633  0.0051248
  -0.04521288 -0.13712189 -0.17047666 -0.01394678  0.03347553  0.09704111
  -0.04956407 -0.10511766 -0.06996578 -0.016097   -0.07823177 -0.06531233]]

Ist es erfolgreich umgezogen? Wenn Sie das Argument neu schreiben und diese Codezelle erneut ausführen, wird der Satzvektor neu berechnet und ausgegeben.

Visualisieren Sie den Satzvektor der Fragensatzliste

Suchen Sie als Bonus den Vektor für jeden Satz in der Liste der Fragensätze, zeichnen Sie ihn in ein Diagramm und visualisieren Sie ihn. Diese Fragetextliste ist nach Fragetyp kategorisiert und die Fragentypnummer ist in "Kategorie" festgelegt.

category,input
1,Können Sie das Mittagessen liefern?
1,Können Sie das Mittagessen liefern?
1,Hast du ein Mittagessen
1,Ich möchte, dass Sie das Mittagessen an die Firma liefern
1,Hast du ein Mittagessen
1,Gibt es einen Lieferservice zum Mittagessen?
1,Kannst du es mir liefern?
1,Können Sie das Essen liefern?
1,Bieten Sie einen Lieferservice nach Hause an?
2,Kann ich mein Haustier mitbringen?
2,Kann ich mein Haustier mitbringen?
2,Haustiere zusammenstellen
2,Möchtest du einen Hund mitbringen?
2,Kann ich einen Hund setzen
2,Kann es mit Hunden verwendet werden
..

Nachdem Sie den Vektor jedes Fragensatzes gefunden haben, kennzeichnen Sie ihn mit "Kategorie" und zeichnen Sie ihn. Da der Vektor des Fragetextes 300 Dimensionen hat, sieht er so aus, wenn er mit t-SNE auf 2 Dimensionen komprimiert und geplottet wird. Es gibt ungefähr 30 Kategorien in der Fragenliste, aber wenn Sie alle ausmalen, ist es schwer zu sehen, also habe ich nur 10 von ihnen eingefärbt und den Rest schwarz gemacht. Sie können sehen, dass die gleichen Fragetypen relativ solide sind. Mit anderen Worten kann gesagt werden, dass Fragensätze mit ähnlichen Bedeutungen enge Satzvektoren werden. plot.png

Wo ich feststeckte

Eines Tages bekam ich plötzlich einen Fehler beim Laden von Mecab. Ich kannte den Grund überhaupt nicht, aber dank der Referenzen fand ich die Ursache und es lag an einem Upgrade auf der Mecab-Seite. Daher verwendet das Beispiel eine bestimmte Version von Mecab.

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

Verweise

Ich habe auf dieses Dokument verwiesen.

abschließend

Ich habe Ihnen gezeigt, wie Sie einen Satzvektor auf kürzestem Weg erstellen. Wenn jedoch etwas schief geht, kommentieren Sie dies bitte. Wenn der Text in einen Vektor umgewandelt werden kann, wird er auf verschiedene Arten verwendet. BERT ist gut, aber fastText ist sehr schön, weil die Modellgröße klein und leicht ist.

Normalerweise entwickle ich hier Produkte, die sich auf natürliche Sprache und KI beziehen. Wir verwenden auch andere Technologien als fastText. Wenn Sie Fragen zu KI oder maschinellem Lernen haben, können Sie sich gerne an uns wenden. → Ifocus Network Co., Ltd.

Recommended Posts

Satzvektorerstellung mit fastText (auch Visualisierung)
Satzvektorerstellung mit BERT (Keras BERT)
Chat mit Socket erstellen