Tokenization គឺជាច្រកផ្លូវដែលអត្ថបទឆៅបំប្លែងទៅជាទម្រង់ដែលអាចប្រើបានដោយគំរូភាសាធំ (LLMs) ដូចជា GPT។ វាដើរតួនាទីជាស្ពានរវាងមាតិកាដែលមនុស្សអាចអានបាន និងទិន្នន័យជាលេខដែលដំណើរការជាគំរូ។ មុនពេលគំរូមួយអាចយល់ ឬបង្កើតអត្ថបទដែលស៊ីសង្វាក់គ្នា វាត្រូវតែបំបែកការបញ្ចូលទៅជាឯកតាតូចៗដែលហៅថា tokens ។
នៅក្នុងស្ថាបត្យកម្ម GPT សញ្ញាសម្ងាត់គឺជាមូលដ្ឋានគ្រឹះនៃដំណើរការ និងសមត្ថភាពរបស់ម៉ូដែល ឥទ្ធិពលលើប្រសិទ្ធភាព ការប្រើប្រាស់បង្អួចបរិបទ និងគុណភាពលទ្ធផល។ Tokenization គឺជាដំណើរការនៃការបំបែកអត្ថបទទៅជាឯកតាតូចៗដែលហៅថា tokens ដែលអាចតំណាងឱ្យពាក្យ ពាក្យរង តួអក្សរ ឬសូម្បីតែនិមិត្តសញ្ញាពិសេស។ ថូខឹនទាំងនេះគឺជាប្លុកអគារមូលដ្ឋានដែលគំរូដំណើរការ។ របៀបដែលអត្ថបទត្រូវបានសម្គាល់ដោយផ្ទាល់ប៉ះពាល់ដល់របៀបដែលគំរូអាចគ្រប់គ្រងទិន្នន័យប្រកបដោយប្រសិទ្ធភាព តើព័ត៌មានប៉ុន្មានដែលសមនៅក្នុងបង្អួចបរិបទរបស់វា និងគុណភាពនៃការឆ្លើយតបដែលវាបង្កើត។
បង្អួចបរិបទ គឺជាចំនួនថូខឹនអតិបរមាដែលគំរូអាចដំណើរការក្នុងប្រតិបត្តិការតែមួយ រួមទាំងទាំងការបញ្ចូល និងលទ្ធផលដែលបានបង្កើត។ ជាឧទាហរណ៍ គំរូដែលមានវិនដូបរិបទ 32,000-token ត្រូវតែសមនឹងអ្វីៗគ្រប់យ៉ាង—អត្ថបទបញ្ចូលរបស់អ្នក ការណែនាំប្រព័ន្ធ និងការឆ្លើយតបរបស់គំរូ—ក្នុងដែនកំណត់នេះ។ ការកំណត់សញ្ញាសម្ងាត់ប្រកបដោយប្រសិទ្ធភាពកាត់បន្ថយចំនួនថូខឹនដែលតម្រូវឱ្យតំណាងឱ្យអត្ថបទដែលបានផ្តល់ឱ្យ ដែលអាចឱ្យអ្នកបញ្ចូលខ្លឹមសារកាន់តែច្រើន ឬទទួលបានលទ្ធផលកាន់តែយូរ និងកាន់តែសម្បូរបែបដោយមិនលើសដែនកំណត់។ ម្យ៉ាងវិញទៀត ការដាក់សញ្ញាសម្ងាត់មិនល្អ អាចបង្កើនចំនួនសញ្ញាសម្ងាត់ដោយមិនចាំបាច់ ខ្ជះខ្ជាយទំហំដ៏មានតម្លៃនៅក្នុងបង្អួចបរិបទ និងកំណត់លទ្ធភាពប្រើប្រាស់របស់គំរូសម្រាប់កិច្ចការយូរជាងនេះ។
នៅពេលដែលអត្ថបទត្រូវបានសម្គាល់ និមិត្តសញ្ញានីមួយៗត្រូវបានបំប្លែងទៅជា ការបង្កប់លេខ - តំណាងគណិតវិទ្យាក្នុងចន្លោះវិមាត្រខ្ពស់ (ជាញឹកញាប់មានវិមាត្ររាប់រយ ឬរាប់ពាន់)។ ការបង្កប់នេះចាប់យកអត្ថន័យ និងទំនាក់ទំនងនៃសញ្ញាសម្ងាត់នៅក្នុងបរិបទនៃវាក្យសព្ទទាំងមូល។ ជាឧទាហរណ៍ និមិត្តសញ្ញាសម្រាប់ពាក្យស្រដៀងគ្នាដូចជា "រត់" និង "រត់" នឹងត្រូវបានដាក់នៅជិតក្នុងចន្លោះនេះជាងសញ្ញាសម្ងាត់ដែលមិនទាក់ទងដូចជា "រត់" និង "តារាង" ។ ការបង្កប់ទាំងនេះអាចឱ្យគំរូយល់អំពីលំដាប់នៃសញ្ញាសម្ងាត់ និងព្យាករណ៍អំពីសញ្ញាសម្ងាត់បន្ទាប់ដែលទំនងបំផុតក្នុងអំឡុងពេលបង្កើតអត្ថបទ។ ដំណើរការនេះគឺជាអ្វីដែលអនុញ្ញាតឱ្យ GPT បង្កើតលទ្ធផលដែលទាក់ទងគ្នាតាមបរិបទ មិនថាការឆ្លើយតបទៅនឹងសំណួរ ការបំពេញប្រយោគ ឬបង្កើតខ្លឹមសារច្នៃប្រឌិតនោះទេ។
សរុបមក សញ្ញាសម្ងាត់មិនមែនគ្រាន់តែជាជំហានដំណើរការមុននោះទេ វាគឺជាកត្តាសំខាន់សម្រាប់ម៉ូដែល GPT ដើម្បីដំណើរការប្រកបដោយប្រសិទ្ធភាព និងផ្តល់នូវលទ្ធផលគុណភាពខ្ពស់។
Tokenization មិនមែនជាដំណើរការមួយទំហំសមនឹងទាំងអស់ទេ។ វាប្រែប្រួលអាស្រ័យលើច្បាប់ដែលបានកំណត់ជាមុន ឬក្បួនដោះស្រាយដែលបានរចនាឡើងដើម្បីបំបែកអត្ថបទទៅជាឯកតាដែលអាចគ្រប់គ្រងបានហៅថា ថូខឹន។
នេះជាការពិនិត្យឱ្យស៊ីជម្រៅអំពីរបៀបដែលវាដំណើរការ៖
ការបំបែក
វាពាក់ព័ន្ធនឹងការបែងចែកអត្ថបទទៅជាឯកតាតូចៗ ដូចជាពាក្យ ពាក្យរង ឬតួអក្សរ។ LLMs សម័យទំនើបតែងតែពឹងផ្អែកលើ ការបំប្លែងពាក្យរង ព្រោះវាផ្តល់នូវតុល្យភាពរវាងប្រសិទ្ធភាពនិងភាពរឹងមាំ។ សមតុល្យនេះកើតឡើងដោយសារការបំប្លែងពាក្យរងអាចគ្រប់គ្រងពាក្យកម្រ ឬមិនស្គាល់ដោយបំបែកវាទៅជាសមាសភាគតូចជាង និងសាមញ្ញជាង ខណៈដែលនៅតែបំប្លែងពាក្យញឹកញាប់ជានិមិត្តសញ្ញាតែមួយ។
ឧទាហរណ៍ ៖
ពិចារណាពាក្យថា unhappiness
។ ដោយប្រើសញ្ញាសម្គាល់ពាក្យរង វាអាចបំបែកទៅជា៖
un
, happi
, និង ness
។វិធីសាស្រ្តនេះធានាថា៖
un
និង ness
ត្រូវបានប្រើឡើងវិញលើពាក្យផ្សេងៗគ្នា ដោយកាត់បន្ថយទំហំវាក្យសព្ទ។unhappiness
នៅតែអាចដំណើរការបានដោយការបំបែកវាទៅជាសមាសធាតុរងដែលគេស្គាល់ ជៀសវាងបញ្ហាវាក្យសព្ទ។
នៅក្នុងពាក្យជាក់ស្តែង នេះអនុញ្ញាតឱ្យគំរូធ្វើឱ្យមានលក្ខណៈទូទៅកាន់តែប្រសើរឡើងលើការបញ្ចូលអត្ថបទចម្រុះដោយមិនធ្វើឱ្យវាក្យសព្ទហួសហេតុពេក។
ការអ៊ិនកូដ
ការអ៊ិនកូដផ្តល់ចំនួនគត់តែមួយគត់ចំពោះសញ្ញាសម្ងាត់នីមួយៗដោយផ្អែកលើ វាក្យសព្ទ ដែលបានកំណត់ទុកជាមុន — បណ្តុំនៃសញ្ញាសម្ងាត់ដែលអាចធ្វើបានទាំងអស់ដែលគំរូទទួលស្គាល់។ នៅក្នុងបរិបទនៃ GPT និងគំរូស្រដៀងគ្នា វាក្យសព្ទត្រូវបានបង្កើតឡើងកំឡុងពេលបណ្តុះបណ្តាល និងតំណាងឱ្យសំណុំនៃពាក្យរង (ឬតួអក្សរ) ដែលគំរូប្រើដើម្បីយល់ និងបង្កើតអត្ថបទ។
ឧទាហរណ៍នៅក្នុង GPT៖
hello
អាចជានិមិត្តសញ្ញាតែមួយដែលមានតំណាងចំនួនគត់ដូចជា 1356
។micropaleontology
អាចត្រូវបានបំបែកទៅជាអក្សរកាត់ពាក្យដូចជា micro
paleo
និង ntology
ដែលនីមួយៗមានចំនួនគត់របស់វា។
សម្រាប់ ChatGPT នេះមានន័យថា នៅពេលដែលអ្នកប្រើបញ្ចូលអត្ថបទ សញ្ញាសម្ងាត់ធ្វើផែនទីខ្សែអក្សរបញ្ចូលទៅក្នុងលំដាប់នៃចំនួនគត់ដោយផ្អែកលើវាក្យសព្ទរបស់គំរូ។ បន្ទាប់មកលំដាប់នេះត្រូវបានដំណើរការដោយបណ្តាញសរសៃប្រសាទ។ ទំហំវាក្យសព្ទប៉ះពាល់ដល់ការប្រើប្រាស់អង្គចងចាំរបស់ម៉ូដែល និងប្រសិទ្ធភាពនៃការគណនា ដោយធ្វើឱ្យមានតុល្យភាពរវាងការគ្រប់គ្រងភាសាស្មុគស្មាញ និងការរក្សាឱ្យប្រព័ន្ធដំណើរការ។
ការឌិកូដ
ការឌិកូដគឺជាដំណើរការបញ្ច្រាស៖ ការបំប្លែងលំដាប់នៃចំនួនគត់និមិត្តសញ្ញាត្រឡប់ទៅជាអត្ថបទដែលមនុស្សអាចអានបាន។ សម្រាប់ការបំប្លែងពាក្យរង នេះពាក់ព័ន្ធនឹងការផ្គុំពាក្យរងទៅជាពាក្យពេញលេញតាមដែលអាចធ្វើបាន
របៀបដែលវាដំណើរការ ៖
ឧទាហរណ៍ ៖
ឧបមាថាគំរូបង្កើតសញ្ញាសម្ងាត់សម្រាប់ un
, happi
, and ness
។ ការឌិកូដបង្កើតឡើងវិញនូវ unhappiness
ដោយការបញ្ចូលពាក្យរង។ ការគ្រប់គ្រងលំហឱ្យបានត្រឹមត្រូវ ធានាថា un
មិនត្រូវបានចាត់ទុកជាពាក្យដាច់ដោយឡែកនោះទេ។
ប្រព័ន្ធនេះអនុញ្ញាតឱ្យគំរូដែលផ្អែកលើពាក្យរងដើម្បីបង្កើតអត្ថបទប្រកបដោយប្រសិទ្ធភាព ខណៈពេលដែលរក្សាបាននូវសមត្ថភាពក្នុងការតំណាងឱ្យពាក្យដ៏កម្រ ឬស្មុគស្មាញបានត្រឹមត្រូវ។
ខណៈពេលដែល ChatGPT API គ្រប់គ្រង tokenization ដោយស្វ័យប្រវត្តិ អ្នកអភិវឌ្ឍន៍ប្រើប្រាស់ tiktoken
ដោយផ្ទាល់ដើម្បីទទួលបានការគ្រប់គ្រងល្អជាងលើកម្មវិធីរបស់ពួកគេ។ វាអនុញ្ញាតឱ្យ មានការត្រួតពិនិត្យជាមុន និងគ្រប់គ្រងដែនកំណត់សញ្ញាសម្ងាត់ ដោយធានាថាការបញ្ចូលអត្ថបទ និងការឆ្លើយតបសមនឹងកម្រិតនៃគំរូ។ នេះមានសារៈសំខាន់ជាពិសេសសម្រាប់ការជៀសវាងកំហុសនៅពេលធ្វើការជាមួយការសន្ទនាយូរឬឯកសារ។ លើសពីនេះ អ្នកអភិវឌ្ឍន៍អាច បង្កើនប្រសិទ្ធភាពការប្រើប្រាស់សញ្ញាសម្ងាត់ ដើម្បីកាត់បន្ថយការចំណាយ API ដោយកាត់បន្ថយ ឬសង្ខេបធាតុបញ្ចូល។
tiktoken
ក៏ជួយក្នុង ការបំបាត់កំហុសក្នុងបញ្ហា tokenization ដោយផ្តល់នូវតម្លាភាពអំពីរបៀបដែលអត្ថបទត្រូវបាន tokenized និង decode ។ សម្រាប់ ការគ្រប់គ្រងការបញ្ចូលដ៏វែង tiktoken
អាចបំបែកអត្ថបទទៅជាកំណាត់តូចៗ ដែលអនុញ្ញាតឱ្យដំណើរការឯកសារធំៗជាផ្នែកៗ។ ជាចុងក្រោយ សម្រាប់ករណីប្រើប្រាស់កម្រិតខ្ពស់ ដូចជាការបង្កប់ ឬឧបាយកលកម្រិតសញ្ញាសម្ងាត់ tiktoken
ធានានូវការគ្រប់គ្រងយ៉ាងច្បាស់លាស់អំពីរបៀបបង្កើត និងដំណើរការថូខឹន។
import openai import tiktoken openai.api_key = "your-api-key" # Initialize tokenizer for GPT-4 encoding = tiktoken.get_encoding("cl100k_base") # Function to count tokens def count_tokens(text): return len(encoding.encode(text)) # Example input user_input = "Explain the theory of relativity in detail with examples." conversation_history = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the theory of relativity?"} ] # Combine inputs for token counting conversation_text = "".join([msg["content"] for msg in conversation_history]) + user_input # Pre-check input token limit (Use Case 1) token_limit = 4096 if count_tokens(conversation_text) > token_limit: print("Trimming conversation to fit within token limit.") conversation_history = conversation_history[1:] # Trim oldest message # Optimize input by summarizing if too long (Use Case 2) def summarize_if_needed(text, max_tokens=500): if count_tokens(text) > max_tokens: print("Input too long, summarizing...") response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "Summarize the following text."}, {"role": "user", "content": text} ], max_tokens=200 ) return response.choices[0].message["content"] return text long_text = "A very long text input that exceeds the desired token limit ... (more text)" optimized_text = summarize_if_needed(long_text, max_tokens=500) # Debug tokenization (Use Case 3) tokens = encoding.encode("OpenAI's ChatGPT is amazing!") print("Tokenized:", tokens) for token in tokens: print(f"Token ID: {token}, Token: '{encoding.decode([token])}'") # Handle long documents by splitting into chunks (Use Case 4) def split_into_chunks(text, chunk_size): tokens = encoding.encode(text) for i in range(0, len(tokens), chunk_size): yield encoding.decode(tokens[i:i + chunk_size]) document = "A very long document... (more text)" chunks = list(split_into_chunks(document, chunk_size=1000)) # Process each chunk separately responses = [] for chunk in chunks: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": chunk}], max_tokens=300 ) responses.append(response.choices[0].message["content"]) full_response = " ".join(responses) # Advanced token manipulation (Use Case 5) custom_text = "Analyze the sentiment of this text." tokens = encoding.encode(custom_text) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": encoding.decode(tokens)}], max_tokens=100 ) print("Final Response:", response.choices[0].message["content"])
វិធីសាស្រ្តនេះធានាទាំងការអនុវត្តដ៏ល្អប្រសើរ និងប្រសិទ្ធភាពចំណាយនៅពេលបង្កើតនៅលើ ChatGPT API។
tiktoken
: GPT's Tokenizer បណ្ណាល័យ tiktoken
របស់ OpenAI ត្រូវបានរចនាឡើងដើម្បីសម្គាល់ប្រកបដោយប្រសិទ្ធភាព និងយល់ពីឧបសគ្គនៃម៉ូដែល GPT ។ តោះស្វែងយល់ពីរបៀបដែលវាដំណើរការ៖
នេះជាឧទាហរណ៍ Python នៃរបៀប tokenize អត្ថបទដោយប្រើ tiktoken
។ ខ្ញុំចូលចិត្តប្រើ https://colab.research.google.com/ សម្រាប់ដំណើរការសៀវភៅកត់ត្រា python របស់ខ្ញុំ។
import tiktoken # Choose a model-specific tokenizer encoding = tiktoken.get_encoding("o200k_base") # Input text text = "Tokenization is crucial for GPT models." # Tokenize text tokens = encoding.encode(text) print("Tokens:", tokens) # Decode back to text decoded_text = encoding.decode(tokens) print("Decoded Text:", decoded_text)
Tokens: [4421, 2860, 382, 19008, 395, 174803, 7015, 13] Decoded Text: Tokenization is crucial for GPT models.
នៅពេលប្រើ ChatGPT APIs ការយល់ដឹងអំពីសញ្ញាសម្ងាត់ជួយបង្កើនប្រសិទ្ធភាព៖
នេះជាឧទាហរណ៍ជាក់ស្តែងសម្រាប់ការគណនាការប្រើប្រាស់សញ្ញាសម្ងាត់នៅពេលសួរ ChatGPT API៖
import tiktoken import openai def calculate_tokens(api_input, model="gpt-3.5-turbo"): encoding = tiktoken.encoding_for_model(model) tokens = encoding.encode(api_input) return len(tokens) # Example API call with token usage calculation api_input = "Explain the significance of tokenization in LLMs." model = "gpt-4" token_count = calculate_tokens(api_input, model) print(f"Token count for input: {token_count}") response = openai.ChatCompletion.create( model=model, messages=[{"role": "user", "content": api_input}] ) print("API Response:", response['choices'][0]['message']['content'])
កូដនេះជួយត្រួតពិនិត្យការប្រើប្រាស់សញ្ញាសម្ងាត់ ដែលមានសារៈសំខាន់សម្រាប់ការចំណាយ និងការបង្កើនប្រសិទ្ធភាពប្រតិបត្តិការ។
ការយល់ដឹងអំពីសញ្ញាសម្ងាត់គឺចាំបាច់សម្រាប់វិស្វករដែលបង្កើតកម្មវិធី AI ព្រោះវាប៉ះពាល់ដោយផ្ទាល់ពីរបៀបដែលទិន្នន័យអត្ថបទត្រូវបានដំណើរការដោយគំរូភាសា។ Tokenization ពាក់ព័ន្ធនឹងការបំបែកអត្ថបទឆៅទៅជាឯកតាដែលមានអត្ថន័យតូចជាង ដូចជាពាក្យ ពាក្យរង ឬតួអក្សរ ដែលជាធាតុបញ្ចូលជាមូលដ្ឋានសម្រាប់គំរូទាំងនេះ។ ដំណើរការនេះអនុញ្ញាតឱ្យអ្នកអភិវឌ្ឍន៍គ្រប់គ្រងទំហំបញ្ចូលយ៉ាងជាក់លាក់ បង្កើនប្រសិទ្ធភាពការចំណាយដោយកាត់បន្ថយការប្រើប្រាស់សញ្ញាសម្ងាត់ដែលមិនចាំបាច់ និងកែលម្អការអនុវត្តគំរូដោយធានាថាអត្ថបទត្រូវបានបែងចែកតាមរបៀបដែលរក្សាអត្ថន័យបរិបទ។ ជាងនេះទៅទៀត ការដាក់បញ្ចូលសញ្ញាសម្ងាត់ដោយផ្ទាល់ទៅក្នុងកូដភាគីអតិថិជនអាចសម្រួលប្រតិបត្តិការដោយកាត់បន្ថយការបញ្ជូនទិន្នន័យលើសម៉ោង និងភាពយឺតយ៉ាវ ដែលអនុញ្ញាតឱ្យឃ្លាំងសម្ងាត់កាន់តែមានប្រសិទ្ធភាព និងដំណើរការមុនដំណើរការលឿនជាងមុន។ តាមរយៈការធ្វើជាម្ចាស់នៃសញ្ញាសម្ងាត់ វិស្វករអាចបង្កើតប្រព័ន្ធ AI ដែលមានភាពរឹងមាំ និងមានប្រសិទ្ធភាពខ្ពស់ ទីបំផុតបង្កើនការឆ្លើយតប និងវិសាលភាពនៃកម្មវិធីរបស់ពួកគេ។