文本分类是自然语言处理(NLP)中的一个基本任务,它将文本数据分配到预定义的类别中。在这个教程中,我们将使用 PyTorch 框架来构建一个简单的文本分类器。

1. 准备工作

首先,确保你已经安装了 PyTorch 和其他必要的库。你可以通过以下命令来安装:

pip install torch torchvision numpy

2. 数据集

我们可以使用一个常用的文本分类数据集,例如 IMDB 数据集。这个数据集包含了25,000条影评,其中50%是正面评价,50%是负面评价。

import torch
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

# 加载 IMDB 数据集
transform = transforms.Compose([transforms.ToTensor()])
trainset = datasets.IMDB(root='./data', train=True, download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=64, shuffle=True)

3. 模型

接下来,我们定义一个简单的文本分类模型。在这个例子中,我们使用一个简单的循环神经网络(RNN)。

import torch.nn as nn

class TextClassifier(nn.Module):
    def __init__(self):
        super(TextClassifier, self).__init__()
        self.embedding = nn.Embedding(num_embeddings=10000, embedding_dim=100)
        self.rnn = nn.LSTM(input_size=100, hidden_size=128, num_layers=2)
        self.fc = nn.Linear(128, 2)

    def forward(self, x):
        x = self.embedding(x)
        x, _ = self.rnn(x)
        x = self.fc(x[:, -1, :])
        return x

model = TextClassifier()

4. 训练

现在,我们可以开始训练模型了。

criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

for epoch in range(10):  # 训练10个epoch
    for data, target in trainloader:
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()

5. 评估

训练完成后,我们可以使用验证集来评估模型的表现。

correct = 0
total = 0

with torch.no_grad():
    for data, target in testloader:
        output = model(data)
        _, predicted = torch.max(output.data, 1)
        total += target.size(0)
        correct += (predicted == target).sum().item()

print(f'Accuracy of the model on the test images: {100 * correct / total}%')

6. 扩展阅读

如果你对文本分类和 PyTorch 框架有更深入的兴趣,可以阅读以下教程:

希望这个教程能帮助你入门 PyTorch 文本分类。📚👨‍💻

Text Classification