Проблема Fastai с TextLMDataBunch и language_model_learner - PullRequest
0 голосов
/ 30 декабря 2018

Пытался повторить этот код , используя fastai lib, но я работаю над двумя основными проблемами.

  1. Эта часть кода:

    data_lm = TextLMDataBunch.from_df ('data', train_df, valid_df, text_cols = 'idea')

Дает такой тип ошибки:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-39-74ec5bcc1e2a> in <module>
----> 1 data_lm = TextLMDataBunch.from_df('data', train_df, valid_df, text_cols='idea')

~\Anaconda3\lib\site-packages\fastai\text\data.py in from_df(cls, path, train_df, valid_df, test_df, tokenizer, vocab, **kwargs)
    325         k_names = ['max_vocab', 'min_freq', 'n_labels', 'txt_cols', 'label_cols', 'clear_cache']
    326         txt_kwargs, kwargs = extract_kwargs(k_names, kwargs)
--> 327         train_ds = TextDataset.from_df(path, train_df, tokenizer, 'train', vocab=vocab, **txt_kwargs)
    328         datasets = [train_ds, TextDataset.from_df(path, valid_df, tokenizer, 'valid', vocab=train_ds.vocab, **txt_kwargs)]
    329         if test_df is not None: datasets.append(TextDataset.from_df(path, test_df, tokenizer, 'test', vocab=train_ds.vocab, **txt_kwargs))

~\Anaconda3\lib\site-packages\fastai\text\data.py in from_df(cls, folder, df, tokenizer, name, **kwargs)
    150         tokenizer = ifnone(tokenizer, Tokenizer())
    151         chunksize = 1 if (type(df) == DataFrame) else df.chunksize
--> 152         return cls(folder, tokenizer, df=df, create_mtd=TextMtd.DF, name=name, chunksize=chunksize, **kwargs)
    153 
    154     @classmethod

~\Anaconda3\lib\site-packages\fastai\text\data.py in __init__(self, path, tokenizer, vocab, max_vocab, chunksize, name, df, min_freq, n_labels, txt_cols, label_cols, create_mtd, classes, clear_cache)
     35         os.makedirs(self.path, exist_ok=True)
     36         if clear_cache: self.clear()
---> 37         if not self.check_toks(): self.tokenize()
     38         if not self.check_ids():  self.numericalize()
     39 

~\Anaconda3\lib\site-packages\fastai\text\data.py in tokenize(self)
     86             df = next(dfs) if (type(dfs) == pd.io.parsers.TextFileReader) else self.df
     87             lbl_type = np.float32 if len(self.label_cols) > 1 else np.int64
---> 88             lbls = df[self.label_cols].values.astype(lbl_type) if (len(self.label_cols) > 0) else []
     89             self.txt_cols = ifnone(self.txt_cols, list(range(len(self.label_cols),len(df.columns))))
     90             texts = f'{FLD} {1} ' + df[self.txt_cols[0]].astype(str)

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2680         if isinstance(key, (Series, np.ndarray, Index, list)):
   2681             # either boolean or fancy integer index
-> 2682             return self._getitem_array(key)
   2683         elif isinstance(key, DataFrame):
   2684             return self._getitem_frame(key)

~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
   2724             return self._take(indexer, axis=0)
   2725         else:
-> 2726             indexer = self.loc._convert_to_indexer(key, axis=1)
   2727             return self._take(indexer, axis=1)
   2728 

~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
   1325                 if mask.any():
   1326                     raise KeyError('{mask} not in index'
-> 1327                                    .format(mask=objarr[mask]))
   1328 
   1329                 return com._values_from_object(indexer)

KeyError: '[0] not in index'

и эточасть кода:

learn = language_model_learner(data_lm, pretrained_model=URLs.WT103, drop_mult=0.5)
learn.fit_one_cycle(1, 1e-2)

Запуск с этой ошибкой:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-37-7b61575a202a> in <module>
----> 1 learn = language_model_learner(data_lm, pretrained_model=URLs.WT103, drop_mult=0.5)
      2 learn.fit_one_cycle(1, 1e-2)

NameError: name 'language_model_learner' is not defined

У меня были проблемы с установкой fastai, но я понятия не имею, в чем проблема.

1 Ответ

0 голосов
/ 04 марта 2019

Ну, ваш вопрос был 2 месяца назад, и с тех пор библиотека претерпела множество изменений.Мне кажется, что ваша первая ошибка в том, что вы не указываете столбец с метками, для self.labels_cols установлено значение [0], и в результате его нет в индексе вашего Dataframe.Я полагаю, что это поведение изменилось с тех пор, как вы опубликовали ваш пост, и что сегодня, не указав label_cols, будет работать так, как задумано.

Что касается вашей второй проблемы, раньше я имел обыкновение вызывать vulague_model_learner до рефакторинга.Была ли у вас последняя версия fastai, когда вы пытались ее использовать.Не стесняйтесь проверить это снова с последней версией fastai и посмотрите, есть ли такие же ошибки.

...