以下是使用 torchtext 进行机器翻译的一个简单示例。

安装 torchtext

首先,确保你已经安装了 torchtext。如果没有安装,可以使用以下命令进行安装:

pip install torchtext

示例代码

以下是一个简单的翻译示例,将英文翻译成法语:

import torch
from torchtext.data import Field, BucketIterator, TabularDataset
from torchtext.data.utils import get_tokenizer

# 定义字段
src_field = Field(tokenize=get_tokenizer('spacy'), init_token='<sos>', eos_token='<eos>', lower=True)
trg_field = Field(tokenize=get_tokenizer('spacy'), init_token='<sos>', eos_token='<eos>', lower=True)

# 加载数据
train_data = TabularDataset(
    path='data/train.csv', format='csv',
    fields=[('src', src_field), ('trg', trg_field)]
)

# 构建词汇表
src_field.build_vocab(train_data.src, min_freq=2)
trg_field.build_vocab(train_data.trg, min_freq=2)

# 创建迭代器
batch_size = 32
train_iterator = BucketIterator(train_data, batch_size=batch_size, sort_key=lambda x: len(x.src), shuffle=True)

# 模拟一个简单的翻译模型
class TranslationModel(torch.nn.Module):
    def __init__(self, input_dim, output_dim, enc_emb_dim, dec_emb_dim, hidden_dim):
        super(TranslationModel, self).__init__()
        self.encoder = torch.nn.Embedding(input_dim, enc_emb_dim)
        self.decoder = torch.nn.Embedding(output_dim, dec_emb_dim)
        self.rnn = torch.nn.GRU(enc_emb_dim, hidden_dim)
        self.fc = torch.nn.Linear(hidden_dim, output_dim)

    def forward(self, src, trg, teacher_force_ratio=0.5):
        # 嵌入层
        src_emb = self.encoder(src)
        trg_emb = self.decoder(trg)
        # RNN
        output, hidden = self.rnn(src_emb, trg_emb)
        # 全连接层
        output = self.fc(output)
        return output

# 实例化模型
input_dim = len(src_field.vocab)
output_dim = len(trg_field.vocab)
enc_emb_dim = 256
dec_emb_dim = 256
hidden_dim = 512
model = TranslationModel(input_dim, output_dim, enc_emb_dim, dec_emb_dim, hidden_dim)

# 训练模型
# ...

# 使用模型进行翻译
# ...

扩展阅读

更多关于 torchtext 的信息,可以参考 torchtext 官方文档

torchtext 示例图片