探索词嵌入与模型构建:从文本分类到多领域应用
立即解锁
发布时间: 2025-08-31 01:07:03 阅读量: 16 订阅数: 16 AIGC 


企业级NLP实战指南
### 探索词嵌入与模型构建:从文本分类到多领域应用
#### 1. 模型构建
我们的目标是尝试不同的词嵌入方法,并观察它们在简单数据集上的性能表现。为了遵循快速实验原则,我们将使用 PyTorch 内置的一些简单默认模型,而不采用现代研究中的复杂新架构和训练技术。需要注意的是,由于没有使用高级技术,我们的模型与当前先进水平相比性能可能较差,因此不建议将这里的代码用于实际项目或生产环境。
模型主要由以下部分组成:
- **预训练嵌入层**:使用已下载的 GloVe 向量进行数组查找。
- **标准 RNN 模块**:`nn.RNN()` 在 PyTorch 中实现了简单的循环神经网络。
- **分类头**:由两个全连接层组成,最后一层输出一个数字,通过 sigmoid 函数得到预测结果。
以下是 RNN 分类器模型的定义代码:
```python
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
class RNN_classifier(nn.Module):
def __init__(self, embedding_size = 100, hidden_size = 512, num_layers = 3):
super().__init__()
# Set up an embedding layer with the right dimensions,
# and copy the weights from the pretrained glove embeddings
vocab = TEXT.vocab
self.embed = nn.Embedding(len(vocab), embedding_size).cuda()
self.embed.weight.data.copy_(vocab.vectors)
# Set up a standard PyTorch RNN sections with the right
# dimensions and a variable number of layers
self.rnn = nn.RNN(embedding_size, hidden_size, num_layers)
# Add a two layer classification head with the right dimensions.
# The final layer must output a single number
self.classificationLayer1 = nn.Linear(hidden_size,10)
self.classificationLayer2 = nn.Linear(10,1)
def forward(self, input, lengths=None):
embed_input = self.embed(input)
packed_emb = nn.utils.rnn.pack_padded_sequence(embed_input,
lengths, batch_first=False)
output, hidden = self.rnn(packed_emb)
hidden = hidden[-1]
x = hidden.squeeze(0)
x = self.classificationLayer1(x)
x = self.classificationLayer2(x)
logits = x.view(-1)
return logits
```
创建 RNN 分类器的实例:
```python
model = RNN_classifier(hidden_size=256, num_layers=1)
dev = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(dev)
```
快速测试,运行一批训练数据并检查输出形状:
```python
for batch in train_iter:
(x,x_len) = batch.text
pred = model(x,x_len)
print(pred.shape)
break
```
#### 2. 训练过程
设置超参数:
```python
loss_func = F.binary_cross_entropy_with_logits
opt = optim.Adam(model.parameters(), lr=1e-4)
epochs = 6
```
定义计算模型准确率的函数:
```python
def get_metrics(model, test_data):
model.eval()
correct, total = 0, 0
with torch.no_grad():
for batch_idx, batch_data in enumerate(test_data):
text, text_lengths = batch_data.text
logits = model(text, tex
```
0
0
复制全文
相关推荐









