给我一个示例,使用jieba,跑一个pytorch的网络
时间: 2024-04-10 08:35:09 浏览: 14
以下是一个示例,展示如何使用 jieba 分词库和 PyTorch 搭建一个简单的文本分类网络:
```python
import torch
import torch.nn as nn
import torch.optim as optim
import jieba
# 定义数据
texts = ['我喜欢这个电影', '这部电影太无聊了', '这个手机很好用', '这个产品质量不错']
labels = [1, 0, 1, 1]
# 分词处理
def tokenize(text):
seg_list = jieba.lcut(text)
return seg_list
tokenized_texts = [tokenize(text) for text in texts]
# 构建词汇表
word2index = {}
for text in tokenized_texts:
for word in text:
if word not in word2index:
word2index[word] = len(word2index)
# 转换为索引序列
indexed_texts = [[word2index[word] for word in text] for text in tokenized_texts]
# 定义模型
class TextClassifier(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
super(TextClassifier, self).__init__()
self.embedding = nn.Embedding(vocab_size, embedding_dim)
self.fc = nn.Linear(embedding_dim, hidden_dim)
self.relu = nn.ReLU()
self.out = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
embedded = self.embedding(x)
hidden = self.relu(self.fc(embedded.mean(dim=1)))
output = self.out(hidden)
return output
# 参数设置
vocab_size = len(word2index)
embedding_dim = 100
hidden_dim = 50
output_dim = 2
learning_rate = 0.001
num_epochs = 10
# 初始化模型、损失函数和优化器
model = TextClassifier(vocab_size, embedding_dim, hidden_dim, output_dim)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
# 转换为张量
inputs = torch.LongTensor(indexed_texts)
labels = torch.LongTensor(labels)
# 训练模型
for epoch in range(num_epochs):
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
if (epoch+1) % 2 == 0:
print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item():.4f}')
# 测试模型
with torch.no_grad():
test_text = '这个电影真棒'
test_tokens = tokenize(test_text)
test_indexes = [word2index[word] for word in test_tokens]
test_input = torch.LongTensor(test_indexes).unsqueeze(0)
predictions = model(test_input)
_, predicted_label = torch.max(predictions, 1)
print(f'Test Text: {test_text}, Predicted Label: {predicted_label.item()}')
```
在这个示例中,我们使用 jieba 分词库对文本进行分词处理,并将分词结果转换为索引序列。然后,我们定义了一个简单的文本分类模型 `TextClassifier`,包含一个嵌入层、全连接层和输出层。模型训练过程中使用交叉熵损失函数和 Adam 优化器。最后,我们使用训练好的模型对一个测试文本进行分类预测。请注意,这个示例只是一个简单的演示,实际应用中可能需要更复杂的网络结构和更大规模的数据集。