为平行语料库创建的网页抓取(Web Scraping) 网页抓取是生成平行数据的一种常见方式,它利用了网络上提供的大量多语言数据。以下是如何做网页抓取。 获取高质量的平行语料库对于训练性能良好的机器翻译引擎至关重要。有许多公开的多语种语料库,如《欧洲议会议事录》(Europarl)或转录的TEDTalks(OPUS)。由于它们的丰富程度和被证实的高质量,它们已经被研究人员用作大规模平行语言数据的来源。访问或生成平行语料库最常见的方法之一是网络抓取,利用网络上提供的大量多语言数据。在NLP社区中,网页抓取通常用于收集文本数据,包括双语和多语言以及单语。例如,BERT语言模型广泛用于各种NLP任务,如文本分类和文本生成,已经在从维基百科提取的文本数据上进行训练。 如果你想在网上搜集平行数据,你从哪里开始,如何完成这项任务?这篇文章旨在给那些对网页抓取感兴趣的人一些指导。还有一个相关的术语,网也扒取(web crawling),通常与网络抓取同义。两者都涉及到网页的自动浏览,但是网页抓取强调的是数据提取。通常,平行数据的抓取由三部分组成: -研究和设计抓取过程 -进行抓取 -对收集的数据进行后处理 第一步是研究网络中潜在的平行内容。这可以是一个提供多种语言内容的网站。或者,也可以是两个主题相似但语言不同的网站或网页。维基百科就是一个很好的例子,它以多种语言提供大部分内容。下一步是研究候选网站的结构,以找出它的哪一部分可能以平行方式可用。您可以从查看有语言栏的最新文章或章节开始,这些文章或章节以另一种语言提供相同的内容,并查看某些部分或章节以多种语言提供的模式是否一致——这些内容可能已经被翻译,可以被抓取以创建平行语料库。在这一点上,一个好主意是检查原始文章和翻译文章在内容方面有多接近。如果你在某种程度上熟悉你正在处理的语言,你可以使用你自己的判断,否则,你可以通过你选择的自动化机器翻译系统来运行文本,以获得大致的理解。翻译得太松散或太总括的文章可能不适合你的目的。 一旦一个或多个多语言网站被确定为适合平行数据抓取,许多网页抓取工具可用于抓取过程。一些流行和有效的工具是Scrapy,部署在Python中,以及Selenium WebDriver,它可以用Java、Python和其他一些编程语言实现。这些工具提供了广泛的功能,可以在网络上抓取各种数据,包括文本数据。Scrapy是一个多功能的框架,允许用户创建自己的抓取器,或者通常被称为spider,它将抓取用户选择的网站。一旦提供了一个起始URL地址或URL列表,Scrapy spider就会按照用户定义的结构化方式从中提取信息。例如,一个Scrapy spider可以被编程来解析每个获取的网页的HTML结构,并只提取页面上特定部分的文本数据,而忽略图像或菜单栏。 除了Scrapy的功能之外,Selenium还允许数据专家模拟和自动化用户通常通过浏览器与网站交互的方式:例如,点击弹出窗口、填写表格或向下滚动页面以下载网站上的所有内容。通过模仿这种行为,scraper可以从提供给它的URL列表中收集更完整的数据。 然而,对于数据专家来说,还有一项额外的任务,即在抓取这些数据的同时让数据以两种或多种平行语言的方式呈现,篇对篇或页对页。其中一个决定是按照语言收集数据。网页的URL结构通常提供了关于其网页所用语言的信息:它可以是一个域扩展,如.du 或者.ru,以及URL地址中的语言代码。下面的例子说明了欧盟委员会关于研究和创新的德语和英语网页的不同之处,只是URL地址中的德语/英语代码不同: https://ec.europa.eu/info/research-and-innovation_de https://ec.europa.eu/info/research-and-innovation_en 利用这些信息,数据专家可以为每个域或语言代码启动多个抓取过程,并按语言保存结果以供进一步预处理。通常,网页的HTML结构还会包含一个元素,其中包含有关其语言的信息。 囊括进提取这个元素的指令也是像Scrapy这样的web scraper可以为您做的事情,让您可以按照语言保存抓取结果。如果您正在处理一个结构化程度较低的网站,其中没有可用的语言信息,语言识别工具,如Facebook的fasttext或Google的cld3 可以帮助您在进行对齐和后处理之前,对每种语言的数据进行整理分类。 一旦你抓取了你感兴趣的网站并按语言保存了数据,下一步就是逐句对齐收集的文本数据。 如果网站结构良好,并且URL地址或HTML结构提供了关于所选源语言中的哪个页面对应于目标语言中的哪个页面的线索(如上面的EC网页示例),则可以基于该信息匹配收集的文档。 但是,有时需要一个中间步骤,在句子级别上对齐文档之前,先对齐文档本身。传统上,各种各样的基于翻译的方法都被应用于文档对齐,如WMT 2016 Document alignment task基于候选文本的tf-idf信息以及基于n-gram和神经语言模型的各种技术工作得非常好,并且表现出高准确性。 一旦数据被文档对齐,您就可以进入创建实际平行语料库的最后一步,即在句子级别对齐。句子对齐工具,如Bleualign和Vecalign都是不错的选择,精确度高。Bleualign需要额外的努力将MT翻译的源句子集创建为目标语言,允许该工具计算目标句子和MT翻译的源句子的成对BLEU分数,并根据最佳BLEU分数判断哪些句子应该对齐。 Vecalign以相同的方式工作,只是它不是计算BLEU分数,而是计算源句子和目标句子之间的余弦相似性,并根据找到的最高相似性做出对齐决定。为了计算这种相似性,Vecalign需要根据源文件和目标文件生成句子嵌入(sentence embeddings)。当涉及到语料库的句子对齐时,Bleualign和Vecalign都是很好的选择,但是,Vecalign拥有一个额外的优势,即能够检测一对多和多对一对齐,即源端的两个句子对应于目标语料库端的一个句子。这是一个非常有用的特性,允许为最终语料库提取更多的数据。它还带来了更高的计算工作量,因为它需要为源侧和目标侧的所有句子重叠集生成句子嵌入。 一旦句子对齐,平行语料库就差不多准备好了!然而,仍然可能有一些噪音,需要额外的后处理和清理。在这种情况下,您可能希望删除重复的句子、对您的目的没有帮助的一两个单词的短句、非预期语言对的语言句子以及潜在的错位句子。NLP提供了许多有用的工具,可以帮助进行清理。正如本文中已经提到的,fasttext和cld3模型可以帮助删除不想要的语言,句子嵌入将有助于对语料库的对齐程度进行清洁度检查,以及删除对齐不良的句子。 在TAUS,我们在开发抓取框架以及借助本文中描述的工具包构建高效的后处理和清理工具方面拥有丰富的经验。 (机器翻译,轻度译后编辑,仅供参考) 编辑:胡跃
如何进行网页抓取?
研究与设计
抓取
后处理