#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 метка для каждого токена).).