Как рассчитать растерянность на огромной n-граммовой языковой модели с помощью Spark - PullRequest
0 голосов
/ 14 марта 2020

У меня огромная 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 из-за скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...