我找到了标点符号恢复的脚本。我对这种方法有一个疑问。
我将简要解释一下作者的逻辑。为每个单词分配四个标记之一:Other (0)、PERIOD (1)、COMMA (2)、QUESTION (3)。此外,所有单词都转换为 BERT 令牌。这是一个例子:
2045 0
2003 0
2200 0
2210 0
3983 0
2301 0
2974 0
1999 0
2068 2
接下来,我们进行填充。我们设置一个段(例如八个单词),对于每个单词,我们在一个标记之前取两个单词,在一个标记之后取四个单词。此外,我们在每个单词之后添加一个填充标记。对于第一个单词,之前没有单词。因此,从最后取一个词。同样,对于最后一个单词,后面没有单词,因此从开头取一个单词。这是一个例子。
[1999, 2068, 2045, 0, 2003, 2200, 2210, 3983] 0
[2068, 2045, 2003, 0, 2200, 2210, 3983, 2301] 0
[2045, 2003, 2200, 0, 2210, 3983, 2301, 2974] 0
[2003, 2200, 2210, 0, 3983, 2301, 2974, 1999] 0
[2200, 2210, 3983, 0, 2301, 2974, 1999, 2068] 0
[2210, 3983, 2301, 0, 2974, 1999, 2068, 2045] 0
[3983, 2301, 2974, 0, 1999, 2068, 2045, 2003] 0
[2301, 2974, 1999, 0, 2068, 2045, 2003, 2200] 0
[2974, 1999, 2068, 0, 2045, 2003, 2200, 2210] 2
第一列包含标记,第二列包含标点符号。在第一列中,“0”对应于填充。接下来我们做 TensorDataset,然后是 DataLoader。在第二列中,“0”对应“其他”,“2”对应“句号”。最后我们训练一个模型:
for inputs, labels in data_loader_train:
inputs, labels = inputs.cuda(), labels.cuda()
output = model(inputs)
该算法运行良好,但我不明白以下内容。将填充物放在中间有什么意义?也许我们可以用更简单的方式用 BERT 进行标点还原?