非常有趣的问题。
使用预训练模型时,始终建议向其提供与训练时类似的数据。基本上,如果重要,不要删除它们,如果不重要,保留它们并没有什么坏处。显然,如果可以的话,尝试使用或不使用停用词,看看什么最适合你的问题.
实际上,您有两种方法可以“删除”您的停用词。要么将它们从输入序列中完全删除。或者,您可以将它们替换为掩码标记(即<#UNKNOWN> 或<#MASK>)。
在后一种情况下,转换器会隐式猜测这些掩码是什么,您将实现去除停用词的最初目标:确保它们不会影响预测结果。确实,请看以下句子:
“我喜欢有观众的篮球”和“我喜欢没有观众的篮球”
这两个句子都是关于篮球的,你不希望有/没有让你的模型认为这些句子是关于不同主题的。通过使用和不使用屏蔽,您都“删除”了停用词,并且您不会混淆预训练模型没有使用没有停用词的数据这一事实。
现在,如果你将一个“不完整”的句子输入到转换器会发生什么。位置编码将保留某些单词在彼此之前或之后的概念,这就是您想要的。但是如果你删除停用词,一些词可能会显得“太接近”彼此。但这有关系吗?我不这么认为。
如果你的转换器为“word1 <#Mask> word2”输出的向量与“word1 word2”的向量有很大不同,这一定意味着掩码标记对句子的整体含义至关重要,这也表明它一开始不应该是停用词。
我建议掩盖停用词而不是删除它们。但是,如果性能如此重要以至于您需要提供较小的序列,我认为您会没事的。