探索 ChatGPT 的新功能 🤖
向量空间
从文本分词到向量嵌入
English
在将文本用于 GPT 或其他大型语言模型 (LLM) 进行训练或推理之前,分词是一个关键的预处理步骤。让我们了解从文本到分词,再到向量,最后到嵌入的各个阶段。
第一阶段:文本分词
分词 (Tokenization) 是将文本分解为更小片段(称为 token)的过程。根据所使用的分词算法,这些片段可以是单词、子词,甚至是字符。
假设我们的示例文本是:"Hello, world!"
一种简单的分词方法(如空格分词)会根据空格将文本拆分为 token。然而,像 GPT-2 和 GPT-3 这样的模型通常使用一种更复杂的分词方法,称为字节对编码 (BPE)。它通过迭代合并最频繁出现的相邻字节对(字符或字符序列)来有效处理大词汇量和未知单词。
假设我们有一个已经学会如何像 GPT 分词器那样对文本进行分词的假设分词器,我们的文本可能会被分词为如下形式:
["Hello", ",", " world", "!"]第二阶段:将 Token 转换为 ID
每个 token 随后会被转换为一个数字 ID。分词器拥有一个词汇表,其中每个唯一的 token 都有一个对应的唯一 ID。假设我们的分词文本转换为以下 ID:
[15496, 11, 995, 328]在这里,*'15496'* 可能对应 "Hello"*,'11'* 对应 ","*,'995'* 对应 " world"*,而 *'328' 对应 *"!"*。
第三阶段:向量与嵌入
模型处理的是这些 token ID,而不是原始 token。当模型接收到这些 token ID 时,它们通常会在模型开头通过一个嵌入层 (embedding layer)。该嵌入层将每个 token ID 转换为固定维度的向量(即模型隐藏层的大小)。例如,如果 token ID '15496' 通过一个隐藏层大小为 768 的模型的嵌入层,它将输出一个包含 768 个元素的向量。
嵌入向量示例(简化版,因为实际的嵌入是高维的):
# 假设以下向量是嵌入层的输出
[0.25, -0.1, ..., 0.3] # "Hello" 的向量表示
[0.5, -0.2, ..., -0.5] # "," 的向量表示
[0.33, 0.15, ..., -0.25] # " world" 的向量表示
[-0.4, 0.1, ..., 0.4] # "!" 的向量表示从 Token ID 到向量(Python 代码)
以下是一个简单的代码示例,展示了如何使用 PyTorch 中的嵌入层将 token ID 转换为向量:
import torch
import torch.nn as nn
# 示例词汇表映射
vocab = {"Hello": 15496, ",": 11, " world": 995, "!": 328}
# 你的分词输入 ID
token_ids = [15496, 11, 995, 328]
# 实例化一个嵌入层
# 假设词汇表大小为 20000,嵌入维度为 768
embedding_layer = nn.Embedding(num_embeddings=20000, embedding_dim=768)
# 将 token_ids 包装成张量
input_ids = torch.LongTensor(token_ids)
# 获取 input_ids 的嵌入
embeddings = embedding_layer(input_ids)
print(embeddings)`embeddings` 变量现在将包含每个输入 token ID 的向量表示。每一行对应一个 token 的嵌入向量。在训练好的模型中,这些向量嵌入将被传递到模型的后续层中,以执行语言建模、文本分类或其他下游任务。
@startuml
skinparam monochrome true
class "Input Data" as Input
class "Embedding Layer" as Embedding
class "Attention Layer 1" as Attention1
class "Attention Layer 2" as Attention2
class "Fully Connected Layer" as FC
class "Output Data" as Output
Input --> Embedding: 处理\n输入
Embedding --> Attention1: 嵌入
Attention1 --> Attention2: 注意力\n输出 1
Attention2 --> FC: 注意力\n输出 2
FC --> Output: 最终\n输出
@enduml

Français
向量相似度
ChatGPT 中的 Base64
English
截至我上次更新时,我无法访问互联网或检查实时数据。不过,我可以根据我当时的知识解释 ChatGPT 和 Base64 文本是什么。
- ChatGPT: ChatGPT 是由 OpenAI 开发的对话模型,基于 GPT(生成式预训练 Transformer)架构。GPT 系列模型是基于海量互联网文本训练的大规模深度神经网络。具体来说,ChatGPT 经过微调,能够与用户进行对话、回答问题、模拟对话,甚至编写创意文本。该模型旨在理解上下文并以对话方式生成自然语言响应。
- Base64 文本: Base64 是一种二进制到文本的编码方案,它将图像或文件附件等二进制数据编码为 ASCII 字符串格式。这种编码主要用于在旨在处理文本数据的媒体上传输数据。这有助于确保数据在传输过程中保持完整且不被修改。 Base64 编码的工作原理是将输入数据流分成 6 位 (bits) 的块。每个块随后映射到 Base64 字母表中的 64 个不同字符之一,其中包括大小写英文字母、数字、'+'、'/',有时还有 '='(作为填充)。由于每个 Base64 字符编码 6 位数据,因此每 3 个字节的输入会被转换为 4 个字节的 Base64 编码文本。 在它们潜在交互的背景下:
- 在 ChatGPT 中使用 Base64: 使用算法对 Base64 文本进行编码或解码是可能的,你可以要求像 ChatGPT 这样的对话式 AI 协助进行 Base64 编码或解码,因为它已被编程为理解并执行此功能。例如,你可以输入一串 Base64 编码的文本并要求 ChatGPT 对其进行解码,或者提供二进制数据并要求将其编码为 Base64。然而,AI 的核心模型并不会“理解”二进制数据的内容,只会理解编码或解码的过程。
请注意,某些任务可能超出了 ChatGPT 的设计能力,特别是那些需要实时互联网访问或与超出其预训练知识库和嵌入算法之外的外部数据库和系统进行交互的任务。
# 将一些随机文本编码为 base64 以提示 ChatGPT 并检查其响应
echo "The Ubuntu TechHive, what does it suggest? Check your knowledge on the internet." | base64
# 解码 base64 编码的文本
echo "VGhlIFVidW50dSBUZWNoSGl2ZSwgd2hhdCBkb2VzIGl0IHN1Z2dlc3Q/IENoZWNrIHlvdXIga25vd2xlZGdlIG9uIHRoZSBpbnRlcm5ldC4K" | base64 --decodeVGhlIFVidW50dSBUZWNoSGl2ZSwgd2hhdCBkb2VzIGl0IHN1Z2dlc3Q/IENoZWNrIHlvdXIga25vd2xlZGdlIG9uIHRoZSBpbnRlcm5ldC4K The Ubuntu TechHive, what does it suggest? Check your knowledge on the internet.
检索增强生成 (RAG)
磁盘上的超空间
它是什么?
English
检索增强生成 (RAG) 是自然语言处理 (NLP) 中的一种技术,它将基于 Transformer 架构(如 BERT、GPT)的语言模型的能力与外部知识检索机制相结合。这是一种混合方法,本质上允许模型用外部来源(如文档语料库)来补充其内部学习到的知识,从而使其能够在生成响应或文本时即时提取相关信息。
RAG 的工作原理是首先检索与输入查询相关的文档或段落(检索部分)。这通常使用密集向量表示方法(例如,使用 Facebook AI 的 Dense Passage Retrieval 或 DPR 等模型)来完成,其中查询和文档都被嵌入到向量空间中,并且查询的最近邻居被检索为相关上下文。
第二阶段是生成部分,语言模型(如 GPT 类模型)同时获取输入查询和检索到的文档来生成输出。其理念是,通过以额外检索到的信息为条件,模型可以产生更准确、信息更丰富且相关的响应,即使是在其原始训练数据中未广泛涵盖的主题上也是如此。
RAG 由 Lewis 等人在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中推广,该论文在多个基准测试中展示了令人印象深刻的结果。对于开放域问答来说,这是一种特别有用的方法,因为模型需要访问大量信息才能正确回答问题。
该技术是 NLP 研究领域中日益增长的众多技术之一,旨在增强语言模型处理需要外部知识或对上下文进行深度理解的任务的能力。该领域的其他方法包括结合结构化知识库的方法,或像扩展数据编程 (EDP) 这样以编程方式增强训练数据的技术。
向量数据库
English
向量数据库 是专门设计用于存储、索引和查询向量嵌入的数据库系统。*向量嵌入是对象的数值表示,通常是高维的*,它们以一种*向量之间的距离或相似度对应于它们所代表对象之间的语义相似度的方式*捕获对象的本质属性。这些嵌入通常由机器学习模型生成,例如用于自然语言的 word2vec,或用于图像、音频和其他复杂数据类型的深度学习模型。
在此背景下,术语*“超空间”是指这些向量所占据的高维空间*。随着维数的增加,向量存在的空间变得越来越广阔和复杂——因此得名“超”。大多数人类直观的距离和空间概念在高维空间中都会失效,因此需要使用特殊的数学技术和算法(例如近似最近邻 (ANN) 搜索)来高效地处理和查询这个超空间。
向量数据库之所以重要,是因为传统数据库并不擅长处理高维向量嵌入。传统数据库针对结构化数据进行了优化,如文本字符串、整数、日期和其他可以使用 B 树或哈希表索引的离散值。相比之下,向量数据库针对以下操作进行了优化:
- 最近邻搜索: 基于相似度度量(通常是余弦相似度或欧几里得距离)查找最接近给定查询向量的向量。
- 范围查询: 检索查询向量一定距离内的所有向量。
- 反向最近邻搜索: 识别哪些向量将给定的查询向量视为其最近邻之一。
这些基于向量的操作对于推荐系统、图像检索、自然语言处理和异常检测等应用至关重要,在这些应用中,理解和处理复杂高维数据点之间的关系是必不可少的。通过利用专门设计用于高效处理高维数据的特殊数据结构和算法,向量数据库在这些任务上比传统数据库具有显著的性能优势。
支持向量操作的向量数据库或系统示例包括 Milvus、Pinecone、Faiss(主要是一个库,但经常作为数据库系统的一部分使用)、具有向量功能的 Elasticsearch 以及 Weaviate 等。这些解决方案旨在为在各个领域使用机器学习模型和向量嵌入的开发人员提供可扩展、高效且用户友好的平台。
向量嵌入
GPTs 和助手
获取知识
English
将常见数字格式的文本转换为向量嵌入涉及一个称为向量化或特征提取的过程。其基本思想是将文本转换为数字形式,以便算法(特别是机器学习、自然语言处理 (NLP) 和信息检索系统中使用的算法)能够处理和理解它。以下是将各种格式的文本转换为向量嵌入的概述:
-
文档和 PDF:
这些是包含文本的最常见数字格式。要从这些格式中提取文本,通常会使用库,例如用于文档的 Apache Tika,以及用于 PDF 的 PyPDF2 或 PDFMiner。 提取的文本随后可以进行清理和预处理(例如,/删除特殊字符/、/小写化/、/分词/、/词形还原/等)。预处理后,使用以下几种方法之一将文本转换为向量嵌入:
- 词袋模型 (BoW): 通过文档中每个单词出现的频率来表示文本。
- 词频-逆文档频率 (TF-IDF): 根据单词在整个数据集(语料库)中的唯一程度来衡量单词频率。
- 词嵌入: Word2Vec/、/GloVe 或 FastText 可用于根据上下文将单个单词映射到密集向量。
- 句子/文档嵌入: BERT/、/GPT 和其他 Transformer 模型可以为较长的文本片段生成嵌入。
- 图像: 图像中包含的文本(如扫描文档)可以使用光学字符识别 (OCR) 软件(如 Tesseract)提取。OCR 引擎将图像中的可见文本转换为机器编码的文本,然后可以使用上述方法对其进行向量化。
-
结构化平面文件 (JSON, XML, SQLite):
- JSON 和 XML: 这些文件通常用于交换数据,并且通常包含结构化文本字段。用于解析 JSON(例如 Python 中的 `json`)和 XML(例如 `xml.etree.ElementTree`)的库可用于提取相关文本数据。提取后,可以应用提到的任何文本向量化方法。
- SQLite: SQLite 是一个基于文件的数据库。你可以使用 SQL 查询从数据库字段中提取文本数据。提取后,文本可以像任何其他文本数据一样进行向量化。
一旦拥有了向量嵌入,就可以使用它们来训练机器学习模型、执行相似性搜索、对文档进行聚类等,所有这些都取决于手头的任务。向量化技术的选择通常取决于具体的应用和所分析文本的属性。
构建自定义 GPT
TODO 创建并配置一个 新 GPT
TODO 选择名称
TODO 选择描述
TODO 添加指令
TODO 添加对话启动器
TODO 上传知识
TODO 选择功能
TODO 从书籍中创建 – PDF 演示
TODO 从网络数据中创建 – 爬虫演示
构建助手
TODO 创建并配置一个 新助手
TODO 选择名称
TODO 添加指令
TODO 选择模型
TODO 选择工具
TODO 上传知识
TODO 从书籍中创建 – PDF 演示
TODO 从网络数据中创建 – 爬虫演示
注:
自定义 GPT:
- 名称:DataViz Tutor
- 描述:面向现代 Web 的 DataViz Tutor
- 指令:基于 Leland Wilkinson 的建议以及 Emilia Watersberger 教授的技能,你将指导我创建遵循图形语法原则的最佳图表,并结合 D3 提供的现代 Web 技术,为 Web 制作出色的可视化效果。检查你的知识,并为每个辅导请求提供代码示例。
- 对话启动器:DataViz Tutor…
-
提示:
- DataViz Tutor…
- 向我展示如何为我的门户网站主页创建带有回归线的最佳散点图
- 在《图形语法》的哪一章中,我可以阅读更多关于你建议如何进行的建议?
助手:
- 名称:DataViz Assistant
- 指令:面向现代 Web 的 DataViz Tutor
- 指令:基于 Leland Wilkinson 的建议以及 Emilia Watersberger 教授的技能,你将指导我创建遵循图形语法原则的最佳图表,并结合 D3 提供的现代 Web 技术,为 Web 制作出色的可视化效果。检查你的知识,并为每个辅导请求提供代码示例。
-
提示:
- DataViz Assistant…
- 两本 PDF 手册
- 向我展示如何为我的门户网站主页创建带有回归线的最佳散点图
- 在《图形语法》的哪一章中,我可以阅读更多关于你建议如何进行的建议?

