这是一个创建于 415 天前的主题,其中的信息可能已经有所发展或是发生改变。
rt 。在 kaggle 中遇到了一些问题,想请求一下帮助。具体情况是这样的:在 kaggle 上有个名为 tweet sentiment 的竞赛。给定训练集和测试集,训练集中包含原文本、筛选文本和情感词。测试集中包含原文本和情感词,具体任务,就是让模型学会怎么利用情感词,从原文本里筛选出合适的词语。作为初学者,我想要用这个竞赛来练手。
举个例子:my boss is bullying me... 对于这个句子,给出的情感词是 negative ,筛选出的文本是 bullying me 。
我的思路是这样的:使用 transformer 库的 bert 模型。把情感词和原文本拼在一起,tokenizer 编码后,作为训练集输入。 与此同时,用筛选文本逐个比对原文本,得到 0 1 标签,用它来表示原文本里哪个词被选中,以此作为训练集的标签。 测试集的输入也做相同处理。而模型的输出是概率,转为 0 1 标签。
用上面的句子举例,对应的标签大概就是 0 0 0 0 0 1 1 0 这样子。 由于最终的输出还是文本,所以得到测试集标签后还需要再转回文本。
现在模型可以正常使用,但我遇到了一些问题:首先,我的输入都是有注意力掩码的,但是输出标签却存在问题:
由于每个句子长度都不一样,我需要把句子和标签都补充到最大长度。输入有注意力掩码,但输出却总是在没有词语的位置也附加概率,导致概率被稀释了。这个问题还可以通过让输出的概率乘掩码来去掉无用的部分一定程度规避,但还有一个问题我不确定该怎么办。
由于句子长度不一样,所以模型的输出概率没有一个统一的水平。如果筛选文本只有一个词,那分给他的概率就很大,如果整个句子都是要选中的,那分给有效词的概率就很低。这样我就没办法选择一个合适的阈值来划分 0 和 1 。我是自学上来的,这种情况确实没有想到可以怎么做,请问这种情况应该怎么处理?谢谢