Token indices sequence length is longer than the specified maximum sequence length for this model

 Bert模型token长度最长为512,在使用Bert模型训练过程中我们可能会遇到token长度超过512的情况并警告:Token indices sequence length is longer than the specified maximum sequence length for this model(643>512)。为此该如何解决呢?下面转载两篇文章希望对大家有所帮助。

超长文本训练 - clearwind在自然语言处理(NLP)任务中,处理超长文本(通常指长度超过模型最大支持长度的文本)是一个常见的挑战。BERT等预训练模型通常具有固定的最大序列长度限制(例如,BERT-base的最大序列长度为512个标记)。当需要处理超过这个长度的文本时,需要采取特定的策略来确保模型能够有效地处理这些数据。 Behttp://zxse.cn/archives/1735886207197除此之外,还有简单暴力的截断法,(head截断、tail截断、head+tail截断):

实战中,BERT如何处理篇章级长文本?_bert中截断操作-CSDN博客文章浏览阅读1.9k次,点赞3次,收藏4次。如果考虑性能、只能使用一个Pooling的话,就使用Max-Pooling,因为捕获的特征很稀疏、Max-Pooling会保留突出的特征,Mean-Pooling会将特征打平。通过统计,该任务与主题相关的句子,不到总字数的60%,40%的时间都是在浪费在这些"糟粕"上,同时这些冗余文本也会带来一些噪声,不利于模型的学习。压缩法的宗旨是选取“精华”,去除“糟粕”。_bert中截断操作 https://blog.csdn.net/weixin_43815222/article/details/136204450

这段代码定义了一个名为 `_truncate_seq_pair` 的函数,用于将两个句子(或文本序列) `tokens_a` 和 `tokens_b` 截断到指定的最大长度 `max_length` 内。这个过程是通过逐步移除较长的那个句子中的最后一个单词来进行的,直到总长度满足要求为止。下面是详细的解释: ### 代码逐行解析 ```python def _truncate_seq_pair(tokens_a, tokens_b, max_length): """Truncates a sequence pair in place to the maximum length.""" ``` - 定义一个名为 `_truncate_seq_pair` 的函数,接收三个参数: - `tokens_a`: 第一句的分词结果列表。 - `tokens_b`: 第二句的分词结果列表。 - `max_length`: 允许的最大总长度。 --- ```python while True: total_length = len(tokens_a) + len(tokens_b) if total_length <= max_length: break ``` - 使用无限循环 `while True:` 来不断尝试减少序列的总长度。 - 计算两段序列的当前总长度 `total_length` 并判断是否已经小于等于 `max_length`。 - 若条件成立,则跳出循环;否则继续执行后续步骤以进一步削减长度。 --- ```python if len(tokens_a) > len(tokens_b): tokens_a.pop() else: tokens_b.pop() ``` - 比较两者的长度,选择更长的那一方从末端删除一个词语(即调用 `.pop()` 方法去掉最后的一个元素)。这里采用的是简单的启发式规则:优先缩短较长的部分。 这样做的理由是因为较短序列的信息密度通常更高,每一个词汇都可能是关键性的表达;而较长的序列相对来说单位信息含量较低,适当去除一些末尾的内容影响较小。 ### 关键点总结 1. **原地修改**:该函数直接对传入的 `tokens_a` 和 `tokens_b` 列表进行了操作,并未返回新的对象。这意味着外部可以直接获取经过处理后的最新版本。 2. **简单启发法**:当需要裁剪时总是先动更长那部分的原则是比较直观且容易实现的一种方案,不过它并不是唯一解也不是最优解。对于某些特定应用场合可能还需要设计更为复杂的平衡机制。 ### 应用背景 此函数常出现在自然语言处理任务中特别是涉及到像BERT这样的双输入模型架构里,在构建样本时为了保持一致性以及防止超出模型支持的最大序列长度,就需要确保所有输入都在规定范围内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值