首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pytorch中加载用于机器翻译任务的torchtext数据集?

如何在pytorch中加载用于机器翻译任务的torchtext数据集?
EN

Stack Overflow用户
提问于 2021-07-16 01:21:02
回答 1查看 314关注 0票数 0

我是torchtext的新手,我一直在使用Multi30k数据集学习基础知识。在学习基础知识的过程中,我想使用其他的数据集,比如IWSLT2017。我阅读了文档,他们向我展示了如何加载数据。

这就是我加载Multi30k数据集的方式

代码语言:javascript
运行
复制
# 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)
)

当我运行以下命令时:

代码语言:javascript
运行
复制
print(vars(train_data.examples[0]))

我明白了:

代码语言:javascript
运行
复制
{'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', '.']}

我的问题是,当我调用print(vars(train_data.examples[0]))时,如何加载IWSLT2017才能获得类似的结果。

下面是我尝试过的:

代码语言:javascript
运行
复制
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)

它返回一个元组,如下所示:

代码语言:javascript
运行
复制
('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')

我的问题是,我如何才能从这一步转到获得如下内容的步骤:

代码语言:javascript
运行
复制
{'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', '.']}

我们将非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-07-29 16:24:01

为此,您可以使用例如spacy的processing_pipeline。示例如下所示:

代码语言:javascript
运行
复制
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])

第一个例句的输出:

代码语言:javascript
运行
复制
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.

标记化句子的输出:

代码语言:javascript
运行
复制
['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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68398231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档