[PYTHON] Liste der gebrauchsfertigen Worteinbettungsvektoren

Einführung

Das Einbetten von Wörtern ist eine Technik zum Ausdrücken von Wörtern als niedrigdimensionale (obwohl es ungefähr 200 Dimensionen gibt) reelle Zahlenvektoren. Es zeichnet sich dadurch aus, dass Wörter mit ähnlichen Bedeutungen mit engen Vektoren verknüpft werden können und durch Addieren und Subtrahieren von Vektoren ein aussagekräftiges Ergebnis erzielt werden kann (z. B. König - Mann + Frauen = Königin).

Worteinbettungsvektoren sind eine wichtige Technik, die in verschiedenen Anwendungen zur Verarbeitung natürlicher Sprache verwendet wird, z. B. zum Markieren von Teilwörtern, zum Abrufen von Informationen und zum Fragen und Antworten. ** Die eigentliche Vorbereitungsarbeit ist jedoch eine entmutigende Aufgabe **. Laden Sie eine große Datenmenge herunter, verarbeiten Sie sie vor, trainieren Sie sie über einen langen Zeitraum, sehen Sie sich die Ergebnisse an und optimieren Sie die Parameter.

Es ist also einfacher, einen trainierten Vektor zu verwenden, wenn Sie ihn nur verwenden möchten. Also habe ich diejenigen, die gerade verwendet werden können, aus solchen Worteinbettungsvektoren ausgewählt.

Die Informationen zum eingebetteten Vektor sind im folgenden Repository zusammengefasst. Überprüfen Sie sie daher auch. awesome-embedding-models

Zunächst die drei Klassiker: Word2Vec, GloVe, fastText

Word2Vec

Ein Wort Kommentar Unnötig zu erwähnen, dass Word2Vec einen vorab trainierten Vektor hat. Wenn Sie nicht wissen, was Sie verwenden sollen, können Sie es verwenden.
Jahre der Ankündigung 2013
URL https://code.google.com/archive/p/word2vec/

Mehrsprachig trainierte Vektoren, einschließlich Japanisch, können über die folgenden Links abgerufen werden:

GloVe

Ein Wort Kommentar GloVe, auf das Stanford stolz ist. Es behauptet, eine bessere Leistung als Word2Vec zu haben. Wir haben einen Wortvektor gelernt, der mit einem globalen Matrixzerlegungsmodell und einem lokalen Kontextfenstermodell kombiniert werden kann.
Jahre der Ankündigung 2014
URL http://nlp.stanford.edu/projects/glove/

fastText

Ein Wort Kommentar FastText erstellt von Mikolov, dem Genie, das Word2Vec erstellt hat. Wie auch immer, das Lernen ist schnell. Um die Morphologie zu berücksichtigen, wird jedes Wort durch den Buchstaben ngram ausgedrückt und ihr Vektorausdruck wird gelernt.
Jahre der Ankündigung 2016
URL1 Download Word Vectors
URL2 Download Word Vectors(NEologd)

※ nur Japanisch

Ich habe unten geschrieben, einschließlich der Verwendung. Das trainierte Modell von fastText wurde veröffentlicht

Drei Vektoren vor dem Lernen mit den neuesten Errungenschaften

Dependency-Based Word Embeddings

Ein Wort Kommentar Worteinbettungsvektor von Levy et al. Durch das Training mit Abhängigkeiten wurde ich in syntaktischen Aufgaben stärker. Dies kann hilfreich sein, wenn Sie es für syntaktische Aufgaben verwenden möchten.
Jahre der Ankündigung 2014
URL https://levyomer.wordpress.com/2014/04/25/dependency-based-word-embeddings/

Meta-Embeddings

Ein Wort Kommentar Meta auf der ACL 2016 angekündigt-Einbettungen. Bessere Vektoren durch Kombinieren von Sätzen von in Wörter eingebetteten Vektoren mit unterschiedlichen Eigenschaften(meta embedding)Erfolgreich zu bekommen. Der Vorteil ist, dass die Vokabularabdeckung durch Kombinieren von Vektorsätzen erhöht werden kann.
Jahre der Ankündigung 2016
URL http://cistern.cis.lmu.de/meta-emb/

LexVec

Ein Wort Kommentar Dies wird auch von LexVec auf der ACL2016 angekündigt. Die Wortähnlichkeitsaufgabe übertrifft Word2Vec in einigen Bewertungssätzen.
Jahre der Ankündigung 2016
URL https://github.com/alexandres/lexvec

Bonus: Verwendung des heruntergeladenen Vektors

Ich werde schreiben, wie man den vorab trainierten Vektor von Word2Vec liest, der häufig verwendet wird.

Es ist super einfach zu lesen. Installieren Sie einfach gensim und schreiben Sie den folgenden Code.

import gensim

# Load Google's pre-trained Word2Vec model.
model = gensim.models.KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin', binary=True)

Sie können den folgenden Code schreiben, um eine Bewertung vorzunehmen. Beachten Sie, dass Sie die Auswertungsdaten question-words.txt herunterladen müssen, bevor Sie ausgeführt werden.

import logging
import pprint

# for logging                                                                                                                                                                                                                                                                      
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# Load evaluation dataset of analogy task                                                                                                                                                                                                                                          
model.accuracy('questions-words.txt')
# execute analogy task like king - man + woman = queen                                                                                                                                                                                                                             
pprint.pprint(model.most_similar(positive=['woman', 'king'], negative=['man']))

Wenn Sie den geschriebenen Code ausführen, werden die folgenden Bewertungsergebnisse ausgegeben.

2017-01-20 09:29:11,767 : INFO : loading projection weights from ./GoogleNews-vectors-negative300.bin
2017-01-20 09:30:10,891 : INFO : loaded (3000000, 300) matrix from ./GoogleNews-vectors-negative300.bin
2017-01-20 09:30:10,994 : INFO : precomputing L2-norms of word weight vectors
2017-01-20 09:30:42,097 : INFO : capital-common-countries: 83.6% (423/506)
2017-01-20 09:30:49,899 : INFO : capital-world: 82.7% (1144/1383)
2017-01-20 09:30:50,795 : INFO : currency: 39.8% (51/128)
2017-01-20 09:31:03,579 : INFO : city-in-state: 74.6% (1739/2330)
2017-01-20 09:31:05,574 : INFO : family: 90.1% (308/342)
2017-01-20 09:31:09,928 : INFO : gram1-adjective-to-adverb: 32.3% (262/812)
2017-01-20 09:31:12,052 : INFO : gram2-opposite: 50.5% (192/380)
2017-01-20 09:31:19,719 : INFO : gram3-comparative: 91.9% (1224/1332)
2017-01-20 09:31:23,574 : INFO : gram4-superlative: 88.0% (618/702)
2017-01-20 09:31:28,210 : INFO : gram5-present-participle: 79.8% (694/870)
2017-01-20 09:31:35,082 : INFO : gram6-nationality-adjective: 97.1% (1193/1229)
2017-01-20 09:31:43,390 : INFO : gram7-past-tense: 66.5% (986/1482)
2017-01-20 09:31:49,136 : INFO : gram8-plural: 85.6% (849/992)
2017-01-20 09:31:53,394 : INFO : gram9-plural-verbs: 68.9% (484/702)
2017-01-20 09:31:53,396 : INFO : total: 77.1% (10167/13190)
[('queen', 0.7118192315101624),
 ('monarch', 0.6189674139022827),
 ('princess', 0.5902431011199951),
 ('crown_prince', 0.5499460697174072),
 ('prince', 0.5377321839332581),
 ('kings', 0.5236844420433044),
 ('Queen_Consort', 0.5235946178436279),
 ('queens', 0.5181134343147278),
 ('sultan', 0.5098593235015869),
 ('monarchy', 0.5087412595748901)]

Wenn wir uns dieses Ergebnis ansehen, können wir sehen, dass die Gesamtgenauigkeit ** 77,1% ** beträgt.

Wortvektoren wie GloVe können übrigens fast genauso gelesen werden.

abschließend

In diesem Artikel haben wir einige vorab trainierte Vektoren von Worteinbettungsvektoren vorgestellt. Sofern Sie kein bestimmtes Motiv haben, selbst zu lernen, empfehlen wir die Verwendung dieser vorab trainierten Vektoren.

Recommended Posts

Liste der gebrauchsfertigen Worteinbettungsvektoren
Liste der Python-Module
Kopie mehrerer Listen
Liste der Aktivierungsfunktionen (2020)
Tiefe der verschachtelten Liste
Anzeige von Brüchen (Liste)
GloVe: Prototyp der Worteinbettung durch Glovalvektoren zur Wortrepräsentation
Zusammenfassung der Python3-Listenoperationen
Filterbetrieb (Keine, Liste)
Liste der Knoten in Diagrammen
Liste der selbst erstellten Docker-Bilder
Mehrdimensionale Array-Initialisierung der Liste
[Python] Kopie einer mehrdimensionalen Liste
Liste nützlicher Codierungsstile