我们人类在读句子的时候,会综合上下文和标点后的格式判断是不是一句话结束了。比如:
我今天去了学校。老师给我布置了作业。
→ 这很明显是两句话。- 但下面这个例子就有歧义了:
她叫李.小明是个学生。
🧠 举个实际的错误切句例子
句子:
她叫李.小明是个学生。
我们想表达的是:
“她叫李小明,是个学生。”
但中间因为错加了一个 句号(“李.”),变成了:
“她叫李。” + “小明是个学生。”
这就是只靠句号就断句时会犯的错。
tokenizer 视角:
BERT 分词器在遇到句号时,并不知道它是不是断句符,比如:
token idx | token | 原始字符 |
---|---|---|
0 | 她 | 她 |
1 | 叫 | 叫 |
2 | 李 | 李 |
3 | . | .(句号) |
4 | 小 | 小 |
5 | 明 | 明 |
6 | 是 | 是 |
这时候你如果只看到 token == '.'
就断句,那么它就会把“李.”当成一句话结束,这是不对的。
✅ 正确做法是:不仅判断句号,还要判断后面有没有空格
比如这个逻辑判断:
token_offsets[i + 1][0] - token_offsets[i][1] > 0
就可以判断出:
- 如果
.
后面紧跟着“小明” → 不断句 - 如果
.
后面是空格、换行 → 断句
🔚 总结一句话:
如果只用“是否是句号”来断句,会误伤一些“不是句子结束”的句号(比如“李.”)。加上后面有没有空格或换行这个判断,可以更准确识别真正的断句位置。