Ich habe text2vec verwendet, um benutzerdefinierte Worteinbettungen aus einem Korpus proprietärer Textdaten zu generieren, die eine Menge branchenspezifischer Fachausdrücke enthalten (daher funktionieren Einbettungen wie die von Google verfügbaren nicht). Die Analogien funktionieren großartig, aber ich habe Schwierigkeiten, die Einbettungen anzuwenden, um neue Daten zu bewerten. Ich möchte die Einbettungen verwenden, die ich bereits trainiert habe, um Beziehungen in neuen Daten zu verstehen. Der Ansatz, den ich benutze (unten beschrieben), scheint verschlungen zu sein, und es ist schmerzhaft langsam. Gibt es einen besseren Ansatz? Vielleicht schon etwas eingebaut in das Paket, das ich einfach verpasst habe?Text2vec-Einbettungen auf neue Daten anwenden
Hier ist mein Ansatz (mit dem am nächsten, was zu reproduzierbaren Code bot ich gegeben erzeugen kann, dass ich eine proprietäre Datenquelle bin mit):
d = Liste mit neuen Daten. jedes Element ist der Klassencharakters
VEC = das Wort Vektorisierungen erhielt Form text2vec Implementierung des Handschuhs
new_vecs <- sapply(d, function(y){
it <- itoken(word_tokenizer(y), progressbar=FALSE) # for each statement, create an iterator punctuation
voc <- create_vocabulary(it, stopwords= tm::stopwords()) # for each document, create a vocab
vecs[rownames(vecs) %in% voc$vocab$terms, , drop=FALSE] %>% # subset vecs for the words in the new document, then
colMeans # find the average vector for each document
}) %>% t # close y function and sapply, then transpose to return matrix w/ one row for each statement
Für meinen Anwendungsfall, ich brauche die Ergebnisse für jedes Dokument getrennt zu halten, so alles, was beinhaltet pasting- zusammen werden die elemente von d nicht funktionieren, aber sicherlich muss es einen besseren weg geben als das, was ich zusammengeschustert habe. Ich habe das Gefühl, dass ich etwas ziemlich Offensichtliches vermissen muss.
Jede Hilfe wird sehr geschätzt.