嵌入是如何工作的?
Scrapeless Web Unlocker 会获取网页内容,供你的应用在生成嵌入向量之前进行清洗和整理。
嵌入是通过学习得到的数值表示,使得输入之间的有用关系可以通过向量运算来表达。在文本检索中,嵌入模型将查询或段落映射为向量,搜索系统则比较这些向量以识别候选证据。这种比较反映的是模型的已学习表示,而不是对真相的直接检验。
良好的嵌入工作流程应从应用程序需要回答的问题开始。检索手册中相关段落、查找近似重复的页面以及匹配产品描述,都是相关的问题,但其失败代价各不相同。模型、文本准备方式、相似度函数和评估集都必须支持那个特定任务。
文本如何变为向量?
嵌入模型通过其已学习的参数处理文本并生成数值表示。具体的架构和池化方法取决于模型本身。句子嵌入将序列中的信息整合到一个表示中,用于与其他输入进行比较。这与将原始单词作为精确可搜索的字符串存储是不同的。
The Sentence-BERT 研究 演示了为相似度比较而设计的句子表示。一个有用的原则是,这些表示可以被单独计算并在之后进行比较。你的应用程序仍然应该保留原始文本,因为向量既不是对来源内容可阅读的替代品,也不是重建其完整措辞的可靠方式。
嵌入模型学到了什么?
嵌入模型根据其训练目标和数据来学习关系。有些表示侧重于词语共现,而另一些则围绕句子对或查询-段落相关性进行训练。 词表示研究 建立了有影响力的分布式表示学习方法,但现代检索模型可能具有不同的目标和输入约定。
坐标通常不会具有诸如“价格”或“信任”这类稳定的日常标签。意义是分布在整个向量上的。为少数轴分配人类可读标签的可视化是教学示意图,而不是模型实际特征的地图。除非已经针对特定模型验证了对单个坐标的解释,否则不要基于对这些坐标的假定含义来设计业务规则。
| 表示 | 有用于 | 重要限制 |
|---|---|---|
| 精确文本 | 引用、词法搜索、审计 | 不同的措辞可能隐藏相关含义 |
| 嵌入向量 | 相似性比较和候选检索 | 亲近并不能证明正确 |
| 元数据 | 版本、权限、来源关系 | 过滤器需要准确维护的数值 |
| 生成的答案 | 根据证据呈现回答 | 需要来源支持和评估 |
相似度搜索如何使用嵌入?
相似度搜索使用定义好的度量,将查询表示与已存储的表示进行比较。余弦相似度比较的是方向;点积在向量未归一化时也会依赖于向量的大小。距离值是在该表示与度量下衡量接近程度的量,并不会自动成为置信度分数或答案正确性的概率。
对于一个关于重置账户访问权限的假设性支持问题,有用的结果可能会使用“恢复你的登录”这一短语,而不是重复提问中的用语。嵌入模型可能会将这些含义关联起来。但是,同一个模型也可能检索到已过时的恢复流程。评估时要判断该段内容是否回答了当前问题,而不仅仅是其措辞是否与同一主题相关。
为什么查询和文档表示必须兼容?
查询向量和文档向量必须属于兼容的表示空间。仅仅共享向量长度并不能建立兼容性。独立训练的模型可能会为同一概念分配不同的坐标,而且某些检索系统会有意使用经过联合训练的不同查询编码器和段落编码器。 稠密段落检索架构 是用于问答的协调表示示例。
将模型标识符、相关配置和预处理版本与索引数据一起存储。在更换嵌入模型时,构建并评估一个一致的替换索引。将旧文档向量与新的查询编码器混用,可能在仍通过基本维度检查的情况下悄然改变排序结果。将迁移视为一次具有可度量验收标准的检索变更。
源准备如何影响表示?
源准备控制嵌入模型所能看到的信息。重复的菜单、Cookie 提示、空的应用外壳以及不相关的页脚文本可能会主导一个文本片段。干净的抽取应当保留标题、正文之间的关系,以及解释表格数值的标签。过度清理可能会像保留每一个页面元素那样有害。
The Web Unlocker 采集层 为你的自有处理流程提供内容。它不会选择嵌入模型,也不会为检索质量背书。请分别保留原始文本和清洗后的文本,以便在搜索失败时可以追溯到抽取阶段。这个 清洗网页文本的流水线 在上游进一步区分了“获取页面”和“准备可用段落”这两个步骤。
存储的嵌入记录应该包含什么?
存储记录应当把向量与产出它的那一版精确文本关联起来。保留稳定的记录标识符、源位置、段落文本或可靠指针、内容版本、嵌入配置以及相关的访问元数据。只有当应用能够找回该段落并判断当前用户是否有权限查看时,检索结果才是有用的。
设想一次文档更新,改动了某个功能限制。如果源文本被替换,而向量仍代表旧段落,那么检索结果和引用内容就会不一致。要么给派生记录加版本,要么同步更新文本和向量。同时还要定义:删除源内容时如何移除其派生记录。一个索引如果保留已删除的段落,就可能返回源内容所有者有意撤回的信息。
如何在不“拍脑袋”的情况下评估嵌入?
用具有代表性的查询和经过判断的相关段落来评估嵌入。纳入精确标识符、意译、否定、相似产品、旧版本,以及语料库中本就没有答案的问题。在让语言模型生成答案前,先将检索到的候选结果与这些判断进行对比。这样可以把“检索未命中”和“生成错误”区分开。
先从简单的基线方法开始,比如词法检索,并在同一查询集上做对比。语义搜索可能更擅长意译匹配,而精确匹配在错误码和产品标识符上仍然很有价值。组合系统是可行的,但新增组件需要有证据支撑。报告查询集、语料版本和相关性标准,以便之后的改动可以在同一基础上进行比较。
嵌入在什么情况下不再足够?
嵌入用来识别相似性,而应用仍必须执行权限控制、选择最新来源、解决矛盾,并决定何时应当放弃作答。一个相近的段落可能提到了正确主题,却回答了错误问题。即使没有任何有用的存储段落,最近邻也总会有一个排序名次。
对于问答系统,要检查来源段落,并评估它是否支撑生成的结论。对于去重,要区分“内容完全相同”和“只是相关”。对于推荐,要先决定在哪些业务约束满足时,相似性才算重要。这些决策属于外围工作流。单纯提高向量维度或更换相似度度量,并不能弥补缺失的源证据或未定义的任务。
如何检查一次失败的语义匹配?
一次失败的语义匹配,应当从返回的段落开始,沿着流水线反向检查。先确认该段落是预期的源版本。对比其清洗文本与原始文档。然后检查查询表示、可检索记录以及搜索配置。这样的顺序可以在团队花时间改模型之前,先暴露抽取缺陷。
对于一个假设问题:某个账户设置是否会作用于已有会话,一个关于“如何创建新会话”的段落看起来可能非常相关,却漏掉了所需的区分。这种失败不能简单描述为“相似度低”。在评估记录中标注这条缺失的关联,并找出真正回答该问题的源段落。如果没有任何来源包含这一区分,合适的响应是获取更好的证据,或选择不回答该问题。
把成功和失败的匹配示例放在一起保存。一次模型更换可能修复某个意译匹配,却削弱对精确产品名的匹配能力。用同样的问题和语料版本进行对比,并检查任何“指标提升”背后的具体段落。这样就为在源内容清理、分块调整、词法支持、重排序和选择不同表示模型之间做出决策提供了现实依据。
结论
当学到的表示能让与任务相关的对比变得有用时,嵌入就能发挥作用。要保留干净的源段落,使查询与文档的表示保持兼容,并用真实问题来评判检索到的证据。向量只是该工作流中的一种派生记录。源质量和评估方式决定了它的最近邻是否能帮助应用给出正确答案。
在采集端做好准备,配合使用 Scrapeless Web Unlocker,然后在你自己的流水线中评估嵌入质量,并查看 Scrapeless pricing 来了解采集成本。
准备更好的嵌入来源
在进行你自己的抽取、嵌入和检索评估之前,先收集源内容。
立即注册即可获得 $5 in free credit — 无需信用卡.
领取你的 $5 额度 →常见问题
嵌入和关键词是一样的吗?
嵌入是学习得到的数值表示,而关键词搜索匹配的是词项及其词法关系。二者可以互为补充。即使在宽泛问题表述上受益于语义检索,精确标识符往往仍从词法匹配中获益。
嵌入可以证明一个陈述是真的么?
嵌入不能证明真伪。相似度描述的是在学习得到的向量空间中的关系,因此一个相关段落仍然可能是过时的、有错误的或不适用的。要检查真正的证据及其适用范围。
可以混用不同模型生成的向量吗?
来自无关模型的向量,不应仅因为长度相同就被视为一个兼容的搜索空间。对已索引段落和查询使用协同设计的模型配置,并用同样的相关性测试来验证模型迁移。
嵌入会取代原始文档吗?
嵌入不会取代原始文档。请保留段落及其出处,以便用户检查证据、应用程序应用访问规则,以及维护人员更新或删除正确的记录。