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