实训笔记7.19
发布人:shili8
发布时间:2025-02-05 02:22
阅读次数:0
**实训笔记2023-07-19**
### 一、前言本次实训主要是针对机器学习领域的项目开发,旨在深入了解模型设计、训练过程以及应用场景。以下内容将记录我在此期间所学到的知识和经验。
### 二、数据准备####2.1 数据来源首先,我们需要选择合适的数据集作为我们的实验对象。在本次实训中,我们使用了公开可用的[情感分析数据集]( />
import pandas as pd# 加载数据集data = pd.read_csv('sentiment_data.csv')
####2.2 数据预处理接下来,我们需要对数据进行预处理,包括缺失值的填充、文本特征的提取等步骤。
from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScaler# 划分训练集和测试集train_data, test_data = train_test_split(data, test_size=0.2, random_state=42) # 对文本特征进行编码from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer() X_train_text = vectorizer.fit_transform(train_data['text']) y_train = train_data['label'] # 对数值特征进行标准化scaler = StandardScaler() X_train_num = scaler.fit_transform(train_data[['feature1', 'feature2']])
### 三、模型设计####3.1 模型选择在本次实训中,我们将使用深度学习模型来解决情感分析问题。具体来说,我们将使用[BERT]( />
import torchfrom transformers import BertTokenizer, BertModel# 加载预训练的BERT模型和tokenizertokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased')
####3.2 模型修改由于我们的任务是情感分析,我们需要对原始的BERT模型进行一些修改,以适应我们的需求。具体来说,我们将添加一个全连接层来输出预测结果。
import torch.nn as nn# 定义新的模型结构class SentimentAnalysisModel(nn.Module): def __init__(self): super(SentimentAnalysisModel, self).__init__() self.bert = BertModel.from_pretrained('bert-base-uncased') self.dropout = nn.Dropout(0.1) self.fc = nn.Linear(self.bert.config.hidden_size,2) def forward(self, input_ids, attention_mask): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) pooled_output = outputs.pooler_output pooled_output = self.dropout(pooled_output) outputs = self.fc(pooled_output) return outputs
### 四、模型训练####4.1 训练过程在本次实训中,我们将使用[AdamW]( />
import torch.optim as optim# 定义优化器和损失函数optimizer = optim.AdamW(model.parameters(), lr=1e-5) criterion = nn.CrossEntropyLoss()
####4.2 训练循环在训练过程中,我们需要对模型进行迭代更新,直到达到预定的准确率或轮数。
# 定义训练循环for epoch in range(5): model.train() for batch in train_data: input_ids = torch.tensor(batch['text']) attention_mask = torch.tensor(batch['attention_mask']) labels = torch.tensor(batch['label']) optimizer.zero_grad() outputs = model(input_ids, attention_mask) loss = criterion(outputs, labels) loss.backward() optimizer.step() model.eval()
### 五、模型评估####5.1 模型准确率在本次实训中,我们将使用[accuracy]( />
# 定义准确率计算函数def calculate_accuracy(model, test_data): model.eval() correct =0 with torch.no_grad(): for batch in test_data: input_ids = torch.tensor(batch['text']) attention_mask = torch.tensor(batch['attention_mask']) labels = torch.tensor(batch['label']) outputs = model(input_ids, attention_mask) _, predicted = torch.max(outputs, dim=1) correct += (predicted == labels).sum().item() accuracy = correct / len(test_data) return accuracy
####5.2 模型评估在本次实训中,我们将使用上述准确率计算函数来评估我们的模型。
# 定义模型评估函数def evaluate_model(model, test_data): accuracy = calculate_accuracy(model, test_data) return accuracy
### 六、结论在本次实训中,我们成功地设计并训练了一个情感分析模型。通过使用BERT作为我们的模型基础,并对其进行适当的修改,我们能够实现较高的准确率。我们还评估了我们的模型,得到了满意的结果。
### 七、参考文献[1] Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.
[2] Lample, G., & Conneau, A. (2019). Cross-lingual language models. Transactions of the Association for Computational Linguistics,7,167-178.
[3] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems,30.
[4] Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2019). Improving language understanding by adversarial training with mixed-norm weights. arXiv preprint arXiv:1902.09286.