15import typing
16from typing import List, Optional
17
18import torch
19
20from labml import logger
21from labml.logger import Text
22from labml_nn.neox.tokenizer import get_tokenizer
23
24if typing.TYPE_CHECKING:
25    from tokenizers import Tokenizer

ටෝකනයිසර්සිංගල්ටන්

28_TOKENIZER: Optional['Tokenizer'] = None

ටෝකන්හැඳුනුම්පත් ලබා ගන්න

  • text ටෝකනයිස් කිරීමේ පා text ය වේ
  • ටෝකන්හැඳුනුම්පත්ආපසු ලබා දෙයි

31def get_tokens(text: str) -> List[int]:
38    global _TOKENIZER
39    if _TOKENIZER is None:
40        _TOKENIZER = get_tokenizer()
41    return _TOKENIZER.encode_batch([text])[0].ids

ආදර්ශනිමැවුම් වලින් ටෝකන මුද්රණය කරන්න

ලස්සනමුද්රණ මඟින් ආකෘතියේ (ය) සිට පැති ප්රතිදානයන් ඔස්සේ ටෝකන ඉලක්ක කරයි.

  • ids ඉලක්කගත ටෝකන් හැඳුනුම් වේ
  • xs ආකෘතිය (ය) ප්රතිදානයන් වේ
  • 44def print_token_outputs(ids: List[int], *xs: torch.Tensor):
    53    ids = ids + [-1]
    54    xs = [[-1] + x[0].max(dim=-1)[1].tolist() for x in xs]
    55
    56    print_tokens(ids, xs)

    ටෝකනමුද්රණය කරන්න

    සංසන්දනයසඳහා ටෝකන මුද්රණය කරන්න

    • target ඉලක්කගත ටෝකන් හැඳුනුම් වේ
    • others ආකෘතියෙන් නියැදි ප්රතිදානයන් (ය)
    59def print_tokens(target: List[int], others: List[List[int]]):

    බරටෝකනයිසර්

    70    global _TOKENIZER
    71    if _TOKENIZER is None:
    72        _TOKENIZER = get_tokenizer()

    ටෝකනනූල් ලැයිස්තුවට පරිවර්තනය කරන්න

    75    text = []
    76    for i in range(len(target)):
    77        tokens = [_TOKENIZER.decode([target[i]]) if target[i] != -1 else '---']
    78        for j in range(len(others)):
    79            tokens.append(_TOKENIZER.decode([others[j][i]]) if others[j][i] != -1 else '---')
    80
    81        text.append(tokens)

    සංඛ්යාන

    84    correct = [0 for _ in others]
    85    total = 0

    ටෝකනහරහා නැවත කරන්න

    88    for i in range(len(target)):
    89        parts = [(f'{i}: ', Text.meta)]
    90        parts += [('"', Text.subtle), (text[i][0], Text.subtle), ('"', Text.subtle), '\t']

    හිස්ඉලක්කය

    93        if target[i] == -1:
    94            for j in range(len(others)):
    95                parts += [('"', Text.subtle), (text[i][j + 1], Text.subtle), ('"', Text.subtle), '\t']
    96
    97            logger.log(parts)
    98            continue

    ටෝකනගණන

    101        total += 1

    වෙනත්ප්රතිදානයන්

    104        for j in range(len(others)):
    105            correct[j] += 1 if others[j][i] == target[i] else 0
    106
    107            parts += [('"', Text.subtle),
    108                      (text[i][j + 1], Text.success if others[j][i] == target[i] else Text.danger),
    109                      ('"', Text.subtle), '\t']
    110
    111        logger.log(parts)

    සංඛ්යාන

    114    parts = [(f'{total}', Text.highlight), '\t']
    115    for j in range(len(others)):
    116        parts += [(f'{correct[j]}', Text.value), '\t']
    117    logger.log(parts)

    ශේෂස්ථර

    බෙදන්න n_chunks . n_layers නල මාර්ග සමාන්තර පුහුණුව සඳහා මෙය භාවිතා වේ.

    • n_layers ස්ථර ගණන වේ
    • n_chunks කුට්ටි ගණන වේ

    ප්රතිලාභ එක් එක් කුට්ටිය සඳහා ස්ථර ගණන සහිත ලැයිස්තුවක් ආපසු ලබා දෙයි

    120def balance_layers_simple(n_layers: int, n_chunks: int):
    130    balance = []
    131    for i in range(n_chunks):
    132        balance.append((n_layers - sum(balance)) // (n_chunks - i))
    133
    134    return list(reversed(balance))