Main Content

wordTokenize

토큰 추출기를 사용하여 텍스트를 단어로 토큰화

R2023b 이후

    설명

    예제

    words = wordTokenize(tokenizer,str)은 지정된 토큰 추출기를 사용하여 str의 텍스트를 단어로 토큰화합니다.

    예제

    모두 축소

    bert 함수를 사용하여, 사전 훈련된 BERT-Base 신경망과 그에 대응하는 토큰 추출기를 불러옵니다.

    [net,tokenizer] = bert;

    토큰 추출기를 표시합니다.

    tokenizer
    tokenizer = 
      bertTokenizer with properties:
    
            IgnoreCase: 1
          StripAccents: 1
          PaddingToken: "[PAD]"
           PaddingCode: 1
            StartToken: "[CLS]"
             StartCode: 102
          UnknownToken: "[UNK]"
           UnknownCode: 101
        SeparatorToken: "[SEP]"
         SeparatorCode: 103
           ContextSize: 512
    
    

    wordTokenize 함수를 사용하여 텍스트 "Bidirectional Encoder Representations from Transformers"를 단어로 토큰화합니다.

    str = "Bidirectional Encoder Representations from Transformers";
    words = wordTokenize(tokenizer,str)
    words = 1x1 cell array
        {["Bidirectional"    "Encoder"    "Representations"    "from"    "Transformers"]}
    
    

    입력 인수

    모두 축소

    토큰 추출기로, bertTokenizer 객체 또는 bpeTokenizer 객체로 지정됩니다.

    입력 텍스트로, string형 배열, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

    예: ["An example of a short sentence."; "A second short sentence."]

    데이터형: string | char | cell

    출력 인수

    모두 축소

    토큰화된 단어로, string형 배열로 구성된 셀형 배열로 반환됩니다.

    데이터형: cell

    알고리즘

    모두 축소

    WordPiece 토큰화

    WordPiece 토큰화 알고리즘([2])은 단어를 부분단어(subword) 단위로 분할하고 문자와 부분단어의 공통된 시퀀스를 단일 정수에 매핑합니다. 토큰화 시, 이 알고리즘은 OOV(단어집에 없는 단어)를 그에 대응하는 부분단어로 대체하므로 모델이 처음 보는 단어를 더 효과적으로 처리할 수 있습니다. 이 과정을 통해 일반 단어와 빈도가 낮은 단어를 더 잘 표현할 수 있는 부분단어 토큰 세트가 생성됩니다.

    다음 단계는 WordPiece 토큰 추출기를 만드는 방법을 설명합니다.

    1. 단어집 초기화 — 데이터에서 고유한 문자로 구성된 초기 단어집을 만듭니다.

    2. 토큰 빈도 세기 — 훈련 데이터를 반복 처리하고 단어집에서 각 토큰의 빈도를 셉니다.

    3. 빈도가 가장 높은 쌍 병합 — 단어집에서 빈도가 가장 높은 토큰 쌍을 식별하고 이를 단일 토큰으로 병합합니다. 단어집을 적절하게 업데이트합니다.

    4. 빈도 세기 및 병합 반복 — 단어집이 미리 정의된 크기에 도달할 때까지 또는 토큰을 더 이상 병합할 수 없을 때까지 빈도를 세는 단계와 병합 단계를 반복합니다.

    다음 단계는 WordPiece 토큰 추출기가 새로운 텍스트를 토큰화하는 방법을 설명합니다.

    1. 텍스트 분할 — 텍스트를 개별 단어로 분할합니다.

    2. OOV 식별 — 사전 훈련된 단어집에 없는 OOV(단어집에 없는 단어)를 식별합니다.

    3. OOV 대체 — OOV(단어집에 없는 단어)를 단어집에 있는, 그에 대응하는 부분단어로 대체합니다. 예를 들어 OOV(단어집에 없는 단어) 토큰이 단어집 토큰으로 시작하는지 반복적으로 확인합니다.

    BPE(Byte Pair Encoding)

    BPE(Byte Pair Encoding)는 가능한 모든 단어에 대해 개별적인 토큰을 할당하지 않고도 트랜스포머 신경망이 광범위한 단어집을 처리할 수 있도록 하는 토큰화 알고리즘입니다. 토큰화 시, 이 알고리즘은 OOV(단어집에 없는 단어)를 그에 대응하는 부분단어(subword)로 대체하므로 모델이 처음 보는 단어를 더 효과적으로 처리할 수 있습니다. 이 과정을 통해 일반 단어와 빈도가 낮은 단어를 더 잘 표현할 수 있는 부분단어 토큰 세트가 생성됩니다.

    다음 단계는 BPE 토큰 추출기 훈련을 위한 알고리즘에 대한 설명입니다.

    • 텍스트의 말뭉치로 시작합니다. 예를 들어 "use byte pair encoding to tokenize text"와 같은 구를 포함하는 말뭉치입니다. 지정된 사전 토큰화 알고리즘을 사용하여 텍스트 데이터를 단어로 분할합니다.

    • 바이트 단위의 단어집을 초기화합니다. 예를 들어 ["a" "b" "c" ... "z"]로 구성된 단어집으로 시작합니다. 여러 바이트로 이루어진 이모지와 같은 비ASCII 문자의 경우, 문자를 구성하는 바이트 값으로 시작합니다.

    • 텍스트 데이터의 각 단어를 바이트 시퀀스로 인코딩하고 단어를 단어집의 요소를 참조하는 정수 시퀀스로 표현합니다. 예들 들어 단어 "use"[21 19 5]로 표현합니다. 한 문자의 인코딩이 1바이트를 초과하는 경우 결과로 생성되는 바이트 시퀀스는 단어의 문자 개수보다 많은 요소를 포함할 수 있습니다.

    • 말뭉치에서 모든 인접한 바이트 쌍의 빈도를 셉니다. 예를 들어 단어 ["use" "byte" "pair" "encoding" "to" "tokenize" "text"]에서 토큰 쌍 ["t" "e"], ["e" "n"], ["t" "o"]는 두 번 나타나며 나머지 쌍은 한 번 나타납니다.

    • 빈도가 가장 높은 쌍을 식별하고 그에 대응하는 병합된 토큰을 단어집에 추가합니다. 단어집 인덱스 시퀀스로 표현된 단어에서, 그에 대응하는 쌍을 단어집에서 새로 병합된 토큰의 인덱스로 대체합니다. 그런 다음 이 토큰 쌍을 병합 목록에 추가합니다. 예를 들어 토큰 쌍 ["t" "e"]를 병합 목록에 추가합니다. 그리고 그에 대응하는 병합된 토큰 "te"를 단어집에 추가하여 인덱스 27을 갖도록 합니다. 그런 다음에는 단어집 인덱스로 표현된 텍스트 데이터에서, 단어집 인덱스의 쌍 [20 5](이는 ["t" "e"]에 대응됨)를 그에 대응하는 새로운 단어집 인덱스로 대체합니다.

      • 단어 "byte"에 대한 표현 [2 25 20 5][2 25 27]이 됩니다.

      • 단어 "text"에 대한 표현 [20 5 24 20][27 24 20]이 됩니다.

    • 지정된 반복 횟수 또는 단어집 크기에 도달할 때까지 빈도를 세는 작업과 병합 작업을 반복합니다. 예를 들어 이러한 단계를 여러 번 반복하면 쌍 ["b" "y"]가 병합되어 토큰 "by"가 만들어지고 그 다음에 쌍 ["by" "te"]가 병합되어 토큰 "byte"가 만들어집니다.

    다음 단계는 BPE 토큰 추출기가 새로운 텍스트를 토큰화하는 방법을 설명합니다.

    1. 사전 토큰화 — 텍스트를 개별 단어로 분할합니다.

    2. 바이트 인코딩 — 각 단어를 바이트 시퀀스로 인코딩합니다.

    3. 병합 — 병합 목록의 맨 위를 시작으로 끝까지 진행하여, 가능한 경우 각 병합을 토큰 쌍에 반복적으로 적용합니다.

    참고 문헌

    [1] Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. "BERT: Pre-Training of Deep Bidirectional Transformers for Language Understanding" Preprint, submitted May 24, 2019. https://doi.org/10.48550/arXiv.1810.04805.

    [2] Wu, Yonghui, Mike Schuster, Zhifeng Chen, Quoc V. Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun et al. "Google's Neural Machine Translation System: Bridging the Gap Between Human and Machine Translation." Preprint, submitted October 8, 2016. https://doi.org/10.48550/arXiv.1609.08144

    버전 내역

    R2023b에 개발됨