Как я могу загрузить набор данных torchtext для задачи машинного перевода в pytorch?

Я новичок в torchtext. Я использовал набор данных Multi30k для изучения основ. В процессе изучения основ я хотел использовать другие наборы данных, такие как IWSLT2017. Я прочитал документацию, и они показали мне, как я могу загрузить данные.

Вот как я загружал набор данных Multi30k

# creating the fields

SRC = data.Field(
    tokenize = tokenize_de,
    lower= True,
    init_token = "<sos>",
     eos_token = "<eos>"
)
TRG = data.Field(
    tokenize = tokenize_en,
    lower= True,
    init_token = "<sos>",
     eos_token = "<eos>"
)

### Splitting the sets
train_data, valid_data, test_data = datasets.Multi30k.splits(
    exts=('.de', '.en'),
    fields = (SRC, TRG)
)

Когда я запускаю это:

print(vars(train_data.examples[0]))

Я получаю это:

{'src': ['zwei', 'junge', 'weiße', 'männer', 'sind', 'im', 'freien', 'in', 'der', 'nähe', 'vieler', 'büsche', '.'], 'trg': ['two', 'young', ',', 'white', 'males', 'are', 'outside', 'near', 'many', 'bushes', '.']}

Мой вопрос в том, как я могу загрузить IWSLT2017, чтобы получить аналогичный результат, когда я вызываю print(vars(train_data.examples[0])).

Вот что я пробовал:

from torchtext.datasets import IWSLT2017
train_iter, valid_iter, test_iter = IWSLT2017(
    root='.data', split=('train', 'valid', 'test'), language_pair=('it', 'en')
)
src_sentence, tgt_sentence = next(train_iter)

Он возвращает мне кортеж, который выглядит следующим образом:

('Sono impressionato da questa conferenza, e voglio ringraziare tutti voi per i tanti, lusinghieri commenti, anche perché... Ne ho bisogno!!!\n',
 'I have been blown away by this conference, and I want to thank all of you for the many nice comments\n')

Мой вопрос в том, как я могу перейти от этого шага к шагу получения чего-то вроде этого:

{'src': ['zwei', 'junge', 'weiße', 'männer', 'sind', 'im', 'freien', 'in', 'der', 'nähe', 'vieler', 'büsche', '.'], 'trg': ['two', 'young', ',', 'white', 'males', 'are', 'outside', 'near', 'many', 'bushes', '.']}

Любая помощь будет оценена.


person Crispen Gari    schedule 15.07.2021    source источник


Ответы (1)


Для этого вы можете использовать, например, processing_pipeline из spacy. Пример выглядит так:

import spacy
from torchtext.data.utils import get_tokenizer
from torchtext.datasets import IWSLT2017

train_iter, valid_iter, test_iter = IWSLT2017(root='.data', split=('train', 'valid', 'test'), language_pair=('it', 'en'))

src_sentence, tgt_sentence = next(train_iter)
print(src_sentence,tgt_sentence)

nlp = spacy.load("it_core_news_sm")
for doc in nlp.pipe([src_sentence]):
    # Do something with the doc here
    print([(ent.text) for ent in doc])

nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe([tgt_sentence]):
    # Do something with the doc here
    print([(ent.text) for ent in doc])

Вывод первых примеров предложений:

Grazie mille, Chris. E’ veramente un grande onore venire su questo palco due volte. Vi sono estremamente grato.
Thank you so much, Chris. And it's truly a great honor to have the opportunity to come to this stage twice; I'm extremely grateful.

Вывод токенизированных предложений:

['Grazie', 'mille', ',', 'Chris', '.', 'E', '’', 'veramente', 'un', 'grande', 'onore', 'venire', 'su', 'questo', 'palco', 'due', 'volte', '.', 'Vi', 'sono', 'estremamente', 'grato', '.', '\n']
['Thank', 'you', 'so', 'much', ',', 'Chris', '.', 'And', 'it', "'s", 'truly', 'a', 'great', 'honor', 'to', 'have', 'the', 'opportunity', 'to', 'come', 'to', 'this', 'stage', 'twice', ';', 'I', "'m", 'extremely', 'grateful', '.', '\n']
person Markus Gersdorf    schedule 29.07.2021