from transformers import AutoModel, AutoTokenizer
tokenizer1 = AutoTokenizer.from_pretrained("roberta-base")
tokenizer2 = AutoTokenizer.from_pretrained("bert-base-cased")
sequence = "A Titan RTX has 24GB of VRAM"
print(tokenizer1.tokenize(sequence))
print(tokenizer2.tokenize(sequence))
산출:
[ 'A', 'ĠTitan', 'ĠRTX', 'Ġhas', 'Ġ24', 'GB', 'Ġof', 'ĠVR', 'AM']
[ 'A', '타이탄', 'R', '## T', '## X', 'has', '24', '## GB', 'of', 'V', '## 램']
Bert 모델은 WordPiece 토크 나이저를 사용합니다. WordPiece 어휘에 나오지 않는 단어는 탐욕스럽게 하위 단어로 분류됩니다. 예를 들어, 'RTX'는 'R', '## T'및 '## X'로 나뉩니다. 여기서 ##은 하위 토큰임을 나타냅니다.
Roberta는 BPE 토크 나이저를 사용하지만 이해할 수 없습니다.
a) BPE 토크 나이 저는 어떻게 작동합니까?
b) G는 각 토큰에서 무엇을 나타 냅니까?
이 질문은 매우 광범위하므로 당면한 주요 문제에 초점을 맞춘 답변을 제공하려고합니다. 다른 질문에 대한 답변이 필요하다고 생각되면 한 번 에 하나의 질문에 초점을 맞춘 다른 질문을여십시오 . Stackoverflow에 대한 [help / on-topic] 규칙을 참조하십시오.
기본적으로 올바르게 식별했듯이 BPE는 현대 딥 네트워크의 모든 토큰 화에 핵심입니다. Sennrich 등 의 원본 BPE 논문 을 읽을 것을 강력히 권장합니다 . , BPE의 역사를 조금 더 강조합니다.
어쨌든 껴안는 얼굴 모델에 대한 토크 나이 저는 사전 훈련되어 있으며 이는 일반적으로 알고리즘의 훈련 세트에서 미리 생성된다는 것을 의미합니다. SentencePiece 와 같은 일반적인 구현 도 좀 더 잘 이해할 수 있지만 기본적으로 작업은 제한된 최적화 문제로 구성됩니다. 여기서 k
허용되는 어휘 의 최대 수 (제약) 를 지정 하면 알고리즘 이 최대한 많은 단어를 유지하려고합니다. 초과하지 않고 그대로 단어 k
.
전체 어휘를 포함 할 수있는 단어가 충분하지 않은 경우 어휘를 근사화하는 데 더 작은 단위가 사용되며, 그 결과 귀하가 제공 한 예에서 관찰 된 분할이 발생합니다. RoBERTa는 " byte-level BPE " 라는 변형을 사용합니다 . 이 연구에서 Wang et al. . 가장 큰 이점은 내가 이해하는 것에서 분할의 품질을 유지하면서 어휘를 더 적게 생성한다는 것입니다.
질문의 두 번째 부분은 설명하기가 더 쉽습니다. BERT 는 두 개의 후속 토큰 (와 함께 ) 의 병합 을 강조하는 반면 ##
, RoBERTa의 토크 나이 저는 대신 특정 유니 코드 문자 (이 경우, 점이있는 G)로 새 토큰 의 시작을 강조합니다 \u0120
. 내가 찾을 수있는 가장 좋은 이유는 기본적으로 훈련에서 공백을 사용하지 않는다고 주장하는 이 스레드 였습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다