У меня огромная 4-граммовая языковая модель (600 000 словарей, более 350 000 000 n-граммовых записей). Модель является типичной резервной копией, отформатированной в формате ARPA .
Поскольку модель слишком велика для обработки на моем локальном ноутбуке, я хотел бы использовать удаленную среду PySpark для расчета растерянности на моем тестовом наборе.
Однако мне интересно, как реализовать коды PySpark с Dataframe для такого вычисления ppl, потому что кажется, что мне нужно создать словарь и рекурсивное вычисление, чтобы найти n-граммную вероятность, как показано ниже.
NGRAMS = 'Dict of full n-grams, key is a n-gram, value is a tuple of probability and back-off weight'
def get_ngram_prob (self, ngram: Tuple[str]):
prob, _ = NGRAMS.get(ngram)
if prob:
return prob
elif len(ngram) > 0:
bo_ngram ngram[:-1]
rest_ngram = ngram[1:]
p = get_ngram_prob(rest_ngram)
if ngram:
return p * NGRAMS.get(bo_ngram)[1]
else:
return None
else:
return None
Насколько я знаю, PySpark Dataframe не может выполнить такой расчет, поэтому я застрял на нем. Какова лучшая (эффективная) реализация с Spark для расчета выше? Я хотел бы реализовать только с Dataframe из-за скорости.