【Spark NLP】第 17 章:支持多种语言

2023-10-16 19:59
文章标签 支持 17 nlp spark 多种语言

本文主要是介绍【Spark NLP】第 17 章:支持多种语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

语言类型学

场景:学术论文分类

不同语言的文本处理

复合词

形态复杂性

迁移学习和多语言深度学习

跨语言搜索

清单

结论


在构建 NLP 系统时,您应该回答的第一件事是您将支持哪种或多种语言。这会影响从数据存储到建模再到用户界面的方方面面。在本章中,我们将讨论在生产多语言 NLP 系统时要考虑的事项。

在本章的最后,我们将有一份关于您的项目的问题清单供您提问。

语言类型学

当支持多种语言时,管理复杂性的一种方法是确定预期语言之间的共性。例如,如果您只处理西欧语言,您知道您只需要考虑拉丁字母及其扩展。此外,您知道所有语言都是融合语言,因此词干化或词形还原将起作用。他们也有类似的语法性别系统:男性、女性,也许还有无生命的中性。

让我们看一个假设的场景。

场景:学术论文分类

在这种情况下,您的输入将是文本文档、PDF 文档或文本文档的扫描件。输出应该是带有文本、标题和标签的 JSON 文档。您将接受作为输入的语言是英语、法语、德语和俄语。您已经标记了数据,但它仅来自最近五年的文章。这是出版商开始要求在提交期间标记文章的时候。最初的分类可以是部门级别的——例如,数学、生物学或物理学。但是,我们需要有一个支持子学科的计划。

首先,我们应该考虑不同的输入格式。我们需要有用于将图像和 PDF 文档转换为文本的 OCR 模型。我们在第 16 章看到我们可以为此使用 Tesseract 等工具。如果找不到满意的模型,我们可以使用文本文件创建训练数据集。一些扫描的文档会有问题。例如,文档可能没有很好地与扫描床对齐,因此文本会倾斜。该文件可能已经过时并且文本已被侵蚀。我们的模型需要适应这一点。因此,我们需要找到某种方法来生成腐蚀和倾斜的文本以支持扫描的文档。我们可以转录一些文件,但这是非常耗费人力的。您尝试通过将转录过程分成几部分来简化转录过程。转录的另一个复杂之处是,如果您使用不懂语言的转录员,他们将更容易出错。

其次,我们要考虑分类任务。对于初始模型,我们可能会使用词汇特征和简单的线性分类器。仅使用关键字在部门级别分离论文是非常可行的。您可以使用专家来生成这些关键字,也可以从词汇分析中找到它们。您仍然需要与精通这些语言的领域专家一起查看关键字。将来,简单的词汇特征将有助于分离子学科,尤其是可能没有很多独特关键字的利基子学科。在这种情况下,我们可能希望转向更复杂的模型。首先,我们可以从具有更复杂模型的词袋开始,或者直接使用 RNN。无论哪种方式,我们都必须构建我们的代码,以便我们可以支持不同的预处理和建模框架。

不同语言的文本处理

在我们讨论项目中的模型构建之前,我们需要确定我们将如何处理文本。我们已经在第2章和第5章中讨论了标记化的一些常见注意事项。大多数书写系统使用空格作为单词分隔符。有些使用其他符号,有些根本不分隔单词。另一个考虑因素是词复合。

复合词

词复合是我们将两个词组合成一个词。例如,“月光”是两个词的组合。在某些语言中,例如德语,这更为常见。事实上,在德语中分词器是一种常见的德语文本处理技术,这在德语中已经很常见了。考虑“Fixpunktgruppe”(“不动点群”)这个词,它是一种特殊代数结构的数学术语。如果我们想找到文档中提到的所有组结构,我们需要将“gruppe”分开。这在具有更多生产后缀的语言中可能很有用。

在英语中,借词与添加前缀或后缀来创建新词一样常见。例如,我们使用“拖拉机”这个词来表示用于拉动的机器——“拖拉机”就是“拉动机”的拉丁词。在其他一些语言中,借用不太常见,例如希腊语、冰岛语和普通话。在这些语言中,我们可能需要考虑将这些词拆分为它们的组成词素。这对于复合词可能不会在所有上下文中复合的语言尤其重要。这些可分词类似于英语中的一些短语动词。短语动词是像“wake up”这样的动词。“向上”助词可以与动词分开,也可以不分开。

I woke up the dog.
I woke the dog up.

但是,有些对象需要分离。

*I woke up her.
I woke her up.

德语翻译“aufstehen”在有限形式中会丢失前缀。

zu aufstehen den Hund ["to wake the dog up"]
Ich stand den Hund auf ["I woke the dog up"]

因为这些派生词通常具有与它们的基础非常不同的含义,我们可能不需要处理它们。在文档级别的工作(例如文档分类)中,这些词不太可能影响模型。您更有可能需要在基于搜索的应用程序中处理此问题。我建议不要在你的第一次迭代中处理这个问题,并监视使用情况,看看是否经常搜索复合词。

形态复杂性

在第 2 章中,我们讨论了语言将语素组合成单词的不同方式。分析语言,如普通话,倾向于使用助词来表达过去时之类的东西。同时,合成(或粘着性)语言,如土耳其语,具有用于表达名词在句子中的作用、时态、介词等的词缀系统。介于这两者之间的是融合语言,比如西班牙语,它没有合成语言那么多可能的词形,但比分析语言多。对于这些不同类型的形态,在考虑词干化与词形还原时需要权衡取舍。

可能的词形式越多,词形还原需要的内存就越多。此外,一些融合语言比其他语言更规则。语言越不规则,词干算法就越困难。例如,芬兰语名词最多可以有 30 种不同的形式。这意味着每个动词需要有 30 个条目。芬兰动词要复杂得多。这意味着,如果你有一个 100 万字的词汇表,你将需要远远超过 3000 万个词条。

分析语言可以使用词干提取或词形还原,甚至都不使用。普通话可能不需要这样的处理。英语是一种从融合型向分析型过渡的语言,可以使用其中任何一种。很少有足够的形式可以使词形还原是可行的,并且词干提取也不是太困难。让我们看一下英语中的规则动词(也称为弱动词)。动词“call”有“call”、“calling”、“calling”和“calls”的形式。名词在英语中更简单——只有两种形式(单数和复数)。确定名词和规则动词形式的规则也很简单,可以构建一个lemmatizerfor。

像芬兰语这样的合成语言通常非常规则,因此词干提取算法很简单。对于融合语言,您可能会使用组合方法。不规则形式在最常用的词中更为常见。因此,您可以对最常见的单词使用词形还原,并使用词干作为后备。

迁移学习和多语言深度学习

嵌入和迁移学习背后的想法之一是神经网络正在学习更高层次的数据中的特征。这些特征可用于获取在一个数据集上训练的模型或模型的一部分,并将其完全用于不同的数据集或不同的问题。但是,我们必须注意数据有多么不同。如果 Twitter 上的英语和医疗记录中的英语之间的差异足以降低可移植性,那么想象一下英语和另一种语言之间的翻译损失了多少。话虽如此,如果您希望构建一个比随机起点更好的模型,您应该尝试可迁移性。这对某些问题比对其他问题更有意义。例如,在我们之前的场景中,学术文档的分类将取决于在我们所有语言中可能具有相似分布的技术术语。这意味着可转移性可能会有所帮助——当然值得尝试。另一方面,如果我们正在构建一个处理来自不同国家的医疗记录的模型,那么跨语言的可迁移性可能就不那么有用了。不仅根本现象不同(不同地方的常见疾病不同),而且对文件的监管要求也不同。因此,这些文件不仅在语言上有所不同,而且在内容和目的上也有所不同。

词嵌入是一种足够通用的技术,有希望实现可迁移性。这仍然是一个研究课题。这个想法是,虽然相同词的词频可能不同,但概念的分布更加普遍。如果是这样,也许我们可以学习从一种语言的向量空间到另一种语言的转换,以保留语义内容之间的关系。

一种方法是学习基于参考翻译的转换。假设我们有两种语言,L1 和 L2。我们从 L1 中获取一个单词列表,以及它们在 L2 中的翻译。这些参考词中的每一个都将映射到 L2 向量空间中的一个点。假设 L1 是拉丁语,L2 是英语。单词“nauta”w在拉丁向量空间中具有向量,v在变换后在英语向量空间中。英语等价的“sailor”有向量uu我们可以通过查看和之间的欧几里得距离来定义该词的转换误差v。使这种差异最小化的转换应该可以很好地工作。问题在于不同的文化可以使用等价的话很不一样。此外,多义词因语言而异,这种方法仅适用于静态嵌入。

这是一个活跃的研究领域,并且会有新的发展。这些技术的希望之一是,它将让我们将其中一些高级技术用于没有构建深度学习模型所需的庞大语料库的语言。

清单

考虑有关您的项目的以下问题:

  • 我需要支持哪些语言?
  • 我需要支持哪些书写系统?
  • 我需要支持哪些 Unicode 块?
  • 我有可以咨询的语言专家吗?
  • 文本处理
    • 我需要支持哪些语言类型?
    • 我是否有必要的参考数据(引理、词干算法)来支持我的语言?
  • 多语言分类
    • 我需要多语言模型,还是每种语言都需要一个模型?
    • 不同语言的标签是相同的,还是只是相似的?
    • 我有用于标记数据的标记器吗?
  • 多语言深度学习
    • 我使用的语言有何不同?
    • 我工作的文化有多大不同?
  • 跨语言搜索
    • 用户是否需要通过单个查询进行跨语言搜索?
    • 我可以使用自动机器翻译模型吗?

结论

处理多语言应用程序可能很复杂,但它也提供了巨大的机会。没有多少 NLP 应用程序是多语言的。也没有多少人有创建此类应用程序的经验。

多语言应用程序如此困难的原因之一是标记的多语言数据的可用性很差。这意味着多语言 NLP 项目通常需要您收集标记数据。我们将在第 18 章讨论人类标签。

这篇关于【Spark NLP】第 17 章:支持多种语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220462

相关文章

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

Nacos Config 配置中心支持配置共享

文章目录 一、什么是配置中心二、Nacos Config2.1 Nacos Config 工作原理 (★)2.2 Nacos Config 的使用2.3 动态刷新2.4 配置共享2.4.1 同一个微服务的不同环境之间共享配置2.4.2 不同微服务中间共享配置 一、什么是配置中心 微服务架构下关于配置文件的存在以下问题: 配置文件相对分散。在一个微服务架构下,配置文件会随