Воспроизведение FastText - это 'nan', но точность - это число

Я обучил контролируемую модель в FastText, используя интерфейс Python, и получаю странные результаты по точности и отзыву.

Сначала я обучил модель:

model = fasttext.train_supervised("train.txt", wordNgrams=3, epoch=100, pretrainedVectors=pretrained_model)

Затем я получаю результаты для тестовых данных:

def print_results(N, p, r):
    print("N\t" + str(N))
    print("P@{}\t{:.3f}".format(1, p))
    print("R@{}\t{:.3f}".format(1, r))

print_results(*model.test('test.txt'))

Но результаты всегда нечетные, потому что они показывают точность и напоминают @ 1 как идентичные даже для разных наборов данных, например. один вывод:

N   46425
P@1 0.917
R@1 0.917

Затем, когда я ищу точность и напоминание для каждого ярлыка, я всегда получаю напоминание как «nan»:

print(model.test_label('test.txt'))

И вывод:

{'__label__1': {'precision': 0.9202150724134941, 'recall': nan, 'f1score': 1.8404301448269882}, '__label__5': {'precision': 0.9134956983264135, 'recall': nan, 'f1score': 1.826991396652827}}

Кто-нибудь знает, почему это может происходить?

PS: Чтобы попробовать воспроизводимый пример такого поведения, обратитесь к https://github.com/facebookresearch/fastText/issues/1072 и запустите его с FastText 0.9.2.


person abstrakkt    schedule 14.05.2020    source источник
comment
Может быть, github.com/facebookresearch/fastText/issues/192 может помочь   -  person Stefano Fiorucci - anakin87    schedule 14.05.2020
comment
Спасибо за ссылку. Но, похоже, это проблема с этикетками, и я почти уверен, что это не для меня, потому что я получаю число для N и реальное значение точности, просто не помню. А пока просто напишу свои функции для расчета PR: /   -  person abstrakkt    schedule 14.05.2020


Ответы (1)


Похоже, в FastText 0.9.2 есть ошибка в вычислении отзыва, и ее следует исправить с помощью этот коммит.

Установка новейшей версии FastText, например с участием

pip install git+https://github.com/facebookresearch/fastText.git@b64e359d5485dda4b4b5074494155d18e25c8d13 --quiet

и повторный запуск вашего кода должен позволить избавиться от значений nan при вычислении отзыва.

person Davide Fiocco    schedule 20.05.2020
comment
Это устранило проблему! Спасибо за расследование. - person abstrakkt; 22.05.2020