我们要解决“给定两个对象”形式的回归问题和,预测他们的分数(将其视为相似性)"。我们有 2 种类型的功能:
- 对于每个对象,我们有大约 1000 个数值特征,主要有以下类型: 1)“历史分数信息”,例如历史均值直到我们使用该功能为止;2) 0/1 特征表示是否对象具有特定的属性等。
- 对于每个对象,我们都有一个描述该对象的文本(描述不可靠,但仍然有用)。
显然,在预测一对分数时,我们可以同时使用特征和.
我们目前正在使用以下设置(我省略了验证/测试):
- 对于文本,我们计算它们的 BERT 嵌入,然后根据嵌入向量之间的相似度(例如它们之间的余弦相似度)生成特征。
- 我们将数据集拆分为微调和训练数据集。微调数据集可能是空的,意味着没有微调。
- 使用微调数据集,我们微调 BERT 嵌入。
- 使用训练数据集,我们训练决策树来预测分数。
我们比较以下方法:
- 没有 BERT 功能。
- 使用 BERT 功能,但没有微调。预测准确性有一些合理的改进。
- 使用 BERT 功能,进行微调。改进非常小(当然,仅使用 BERT 特征的预测得到了改进)。
问题:我在这种方法中缺少一些简单的东西吗?例如,也许有更好的方式来使用文本?其他使用嵌入的方法?与决策树相比更好的方法?
我试图做很多事情,但没有任何成功。我期望提供改进的方法如下:
微调嵌入以预测两者之间的差异和意思. 动机是我们已经有一个特征“意味着",这是一个对象的基线,并且我们对与该均值的偏差感兴趣。
使用 NN 代替决策树。即,我使用几个密集层将嵌入向量转换为特征,如下所示:
nn.Sequential( nn.Linear(768 * 2, 1000), nn.BatchNorm1d(1000), nn.ReLU(), nn.Linear(1000, 500), nn.BatchNorm1d(500), nn.ReLU(), nn.Linear(500, 100), nn.BatchNorm1d(100), nn.ReLU(), nn.Linear(100, 10), nn.BatchNorm1d(10), nn.ReLU(), )
之后,我结合了这些新的功能与我已经拥有的功能,并在它们之上使用类似的架构:
nn.Sequential( nn.Linear(10 + n_features, 1000), nn.BatchNorm1d(1000), nn.ReLU(), nn.Linear(1000, 500), nn.BatchNorm1d(500), nn.ReLU(), nn.Linear(500, 100), nn.BatchNorm1d(100), nn.ReLU(), nn.Linear(100, 1), )
但结果是,与决策树相比,我的预测要差得多。是否有更适合我的情况的架构?