LLM 解读大模型的token( 三 )


  • 字节对编码(BPE):为AI模型构建子词词汇,用于合并出现频繁的字符/子字对 。
  • 子词级tokenization:为复杂语言和词汇划分单词 。将单词拆分成更小的单元,这对于复杂的语言很重要 。
  • 单词级tokenization:用于语言处理的基本文本tokenization 。每个单词都被用作一个不同的token , 它很简单,但受到限制 。
  • 句子片段:用习得的子词片段分割文本,基于所学子单词片段的分段 。
  • 分词tokenization:采用不同合并方法的子词单元 。
  • 字节级tokenization:使用字节级token处理文本多样性,将每个字节视为令牌 , 这对于多语言任务非常重要 。
  • 混合tokenization:平衡精细细节和可解释性,结合词级和子词级tokenization 。
LLM 已经扩展了处理多语言和多模式输入的能力 。为了适应这些数据的多样性,已经开发了专门的tokenization方法 。通过利用特定语言的token或子词技术 , 多语言标记在一个模型中处理多种语言 。多模态标记将文本与其他模式(如图像或音频)结合起来,使用融合或连接等技术来有效地表示不同的数据源 。
4.2 tokenization 的重要性tokenization在 LLM 的效率、灵活性和泛化能力中起着至关重要的作用 。通过将文本分解成更小的、可管理的单元,LLM 可以更有效地处理和生成文本 , 降低计算复杂度和内存需求 。此外,tokenization通过适应不同的语言、特定领域的术语,甚至是新兴的文本形式(如互联网俚语或表情符号)提供了灵活性 。这种灵活性允许 LLM 处理范围广泛的文本输入,增强了它们在不同领域和用户上下文中的适用性 。
tokenization技术的选择涉及到粒度和语义理解之间的权衡 。单词级标记捕获单个单词的意义,但可能会遇到词汇表外(OOV)术语或形态学上丰富的语言 。子词级tokenization提供了更大的灵活性,并通过将单词分解为子词单元来处理 OOV 术语 。然而 , 在整个句子的语境中正确理解子词标记的意义是一个挑战 。tokenization技术的选择取决于特定的任务、语言特征和可用的计算资源 。
4.3 tokenization面临的挑战: 处理噪声或不规则文本数据真实世界的文本数据通常包含噪音、不规则性或不一致性 。tokenization在处理拼写错误、缩写、俚语或语法错误的句子时面临挑战 。处理这些噪音数据需要健壮的预处理技术和特定领域的tokenization规则调整 。此外,在处理具有复杂编写系统的语言时,tokenization可能会遇到困难,例如标志脚本或没有明确词边界的语言 。解决这些挑战通常涉及专门的tokenization方法或对现有tokenizer的适应 。
tokenization是特定于模型的 。根据模型的词汇表和tokenization方案 , 标记可能具有不同的大小和含义 。例如,像“ running”和“ ran”这样的单词可以用不同的标记来表示,这会影响模型对时态或动词形式的理解 。不同模型训练各自的tokenizer,而且尽管 LLaMa 也使用 BPE,但token也与ChatGPT不同 , 这使得预处理和多模态建模变得更加复杂 。
5. LLM应用中token 的使用我们需要知道当前任务的token 使用状况,然后,面对大模型的token长度限制,可以尝试一些解决方案
5.1 token 的使用状态这里采用OpenAI 的API , 使用langchain 应用框架来构建简单应用,进而描述当前文本输入的token 使用状态 。
from langchain.llms import OpenAIfrom langchain.callbacks import get_openai_callbackllm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)with get_openai_callback() as cb:result = llm("给我讲个笑话吧")print(cb)对于Agent 类型的应用而言 , 可以用类似的方法得到各自token的统计数据 。
from langchain.agents import load_toolsfrom langchain.agents import initialize_agentfrom langchain.agents import AgentTypefrom langchain.llms import OpenAIllm = OpenAI(temperature=0)tools = load_tools(["serpapi", "llm-math"], llm=llm)agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)with get_openai_callback() as cb:response = agent.run("Who is Olivia Wilde's boyfriend? What is his current age raised to the 2023?")print(f"Total Tokens: {cb.total_tokens}")print(f"Prompt Tokens: {cb.prompt_tokens}")print(f"Completion Tokens: {cb.completion_tokens}")print(f"Total Cost (USD): ${cb.total_cost}")


推荐阅读