Загрузка аннотированных вручную данных для обучения RNN POS-тегера

#deep-learning #pytorch #recurrent-neural-network #part-of-speech

#глубокое обучение #pytorch #рекуррентная нейронная сеть #часть речи

Вопрос:

У меня есть большие аннотированные вручную данные. Я хотел бы обучить часть теггера речи, используя RNN. Данные чем-то похожи на текст ниже :

 Lorem <NP> Ipsum <NP> dummy <N> text <ADV> printing <VREL> typesetting <NUMCR> Ipsum <VREL> Ipsum <NP> Ipsum <NP> Lorem <N> Ipsum <NP> Ipsum <N> Ipsum <NP> Lorem <ADJ> Lorem <NP> Ipsum <N> Lorem <VN> Lorem <ADJ> Lorem <N> Lorem <N> ፣ <PUNC> Lorem <ADJ> Lorem <ADJ> Ipsum <NC> Ipsum <NC> Ipsum <NP> 
  

Пожалуйста, объясните мне, как загрузить эти данные для обучения теггера на основе RNN.

Ответ №1:

Чтобы прочитать его, я предлагаю вам преобразовать его в tsv файл с примерами, разделенными пустыми строками (он же формат conll), следующим образом:

 src_fp, tgt_fp = "source/file/path.txt", "target/file/path.tsv"
with open(src_fp) as src_f:
    with open(tgt_fp, 'w') as tgt_f:    
        for line in src_f:
            words = list(line.split(' '))[0::2]
            tags = list(line.split(' '))[1::2]
            for w, t in zip(words, tags):
                tgt_f.write(w 't' t 'n')
                tgt_f.write('n')
  

Затем вы сможете прочитать его с помощью SequenceTaggingDataset torchtext.datasets следующим образом:

 text_field, label_field = data.Field(), data.Field()
pos_dataset = torchtext.datasets.SequenceTaggingDataset(
        path='data/pos/pos_wsj_train.tsv',
        fields=[('text', text_field),
                ('labels', label_field)])
  

последние шаги — создать свой словарь и получить итераторы над вашими данными:

 text_field.build_vocab(pos_dataset)
train_iter = data.BucketIterator.splits(
            (unsup_train, unsup_val, unsup_test), batch_size=MY_BATCH_SIZE, device=MY_DEVICE)
# using the iterator
for ex in self train_iter:
    train(ex.text, ex.labels)
  

Я предлагаю вам уделить время чтению документации об используемых здесь функциях, чтобы вы могли адаптировать их к своим потребностям (максимальный размер словаря, необходимость перетасовки примеров, длина последовательности и т. Д.).
Для построения RNN с помощью for classification очень легко освоить официальный учебник pytorch. Поэтому я предлагаю вам начать с этого и адаптировать сетевые входы и выходы из классификации последовательностей (1 метка для каждого текстового диапазона) к тегированию последовательностей (1 метка для каждого токена).).