金融市场中的NLP——情感分析( 五 )


金融市场中的NLP——情感分析文章插图
由于输入数据不平衡 , 因此评估以F1分数为基础 , 同时也参考了准确性 。
def metric(y_true, y_pred):acc = accuracy_score(y_true, y_pred)f1 = f1_score(y_true, y_pred, average='macro')return acc, f1scoring = {'Accuracy': 'accuracy', 'F1': 'f1_macro'}refit = 'F1'kfold = StratifiedKFold(n_splits=5)模型A和B使用网格搜索交叉验证 , 而C和D的深层神经网络模型使用自定义交叉验证 。
# 分层KFoldskf = StratifiedKFold(n_splits=5, shuffle=True, random_state=rand_seed)# 循环for n_fold, (train_indices, valid_indices) in enumerate(skf.split(y_train, y_train)):# 模型model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=3)# 输入数据x_train_fold = x_train[train_indices]y_train_fold = y_train[train_indices]x_valid_fold = x_train[valid_indices]y_valid_fold = y_train[valid_indices]# 训练train_bert(model, x_train_fold, y_train_fold, x_valid_fold, y_valid_fold)结果基于BERT的微调模型在花费了或多或少相似的超参数调整时间之后 , 明显优于其他模型 。
金融市场中的NLP——情感分析文章插图
模型A表现不佳 , 因为输入过于简化为情感得分 , 情感分数是判断情绪的单一值 , 而随机森林模型最终将大多数数据标记为中性 。 简单的线性模型只需对情感评分应用阈值就可以获得更好的效果 , 但在准确度和f1评分方面仍然很低 。
金融市场中的NLP——情感分析文章插图
金融市场中的NLP——情感分析文章插图
我们没有使用欠采样/过采样或SMOTE等方法来平衡输入数据 , 因为它可以纠正这个问题 , 但会偏离存在不平衡的实际情况 。 如果可以证明为每个要解决的问题建立一个词典的成本是合理的 , 这个模型的潜在改进是建立一个自定义词典 , 而不是L-M词典 。
模型B比前一个模型好得多 , 但是它以几乎100%的准确率和f1分数拟合了训练集 , 但是没有被泛化 。 我试图降低模型的复杂度以避免过拟合 , 但最终在验证集中的得分较低 。 平衡数据可以帮助解决这个问题或收集更多的数据 。
金融市场中的NLP——情感分析文章插图
金融市场中的NLP——情感分析文章插图
模型C产生了与前一个模型相似的结果 , 但改进不大 。 事实上 , 训练数据的数量不足以从零开始训练神经网络 , 需要训练到多个epoch , 这往往会过拟合 。 预训练的GloVe并不能改善结果 。 对后一种模型的一个可能的改进是使用类似领域的大量文本(如10K、10Q财务报表)来训练GloVe , 而不是使用维基百科中预训练过的模型 。
金融市场中的NLP——情感分析文章插图
模型D在交叉验证和最终测试中的准确率和f1分数均达到90%以上 。 它正确地将负面文本分类为84% , 而正面文本正确分类为94% , 这可能是由于输入的数量 , 但最好仔细观察以进一步提高性能 。 这表明 , 由于迁移学习和语言模型 , 预训练模型的微调在这个小数据集上表现良好 。
金融市场中的NLP——情感分析文章插图


推荐阅读