Что такое файл * .subwords в обработке естественного языка для использования в качестве словарного файла?

#nlp #data-science #tokenize #vocabulary #trax

#nlp #наука о данных #маркировать #словарь #trax

Вопрос:

Я пытался создать файл vocab в задаче nlp для использования в методе токенизации trax для токенизации слова, но я не могу найти, какой модуль / библиотеку использовать для создания файла * .subwords . Пожалуйста, помогите мне?

Ответ №1:

Самый простой способ использовать trax.data.Маркируйте свои собственные данные и словарный запас подслова, используя модуль python от Google Sentencepiece

 import sentencepiece as spm

spm.SentencePieceTrainer.train('--input=data/my_data.csv --model_type=bpe --model_prefix=my_model --vocab_size=32000')
 

Это создает два файла:

  • my_model.model
  • my_model.vocab

Мы будем использовать эту модель в trax.data.Маркируйте, и мы добавим параметр vocab_type со значением «sentencepiece»

 trax.data.Tokenize(vocab_dir='vocab/', vocab_file='my_model.model', vocab_type='sentencepiece')
 

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

 sp = spm.SentencePieceProcessor()
sp.load('my_model.model')

print('bos=sp.bos_id()=', sp.bos_id())
print('eos=sp.eos_id()=', sp.eos_id())
print('unk=sp.unk_id()=', sp.unk_id())
print('pad=sp.pad_id()=', sp.pad_id()) 

sentence = "hello world"
# encode: text => id
print("Pieces: ", sp.encode_as_pieces(sentence))
print("Ids: ", sp.encode_as_ids(sentence))
# decode: id => text
print("Decode Pieces: ", sp.decode_pieces(sp.encode_as_pieces(sentence)))
print("Decode ids: ", sp.decode_ids(sp.encode_as_ids(sentence)))

print([sp.bos_id()]   sp.encode_as_ids(sentence)   [sp.eos_id()])
 

Если вы все еще хотите иметь файл с вложенными словами, попробуйте это:

 python trax/data/text_encoder_build_subword.py 
--corpus_filepattern=data/data.txt --corpus_max_lines=40000 
--output_filename=data/my_file.subword
 

Я надеюсь, что это может помочь, поскольку нет четкой литературы, чтобы узнать, как создавать совместимые файлы вложенных слов

Ответ №2:

Вы можете использовать tensorflow API SubwordTextEncoder

Используйте следующий фрагмент кода —

 encoder = tfds.deprecated.text.SubwordTextEncoder.build_from_corpus(
    (text_row for text_row in text_dataset), target_vocab_size=2**15)
encoder.save_to_file(vocab_fname)
 

Tensorflow добавит расширение .subwords к вышеуказанному файлу vocab.