Udpipe пакета R использует библиотеку UDPipe версии 1.2 C ++.Скорость аннотации подробно описана в документе (см. Таблицу Таблица 8 в https://doi.org/10.18653/v1/K17-3009).. Если вы хотите ускорить ее, запустите ее параллельно, так как аннотации тривиально распараллеливаются.
Пример ниже распараллеливается для 16 ядер с использованиемparallel :: mclapply дает вам 16-кратное ускорение для больших корпораций, если у вас, конечно, 16 ядер. Вы можете использовать любую имеющуюся инфраструктуру параллелизации, ниже я использовал параллельный пакет - если вы работаете в Windows, вам понадобится, например, parallel :: parLapply, ноничто не мешает вам использовать другие параллельные опции (snow / multicore / future / foreach / ...) для параллельного аннотирования.
library(udpipe)
library(data.table)
library(parallel)
data(brussels_reviews)
comments <- subset(brussels_reviews, language %in% "fr")
ud_model <- udpipe_download_model(language = "french-partut")
annotate_splits <- function(x, file) {
model <- udpipe_load_model(file)
x <- udpipe_annotate(model, x = x$feedback, doc_id = x$id, tagger = "default", parser = "default")
as.data.frame(x, detailed = TRUE)
}
corpus_splitted <- split(comments, seq(1, nrow(comments), by = 100))
annotation <- mclapply(corpus_splitted, FUN = function(x, file){
annotate_splits(x, file)
}, file = ud_model$file_model, mc.cores = 16)
annotation <- rbindlist(annotation)
Обратите внимание, что udpipe_load_model также занимает некоторое время, поэтому, вероятно, лучшая стратегия - параллелизацияэто число ядер, которые у вас есть на вашей машине, а не кусками по 100, как я показал выше.