首页 > 其他分享 >将爬虫与大语言模型结合

将爬虫与大语言模型结合

时间:2024-08-14 09:27:18浏览次数:4  
标签:XPath 网页 语言 模型 爬虫 生成 LLM AUTOCRAWLER

论文标题:《AUTOCRAWLER : A Progressive Understanding Web Agent for Web Crawler Generation》

论文地址:https://arxiv.org/abs/2404.12753

摘要

Web自动化是一种重要技术,通过自动化常见的Web操作来完成复杂的Web任务,可以提高运营效率并减少手动操作的需要。

传统的实现方式,比如包装器,当面对新的网站时,面临着适应性和可扩展性的限制。

另一方面,由大型语言模型(LLM)赋能的生成型代理在开放世界场景中表现出较差的表现和可重用性。

在这项工作中,我们提出了一个面向垂直信息网页的爬虫生成任务,以及将自然语言模型(LLMs)与爬虫结合的范式,这有助于爬虫更高效地应对多变的网络环境。

我们提出了一种名为AUTOCRAWLER的两阶段框架,利用HTML的层次结构进行逐步理解。

通过自上而下和回溯操作,AUTOCRAWLER可以从错误的行为中学习,并持续精简HTML,以生成更好的动作。我们使用多个LLM进行了全面的实验,并展示了我们框架的有效性。

image-20240814075909411

介绍

Web自动化是指通过程序化方式与基于网络的应用程序或网站交互的过程,以执行通常需要人工操作的任务。

Web自动化通过简化重复且耗时的任务,显著提高了各种在线流程的效率、准确性和可扩展性。

在传统网络自动化中,方法主要依赖于包装器,这是一些专门设计用于从特定网站或页面中提取数据的脚本或软件。这种方法是封闭世界场景的特征,自动化系统仅与预定义的、有限的网站或页面集合交互,并且不扩展到该指定域之外。因此,这些传统方法在适应性和可扩展性方面存在局限性,当遇到新的或改变的网站结构时,难以有效地运行。

在这些限制下,基于规则的封装器和自动生成的封装器( Bronzi等,2013年),尽管它们之间有所不同,但都共同依赖于为每个网站手动标注的示例。例如,已经使用了超过1,400个网页标注来进行信息抽取(Lockard等,2019年)。

LLMs的出现彻底改变了Web自动化,通过引入诸如规划、推理、反思和工具使用等高级能力。利用这些能力,Web自动化通过LLM构建生成型代理,这些代理可以自主浏览、解释并与Web内容交互。

这通过复杂的语言理解和决策过程有效地解决了开放世界的基于Web的任务。然而,尽管取得了这些进展,这一模式仍面临两个主要问题。

一方面,现有的web代理框架通常表现出较差的性能,成功率被提到为2.0(Deng等人,2023年,在开放世界的任务。

另一方面,这种方法遇到的一个重大弱点是它的可重用性不足。

这意味着这些代理即使在处理类似的任务时也过度依赖LLM,从而导致在管理大量重复和类似的网页时效率低下。

在这项工作中,我们提出了一个爬虫生成任务的垂直信息网页。该任务的目标是自动生成一系列预定义的规则或动作序列,以自动提取目标信息。

这个任务需要一个LLM生成爬虫的范例。与传统的包装器相比,这种范式可以根据不同的网站和任务需求快速调整。

这种灵活性使抓取器能够更有效地处理多样化和不断变化的网络环境。与生成式代理范式相比,它引入了中间规则来增强可重用性,并在处理类似任务时减少对LLM的依赖,从而在处理大量Web任务时提高效率。

尽管LLM具有强大的网页信息提取能力,但LLM的爬虫生成仍然存在以下挑战:

首先,LLM主要是在大量干净的高质量纯文本语料库上进行预训练,缺乏对HTML等标记语言的接触。因此,LLM对HTML中固有的复杂结构和语义的理解有限。

其次,HTML作为一种半结构化数据,包含结构化(标签和属性)和非结构化(文本内容)的元素,同时包含嵌套的多层信息。它增加了爬虫生成的复杂性。

第三,尽管LLM在理解文本内容方面表现出色,但他们在理解冗长的结构信息文档方面仍然存在不足。这表明在准确捕获和利用长HTML文档中固有的层次结构方面存在潜在的挑战。

因此,我们引入AUTOCRAWLER,一个两阶段的框架,旨在解决这些爬虫生成任务中的困难。AUTOCRAWLER的概述如图2所示。我们的框架利用HTML的层次结构进行渐进式理解。

我们提出了一种基于LLMs的启发式算法,该算法包含上下分治和回溯操作。首先,尝试逐步细化到DOM树中包含目标信息的特定节点,当执行失败时,则向上回溯DOM树。这个过程能够修正错误的执行,并逐步剔除HTML内容中与目标无关的部分,直到成功执行。

我们的贡献可概括如下:

  • 我们提出了网络爬虫生成任务和利用大型语言模型(LLMs)生成爬虫的范式,并对抽取效率进行了分析。
  • 我们引入了AUTOCRAWLER,这是一个两阶段框架,具有逐步理解能力,用于生成可执行的操作序列。
  • 全面的实验结果证明了我们框架在网页爬虫生成任务中的有效性。

image-20240814080000318

AUTOCRAWLER

在本节中,我们解释了AUTOCRAWLER框架的开发,用于根据从半结构化的HTML中提取特定信息生成网络爬虫。我们的方法分为两个阶段:首先,我们采用了一种基于网页层级结构的渐进式生成框架;其次,我们基于从多个网页获取的结果建立了合成框架。整体框架如图2所示。

image-20240814080751521

与生成XPath的包装器方法不同,我们将爬虫生成任务建模为行动序列生成任务。具体来说,我们生成一个行动序列Aseq,它由一组种子网页(即测试案例中生成序列的小部分网页)中的一系列XPath表达式组成。

image-20240813194530708

n 代表动作序列的长度。我们在顺序使用解析器的方式执行XPath。在序列中,除了最后一个XPath表达式之外的所有 XPath 表达式都用于筛选网页,最后的表达式用于从筛选后的网页中提取相应的元素值。

然而,HTML内容组织为DOM树结构,这使得可以剔除无关的页面组件,因而限制DOM树的长度和高度,从而改善LLM生成的性能。

具体来说,我们执行的遍历策略由自顶向下和步回操作。

自上而下指的是从当前DOM树的根节点开始,逐步细化以找到包含目标信息的特定节点。反向推进指的是通过向上遍历DOM树,重新评估并调整选择标准,从而选择一个更可靠、更具有普遍适用性的节点作为定位目标信息更加一致、准确的定位基础。在每一步中,首先执行自上而下的操作,指导LLMs直接写出通向包含目标信息节点的XPath,并判断使用XPath提取出的值是否与其识别的值一致。如果执行失败,则采取反向推进操作,从中失败的节点后退,同时确保网页中包含目标信息,这一过程也是基于LLMs的导向。

尽管在递增生成过程中我们能够获取执行动作序列,但不同网页的目标信息具体位置和结构的差异仍然存在。这一过程可能在单个HTML页面中收集具有特定特征的XPath,但这种做法降低了动作序列的通用性。为了提高动作序列的重用性,我们提出引入综合阶段。具体实施如下:

  1. 随机选择ns个测试页面作为种子页面。
  2. 为每一个种子页面生成一个动作序列。
  3. 利用多个不同的动作序列从这些种子页面中提取信息。收集所有动作序列及其相应的结果,并从中挑选一个能够从所有种子页面中提取出全部目标信息的动作序列,作为最终的动作序列。

动作序列的长度依赖于大型语言模型(LLMs)的能力。为了全面探讨不同模型在理解网页结构方面的性能,我们研究了模型对步骤数量分布的影响。具体来说,我们收集了所有动作序列,并计算了不同LLMs与AUTOCRAWLER之间的平均步骤数。实验结果报告在表格3中。
我们注意到,具有更强LLMs的AUTOCRAWLER产生更短的动作序列。使用GPT4的AUTOCRAWLER平均需要1.57步,而使用Mistral 7B的AUTOCRAWLER平均需要3.82步。这一现象可以解释为更强大的模型具有更好的了解网页层次结构的能力,因此能够准确地输出更长、更深网页中的适当XPath,从而减少步骤的数量。

将HTML的长度定义为其HTML中词条的数量,其高度定义为表示HTML的DOM树的高。我们定义长度和高度的压缩比为原始网页的长度和高度与网页被AUTOCRAWLER精简后的长度和高度比值。

我们计算了在正确情况下,各个LLM的长度和高度压缩比,并据此对它们的性能进行了排名。图3显示了结果。令人感兴趣的观察是,长度和高度的压缩比都呈现出一个U形曲线。这种现象可以从两个方面进行解读:一方面,当LLM的性能强大时,它能在不返回并重新访问子DOM树的情况下生成正确的XPath;另一方面,当模型较弱时,它无法有效理解网页的层次结构,因此无法为网页生成可靠且有效的XPath。

自动爬虫中XPath的脆弱性 关于XPath的脆弱性,主要指的是XPath表达式在面对新的网页时,往往因为依赖特定信息的预测(如文本、@class等)变得无效或不准确地匹配目标元素。这种脆弱性在很大程度上依赖于XPath通过使用如文本信息这样的预测来指定具体信息。

我们主要关注基于文本特征生成XPath的重复使用性,因为这些文本信息来自于同一个网站(如@class就是一个生成稳定操作序列的好特性)。表4列出了依赖于文本的XPath表达式。我们旨在探索通过文本特征来生成XPath的具体情况再利用性。我们人工计算了不同类型预测(包含和等于)两种情况下的失效案例的比例。表5中的结果显示,较强的大型语言模型(LLM)的能力与使用自动爬虫时的失效案例比例呈下降趋势。然而,目前的前沿LLM GPT-4仍面临着XPath的脆弱性问题,这表明完全依赖LLM来生成可靠的XPath仍存在一定的差距。

image-20240814080851095

Web Automation with LLMs

许多研究探索了在网页模拟环境中开放世界的概念(Shi等人,2017;Yao等人,2023;Deng等人,2023;Zhou等人,2023),包涵了一系列涵盖现实生活场景的任务,比如在线购物、航班预订和软件开发等。当前的网页自动化框架主要致力于简化网络环境(Sridhar等人,2023;Gur等人,2023;Zheng等人,2024),并为计划和与网络交互制定策略(Sodhi等人,2023;Ma等人,2023)。然而,这些框架在重用性方面存在局限,代理在执行类似任务时对LLMs的依赖性过强,导致了效率低下。

DOM-based Web Extraction

这些方法利用了网页的层次结构。此类方法包括基于规则的方法(Zheng等,2008),学习封装器(即,一个DOM特定解析器,可以提取内容)(Gulhane等,2011;Kushmerick,1997;Dalvi等,2011)。现代策略采用了远距离监督,通过将现有知识库与web源进行匹配,以自动创建训练样本从而降低注释所需的努力(Lockard等,2018, 2019)。这种方法虽然大大减少了标注工作,但不可避免地会导致误删(即负样本)问题,因为是由于知识库的不完整性导致的(Xie等,2021)。

Conclusion

在这篇论文中,我们提出了一种名为“爬虫生成任务”的概念,该任务融合了LLM(Large Language Model)和爬虫的范例,以提升当前网络自动化框架的有效复用性。随后,我们提出了一个称为AUTOCRAWLER的两阶段渐进理解框架,旨在生成一个更加稳定和可执行的行动序列。全面的实验结果表明,AUTOCRAWLER在爬虫生成任务中能显著超越最佳基准。

标签:XPath,网页,语言,模型,爬虫,生成,LLM,AUTOCRAWLER
From: https://www.cnblogs.com/mingupupu/p/18358217

相关文章

  • MetaLLM大语言模型文本生成算法分析报告
    一、算法安全与监测算法安全信息内容安全方面,MetaLLM算法必须确保生成的文本不包含有害信息,如不当言论、歧视性内容等。这需要在训练数据中进行严格的筛选,并在模型设计时加入过滤机制。信息源安全则关注于训练数据的质量和多样性,以防止偏差和误解。算法监测信息安全监测:持......
  • C语言指针(3)
    野指针与空指针:野指针:概念:访问一个已经销毁或者访问受限的内存区域外的指针产生场景:·变量未初始化,通过指针访问该变量                       ·指针变量未初始化                           ·指......
  • 自蒸馏技术在语言模型微调中的桥梁作用
    自蒸馏技术在语言模型微调中的桥梁作用的阐述:自蒸馏技术在语言模型微调的领域中发挥着举足轻重、不可或缺的桥梁作用,宛如一座连接着广阔的预训练知识海洋和具体任务应用港湾的坚固桥梁。以下我们将从多个维度进行深入剖析,以揭示其深刻而复杂的作用机制: 1. 知识迁移与适配......
  • 【C语言】内存管理函数详细讲解
    目录1.C语言内存管理函数详细讲解1.1`malloc`1.2`calloc`1.3`realloc`1.4`free`2.内存管理函数的深层理解2.1内存分配的原理2.2内存分配的性能考虑2.3动态调整内存块的大小2.4处理内存分配失败3.高级应用示例3.1内存池的实现3.2实现内存泄漏检测3.3内存......
  • C语言---数据类型和变量
    1.数据类型介绍  C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作。2.内置类型1.字符型char  ......
  • C语言——指针(数组,函数)
    通过指针引用数组数组元素的指针数组指针:数组中的第一个元素的地址,也就是数组的首地址指针数组:用来存放数组元素地址的数组(存放数组元素指针的变量),称之为指针数组。eg://定义一个一维数组inta[]={1,4,9};//使用指针变量存储数组的第一个元素的首地址,也就是数组......
  • USB协议详解第8讲(USB描述符-字符串和语言ID描述符)
    1.字符串描述符相关概念字符串描述符:首先,字符串描述符就是用字符串描述一个设备的一些属性,毕竟人能看懂的是字符,而不是十六进制,描述的属性包括设备厂商名字、产品名字、产品序列号、各个配置名字、各个接口名字,还有就是由我们用户自己定义的字符串,说白了就是起名字,让人们一看就知......
  • C语言入门零基础:9、字符串
    一、字符串定义    1、字符串和字符数组的区别:        字符数组存任意数组都可以,它可以以任何字符结尾;        字符串需要使用字符数组来存,但是结束必须要有一个'\0'字符;        只有字符串才能用双引号定义 ......
  • C语言实现斐波那契数列
    斐波那契数列(Fibonaccisequence)是一个经典的数学问题,在数学和计算机科学领域都有广泛的应用。斐波那契数列是以意大利数学家列昂纳多·斐波那契(LeonardodaFibonacci)的名字命名的,他通过兔子繁殖的例子引入了这一数列。斐波那契数列的每一项都是前两项的和,且从第三项开始,即1、......
  • Chapter 33 SQL语言
    欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!文章目录前言一、概述二、数据定义(DDL)三、数据操纵(DML)四、数据查询(DQL)前言SQL不仅是数据库管理系统(DBMS)的标准语言,更是数据分析和数据驱动决策的基础工具。本章将详细讲解SQL语言的数据定义(DDL)、......