还在为没有中文训练数据而头痛你的NLP任务吗?是时候看看这篇文章了~

2024-01-14 10:50

本文主要是介绍还在为没有中文训练数据而头痛你的NLP任务吗?是时候看看这篇文章了~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编者:王小草
日期:2018年7月28日

今天俺要介绍的是一篇来自2018 ACL会议上的论文,属于语言表征上范畴,讲的是如何用无监督的方式进行跨语言的词嵌入表征。

1 背景知识

在介绍论文之前,善良的我先给大家介绍一下论文的背景知识。

1.1 什么是跨语言词嵌入?

英文:cross-lingual embedding

我们很熟知用word2vec(CBOW/Skip-grim)可以训练出有语义相似性的词嵌入向量,广泛应用于许多NLP任务,并取得了很好的效果。下图依次是在英文语料上独立训练的英文词嵌入,和在中文语料上独立训练的英文词嵌入。因为是在各自的语料上独立训练的,因此两个词嵌入矩阵在分布上也是独立不相关的。比如“happy”和“快乐”两个词的语义相同,但是他们的向量的相似性却为-0.052;同理“school”和“学校”的相似性为0.012,来自不同语言但含义相似的词几乎没有任何相关性。
image_1cjgiusun1ci91ritkbg1ntjrdup.png-30kB

而跨语言词嵌入是指将不同语言独立训练的词向量,通过某种方式转换到同一个共享的空间中。在这个共享的空间中,即使是不同语言的词,只要具有相似含义,他们就有高的相似性。如下如,“happy”和“快乐”两个词在新的共享空间中,相似性为0.683;“school”和“学校”的相似性为0.805,体现了高的相似性。
image_1cjgj64tn3rrumk2e81dq16oa20.png-59.3kB

1.2 为什么要进行跨语言词嵌入?

可以总结为3个好处:
image_1cjgj79o91ia8li15hn17pc1n582d.png-52.4kB
其中第二点是至关重要的原因。因为目前英文语言的研究者多,公开的英文数据集也相对来说比其他语言更多。因此,当看到在英文上表现惊艳的模型时,发现因为缺少中文数据集,而无法迁移,总是苦之闷之,仰天捶胸。但是若可以将英文和中文的词都嵌入进相同的空间中,那么在英文上训练出来的模型,就可以直接应用在中文数据上了,简直痛之快之,伏案大笑。

1.3 如何进行跨语言词嵌入?

image_1cjgjhgl91a6a8hlnpm1dktvt62q.png-96.2kB

上图是跨语言词嵌入的几个研究方向。从训练数据上分可分为基于词对齐的,句子对齐的,以及文章对齐;或者是基于并行数据(如翻译对)或基于相似数据(如在pos上相似的词对)。从模型上分可以分为无监督和有监督。有监督的研究颇多,本文不详细介绍。无监督的模型是最近才兴起的,本文将着重介绍2018 ACL的一篇利用无监督算法进行跨语言词嵌入的文章。这篇文章的结果显示,无监督的模型不但取得了很好的成绩,还在大部分跨语言上超过了有监督的模型,这是喜之贺之。那么让我们带着激动的心情一起去看看作者到底是如何操作的呢?

2 数据准备与定义

2.1 准备独立语言的词嵌入矩阵

X X Z分别表示两类语言中独立训练好的词嵌入矩阵,需要自己先训练好的。
Xi X i ∗ Zi Z i ∗ 表示在相应的词嵌入矩阵中的第i个词的词嵌入向量。
我们的目标是要学习 WX W X WZ W Z 这两个转换矩阵(transformation metrices),从而使得 XWX X W X ZWZ Z W Z 在同一个跨语言空间中。如下图:

image_1cjgkb3bg1t26120rpps1q9pbqh3n.png-25.8kB

2.2 定义词典

因为是无监督的,所以是不需要任何训练数据集的。但是我们得定义一个词典,这个词典的行是来自X语言的词(x1,x2,..xi,…);列是来自于Z语言的词(z1,z2,…,zi,…)。 Dij D i j =1,如果Z中的第j个词是X中的第i个词的翻译,否则 Dij D i j =0.

image_1cjgkj3ca1smuuvf8vhud71ud444.png-34.1kB

接下去,是两部重头戏:
1)通过X,Y两个独立的词嵌入矩阵去初始化字典D
2) 通过优化D,得到最优的 WX W X WZ W Z

3 方法详解

3.1 词嵌入标准化

重头戏总是有铺垫颇多,先来看看文中对词嵌入矩阵进行标准化的方法,等下重头戏中要用到。

标准化的过程分为三步:
image_1cjibdglu1jpi1s3nn4gq081v769.png-126.9kB

根据长度归一化词嵌入: Xi X i ∗ / | Xi X i ∗ |,即将每个词嵌入向量的维度上都除以嵌入向量的长度。
均值中心化每个维度:对类一列都减去该列的均值。
中心化之后再进行一次一模一样的长度归一化,确保最后输出的词向量是unit length的。

为啥要这样做呢?主要出于两个原因
1)0均值之后,向量之间的点乘就是这两个向量的余弦相似度,也等价于是欧氏距离,因此可以直接用来描述向量之间的相似性。(至于为什么这样标准化了之后就各种等价了呢,作者在他以前写的一篇文章中做了解释:【Learning principled bilingual mappings of word em- beddings while preserving monolingual invariance.】)
2)长度归一化之后,当进行奇异值分解的时候, XTDZ X T D Z = USVT U S V T , S就相当于是词向量的维度与维度之间的相似性矩阵。(后文求最优化的过程会用到奇异值分解)

3.2 完全无监督的初始化

3.2.1 初始化字典的困境

困境:
现在我们要用X和Y两个词嵌入矩阵去初始化词典D了。但是!因为 X X Z是两类语言独立训练出来的词嵌入矩阵,因此无论是他们的第i个词 Xi X i ∗

这篇关于还在为没有中文训练数据而头痛你的NLP任务吗?是时候看看这篇文章了~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热