[求助]kaggle 中训练模型遇到的一些问题

205 天前
 dontreply
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 。我是自学上来的,这种情况确实没有想到可以怎么做,请问这种情况应该怎么处理?谢谢
637 次点击
所在节点    自然语言处理
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982650

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX