Я получаю ошибку подтверждения при использовании FastBPE - PullRequest
0 голосов
/ 16 марта 2020

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

  • arg1 = $DATADIR - это путь к каталогу, где находятся 3 файла: fr.train, fr.valid и fr.test (эти файлы где произведен другим скриптом)

  • arg2 = $BPE номер размера словаря

Почему-то я сталкиваюсь с ошибкой при попытке исправить размер словаря в 25к. Не могли бы вы помочь мне решить это?


ke@hyper:~/eXP/Flaubert$ bash tools/create_pretraining_data.sh ~/eXP/Flaubert/fr_corpus 21
Loading vocabulary from /home/get/kelo/eXP/Flaubert/data/processed/fr_cor
Read 324751 words (13282 unique) from text file.
Loading codes from /home/get/kelo/eXP/Flaubert/data/processed/fr_corpus/B
fast: fastBPE/fastBPE.hpp:458: void fastBPE::readCodes(const char*, std::unorderxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastordered_map<std::__cxx11::basic_string<char>, std::pair<std::__cxx11::basic_striasic_string<char> > >&): Assertion `codes.find(pair) == codes.end()' failed.
tools/create_pretraining_data.sh : ligne 38 : 11652 Abandon                 $FASrain.$lg $DATA_DIR/$lg.train $OUT_PATH/codes
Loading codes from /home/get/kelo/eXP/Flaubert/data/processed/fr_corpus/B
fast: fastBPE/fastBPE.hpp:458: void fastBPE::readCodes(const char*, std::unorderxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastordered_map<std::__cxx11::basic_string<char>, std::pair<std::__cxx11::basic_striasic_string<char> > >&): Assertion `codes.find(pair) == codes.end()' failed.
tools/create_pretraining_data.sh : ligne 39 : 11653 Abandon                 $FASalid.$lg $DATA_DIR/$lg.valid $OUT_PATH/codes
Loading codes from /home/get/kelo/eXP/Flaubert/data/processed/fr_corpus/B
fast: fastBPE/fastBPE.hpp:458: void fastBPE::readCodes(const char*, std::unorderxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastordered_map<std::__cxx11::basic_string<char>, std::pair<std::__cxx11::basic_striasic_string<char> > >&): Assertion `codes.find(pair) == codes.end()' failed.
tools/create_pretraining_data.sh : ligne 40 : 11654 Abandon                 $FASest.$lg $DATA_DIR/$lg.test $OUT_PATH/codes
cat: /home/get/kelo/eXP/Flaubert/data/processed/fr_corpus/BPE/21k/train.fer de ce type
Read 0 words (0 unique) from text file.
Traceback (most recent call last):
  File "preprocess.py", line 30, in <module>
    assert os.path.isfile(txt_path)
AssertionError
Traceback (most recent call last):
  File "preprocess.py", line 30, in <module>
    assert os.path.isfile(txt_path)
AssertionError
Traceback (most recent call last):
  File "preprocess.py", line 30, in <module>
    assert os.path.isfile(txt_path)
AssertionError

файл предварительной обработки выглядит так:

import os
import sys

from xlm.logger import create_logger
from xlm.data.dictionary import Dictionary


if __name__ == '__main__':

    logger = create_logger(None, 0)

    voc_path = sys.argv[1]
    txt_path = sys.argv[2]
    bin_path = sys.argv[2] + '.pth'
    assert os.path.isfile(voc_path)
    assert os.path.isfile(txt_path)  # pb come from this line

    dico = Dictionary.read_vocab(voc_path)
    logger.info("")

    data = Dictionary.index_data(txt_path, bin_path, dico)
    logger.info("%i words (%i unique) in %i sentences." % (
        len(data['sentences']) - len(data['positions']),
        len(data['dico']),
        len(data['positions'])
    ))
    if len(data['unk_words']) > 0:
        logger.info("%i unknown words (%i unique), covering %.2f%% of the data." % (
            sum(data['unk_words'].values()),
            len(data['unk_words']),
            sum(data['unk_words'].values()) * 100. / (len(data['sentences']) - len(data['positions']))
        ))
        if len(data['unk_words']) < 30:
            for w, c in sorted(data['unk_words'].items(), key=lambda x: x[1])[::-1]:
                logger.info("%s: %i" % (w, c))

...