Skip to content

Handle long sequences

Na etapie przetwarzania każda sekwencja jest przycinana do max_sequence_length. Dla dłuższego wejścia tokeny powyżej tego limitu nie zostają przetworzone, co może skutkować brakiem rozpoznania anotacji.

Należy zastosować następujący algorytm podziału sekwencji wejściowej i łączenia wyników:

  1. Jeżeli sekwencja jest krótsza niż max_sequence_length to przetwarzamy ją w jednym batchu.
  2. Jeżeli jest dłuższa, to dzielimy ją na n sekwencji, przy czym kolejna sekwencja pokrywa się w 1/2 z poprzednią sekwencją.

Na przykład, przymując, że max_sequence_length=8, a każdy znak to pojedynczy subword:

Sekwencja

1234567890abcdefgh

zostanie podzielona na sekwencje:

12345678
567890ab
90abcdef
cdefgh__

Wyniki tagowania dla kolejnych sekwencji będą redundante poprzez zasosowanie zakładki, a w skrajnych przypadkach mogą się różnić. Dlatego przy składaniu wyniku w jedną sekwencję należy pomijać skrajne tokeny (1/4). Nie dotyczy to początku pierwszej i końca ostatniej sekwencji, ponieważ dla nich nie ma redundancji.

12345678
    567890ab
        90abcdef
            cdefgh__

Tokeny do pominięcia w kolejnych sekwencja zostały zastąpione kropką:

123456..
    ..7890..
        ..abcd..
            ..efgh__
Edited by Michał Marcińczuk