点击左上方蓝字关注我们

【飞桨开发者说】Xutan Peng,英国谢菲尔德大学Lincedo实验室博士在读,研究主要围绕自然语言处理和表示学习。

项目背景

据联合国科教文组织统计,全球现存七千余种有记录语言中,超过四百种濒临灭绝,超过两千种处于接近濒危的状态。濒危语言的定义:当母语人停止说某种语言,或者是在各个领域说得越来越少,并且不将其传递给后代的时候,这种语言就被称为濒危语言。因此,对原生态的语言面貌和文化信息的保存,对珍贵濒危语言文化遗产的留存,都是当今时代刻不容缓的目标与追求。“语言是文明的DNA”,与语言一起灭绝的,是无法挽回的缤纷绚烂的历史文化传承。

图1

大家可以从图1看出,我国的濒危语言众多,但在国家大力保护下,许多仍处于留存状态(绿色部分),但也有大量语言濒临灭绝(红色部分),亟待拯救。

当前,借助田野调查,建立对应的口语语料库是我国保护这些濒危语言的主要手段。此类口语语料库保存的内容主要包括原始声音文件和国际音标标注等。然而,仅仅依靠这些单语数据,研究者无法获知其背后所传达的语义,难以高效地开展相关学习与研究,更罔论留存这些少数民族濒危语言与背后地方文化的生命力。为了解决这个问题,我们借助飞桨的视觉和文本能力,基于无监督跨语言词向量算法,成功地实现了对濒危语言词典的自动化生成,极大减轻了语保工作者的负担,助力我国的语言保护事业。

图2: 在一线辛苦采集原始语料的语保工作者

技术方案

我们的算法共分以下四步:

1)采集少数民族濒危语言语料;

2)基于飞桨的高性能OCR工具与文本清洗能力,构建主题一致的现代汉语数据集;

3)低资源条件下训练单语词向量;

4)借助飞桨实现跨语言词向量对齐算法,全自动地生成大规模“汉语-少数民族语言”词典。

1.爬取少数民族濒危语言数据

本项目濒危语言口语语料主要来自英国伦敦大学亚非学院汉斯·罗森濒危语言典藏[1]。此开源语料库是当今世界规模最大、范围最广、语种最多、内容最丰富的濒危语言博物馆。同时,项目内容全部来自于相关研究者的实地田野调查与采集。

图3:语音转写软件界面

由于多数濒危语言没有存留的文字系统,语料库中的“文本”主要是通过国际音标系统(IPA)转写所得。本项目欲建立这些具体单词语音与对应普通话语义之间的联系。

从图3可以看出,语音材料沿下方时间轴,被专家判读为一系列基本音节构成的序列。

遗憾的是,这个数据集本身并不是封装好的(即提供可以直接下载使用的压缩包)。我们实现了一个简单的爬虫程序,供感兴趣的同学亲手获得语料。接下来,我们讲一下具体操作。首先,我们解析“国家”这一层级的HTML页面,获取全部按照标准格式标注好的metadata文件(均为.xml)列表,并按照语种分门别类地进行保存。考虑到后续训练的实际资源需求,这里我们设置限定,即只训练那些具有超过一百份独立metadata的语言。

import requests
from bs4 import BeautifulSoup
import codecs
from tqdm import tqdm
import json# 分语言下载全部语料文件(xml)对应的href列表base_url = "http://www.language-archives.org"entrance_url = "http://www.language-archives.org/country/CN" # all langsresponse = requests.get(entrance_url)
soup = BeautifulSoup(response.text, 'lxml')
language_url_list = []
language_url_dict = {}
for li in soup.find_all('li'):language_url_list.append(base_url + li.find('a').get('href')) for language_url in tqdm(language_url_list):language_response = requests.get(language_url) language_soup = BeautifulSoup(language_response.text, 'lxml')language_data = language_soup.select('body > ol:nth-child(9) > li > a')language_href_list = []for item in language_data:language_href_list.append(base_url + item.get('href'))if len(language_href_list) > 100:language_name = language_url.split('/')[-1]language_url_dict[language_name] = {'language_url': language_url,'herf_url': language_href_list}
with codecs.open("language_url_dict.json", "w", 'utf-8') as wf:
json.dump(language_url_dict, wf, indent=4)

下一步,我们基于这些导出的文件索引地址,批量进行下载和保存:

import os
import re
import urllib# 下载对应的xml文件with codecs.open("language_url_dict.json",'r','utf-8') as jf:language_url_dict = json.load(jf)for language, data in language_url_dict.items():file_dir = 'result/' + language + '/'if not os.path.exists(file_dir):os.makedirs(file_dir)href_list = data['herf_url']for href in tqdm(href_list):response = requests.get(href)soup = BeautifulSoup(response.text, 'lxml')xml_list = soup.findAll(name='a',text=re.compile(r".*xml"))for xml_f in xml_list:urllib.request.urlretrieve(xml_f.get('href'), file_dir + xml_f.get('href').split('/')[-1])

最终,我们选取了独龙、尔苏、嘉绒、撒拉这四种数据较为丰富的语言作为实验对象。每种语言含有的句子数量均超过三千条,足够驱动本算法的后续步骤。

2.构建现代汉语同领域语料库

通过考察上步得到的少数民族语言口语语料,我们发现其内容主要围绕神话传说、民间故事、民歌和日常会话。根据相关学者的研究[2],我们采用自己基于飞桨实现的对齐算法(后续会说到)时,当且仅当双语各自的语料领域相对近似,抽取词典的质量才能得到保证。当前学界和业界并没有相关领域现代汉语的大规模语料资源。为此,本项目构建了首个民间故事汉语数据集,并计划与版权所有方完成全部细节沟通后进行开源。

图4

我们的现代汉语数据集主要来自著名的民间故事杂志《故事会》(ಡωಡ)。版权方为我们提供了大量的《故事会》杂志扫描样本,杂志时间跨度为8年(从2009年至2016年),每年24期。

具体来说,我们基于这些扫描样本,利用飞桨PaddleOCR组件将其转化成文本。PaddleOCR“开箱即用”,且识别精度高、推理速度快,极大地节省了我们构建原始文本数据集的开销。该模型将MobileNetV3[3]作为骨干网络(其模型架构如图5),并分别利用CRNN和DB进行识别和检测:

图5

在百度的AI Studio平台上,我们可以非常方便地调用PaddleOCR接口。想要获得更多相关信息,请点击链接:

https://www.paddlepaddle.org.cn/support/news?action=detail&id=2123

实验过程中,我们发现PaddleOCR输出的文本精度已经非常高了。我们进一步借助PaddleX集成的EasyData模块清洗了Emoji、URL等杂质,经过简单的句子分割和过滤后,即可得到高质量的语料:

图6

训练词向量前,我们还利用“结巴”工具包进行分词预处理。此时,大家应选择“paddle模式”,从而获得最佳精度:

import jiebajieba.enable_paddle()# 启动paddle模式
strs=["文档1内容", "文档2内容", "...", "文档n内容"]
for str in strs:
seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式

最终,我们构建了一个含有950万字的大规模民间文本数据集。同时,我们注意到它的风格具有很强的口语化特点,因此,我们认为它十分适合用于和第一步中转写得到的少数民族语言语料进行对齐。

3.低资源词向量训练

当前,流行的静态分布式词向量算法包括Word2vec、GloVe、FastText等。然而,这些算法需要依靠大规模的单语语料才能达到收敛,并不适合本任务。因为基于神经语言模型的词向量需要百万句子规模,然而,经过之前两个步骤的努力,单种少数民族濒危语言语料所包含的句子数量普遍不足五千条,《故事会》语料也小于二十万条句子,远远少于所需句子数量。所以,我们采用了更传统的方式——统计驱动的基于点互信息(PMI)矩阵与SVD分解的算法[4],共训练了五十维的词向量。在相关单语词向量analogy测试集[5]上,达到了良好的效果。

图7:analogy性能与Word2vec实验对比图

考虑相关学者[2]指出,高质量的双语词典抽取依赖单语analogy的高得分。因此,相对上文提到的更流行的神经网络词向量,这一训练在低资源场景的统计驱动的词向量,可为下游的双语对齐任务提供更强有力的支持。

使用这段代码,就可以启动“PMI+SVD”词向量的训练:

from svd2vec import svd2vec  # 从https://github.com/valentinp72/svd2vec下载安装documents = [open("text8", "r").read().split(" ")]
svd = svd2vec(documents, window=2, min_count=100)
svd.save("svd.bin")
svd = svd2vec.load("svd.bin")# 转换成text格式from gensim.models.keyedvectors import Word2VecKeyedVectors
svd.save_word2vec_format("svd_word2vec_format.txt")

借助飞桨的可视化模块,让我们通过PCA观察一下得到的汉语词向量:

图8

从图8我们可以发现,词向量表现出了一定的拓扑特点。下一步,我们基于训练模型,自主发现和利用这些分布特征,对两种语言独立训练出的词向量进行旋转和对齐。

4.双语词典自动化抽取

在这一步,我们尝试了两种典型设定:弱监督(提供极少量的双语词对作为种子)和无监督(仅有相互孤立的双语语料)。我们的核心工作流参考了Mikel Artetxe等学者的相关研究[6],即在初始种子词典(来自弱监督信号,或者在无监督状态下采用启发式算法进行对齐)的基础上,训练一个正交变换,将一种语言的单语词向量映射到另一种语言,从而最小化已有词典中词对间的平均距离(相关学者[2]为这个流程提供了理论基石)。通过利用自学习范式,即不断地迭代上述过程并扩大已锁定词典,可以达到一个高准确度的最终收敛点。如需更生动的介绍,欢迎观看我们的B站视频[7]。

在每个迭代周期中,我们首先设置一个退火温度,控制当前词典保留的随机更新概率:

if it - last_improvement > args.stochastic_interval:if keep_prob >= 1.0:end = Truekeep_prob = min(1.0, args.stochastic_multiplier*keep_prob)last_improvement = it

接下来,我们利用P. H Schönemann [8]提出的正交普式对齐的封闭解,计算当前双语词向量最优的映射矩阵:

u, s, vt = np.linalg.svd(z[trg_indices].T.dot(x[src_indices]))
w = vt.T.dot(u.T)
x.dot(w, out=xw)
zw[:] = z

在当前已经对齐的双语词向量上,我们利用CSLS算法[9]进行词典抽取(最近邻):

knn_sim_bwd = xp.zeros(z.shape[0])
for i in range(0, z.shape[0], BATCH_SIZE):j = min(i + BATCH_SIZE, z.shape[0])knn_sim_bwd[i:j] = topk_mean(z[i:j].dot(x.T), k=args.neighborhood, inplace=True)
for i in range(0, len(src), BATCH_SIZE):j = min(i + BATCH_SIZE, len(src))similarities = 2*x[src[i:j]].dot(z.T) - knn_sim_bwd  # Equivalent to the real CSLS scores for NNnn = similarities.argmax(axis=1).tolist()for k in range(j-i):translation[src[i+k]] = nn[k]

当不断迭代直至满足停止条件(例如达到预设轮数,或词典不再更新)后,我们采用了Mikel Artetxe等学者[6]提出的后处理方式,对学习到的双语词向量空间进行最后的提升:

# STEP 1: Whitening
def whitening_transformation(m):u, s, vt = np.linalg.svd(m, full_matrices=False)return vt.T.dot(np.diag(1/s)).dot(vt)wx1 = whitening_transformation(xw[src_indices])
wz1 = whitening_transformation(zw[trg_indices])
xw = xw.dot(wx1)
w = zw.dot(wz1)# STEP 2: Orthogonal mapping
x2, s, wz2_t = np.linalg.svd(xw[src_indices].T.dot(zw[trg_indices]))
wz2 = wz2_t.T
xw = xw.dot(wx2)
zw = zw.dot(wz2)# STEP 3: Re-weighting
xw *= s**args.src_reweight
zw *= s**args.trg_reweight# STEP 4: De-whitening
xw = xw.dot(wx2.T.dot(np.linalg.inv(wx1)).dot(wx2))
xw = xw.dot(wz2.T.dot(np.linalg.inv(wz1)).dot(wz2))
zw = zw.dot(wx2.T.dot(np.linalg.inv(wx1)).dot(wx2))
zw = zw.dot(wz2.T.dot(np.linalg.inv(wz1)).dot(wz2))# STEP 5: Dimensionality reduction
xw = xw[:, :args.dim_reduction]
zw = zw[:, :args.dim_reduction]

来看看我们得到的词典吧!

图9

目前,我们导出了独龙、尔苏、嘉绒、撒拉这四种语言和汉语的双向词典,并在中国社科院民族学和人类学研究所的志愿者们协助下,开展了内部评测。整体来说,考虑到全过程的便捷性,此系统价值较高。同时,我们也收到了一些关于含有少量误差的反馈。本项目之后的工作重点,将是逐步提升准确度,并开发可直接交互的软件,从而方便更多用户体验。欢迎大家持续关注!

社会意义

本系统是一个公益性的“科技向善”项目,其作为业界首个“少数民族濒危语言-汉语”双语词典的全自动构建工具,具有广泛长远的社会效益:

  • 有助于少数民族文化历史传承: 少数民族的历史文化是中华民族集体记忆的重要组成部分。在本研究中,我们深切地感到了这些濒危语言的背后,是绚丽多姿的历史文化沉淀。保护这些语言,就是保护少数民族地区的历史传承,就是保护汉语大家庭的多样性。

  • 有助于国家均衡发展和整体振兴:与经济发达地区相比,少数民族地区的经济发展相对落后,其中一个重要原因是语言障碍阻碍了与发达地区的交流。高质量词典的建立是打破语言壁垒的第一步,它将极大地推动民族间的互通互荣,进而助力“两个一百年”攻坚战的全面胜利。

  • 有助于提升国家影响力:当前,中国正加紧部署一系列新文化交流战略。在这其中,新丝绸之路计划十分重要,该计划途经众多小语种国家,打破语言壁垒是保证其顺利实施的重要环节。本项目所提出的技术可快速移植扩展到相关语言,促进国际间的交流合作。

参考文献

[1]http://www.language-archives.org

[2]Peng, X., Lin, C., & Stevenson, M. (2020). Revisiting the linearity in cross-lingual embedding mappings: from a perspective of word analogies. arXiv:2004.01079.

[3]https://www.paddlepaddle.org.cn/support/news?action=detail&id=2123

[4]Levy, O., Goldberg, Y., & Dagan, I. (2015). Improving distributional similarity with lessons learned from word embeddings. Transactions of the Association for Computational Linguistics.

[5]https://aclweb.org/aclwiki/Google_analogy_test_set_(State_of_the_art)

[6]Artetxe, M., Labaka, G., & Agirre, E. (2018). A robust self-learning method for fully unsupervised cross-lingual mappings of word embeddings. In Annual Meeting of the Association for Computational Linguistics.

[7]https://www.bilibili.com/video/BV13f4y1d7Ju/

[8]Schönemann, P. (1966). A generalized solution of the orthogonal procrustes problem. Psychometrika.

[9]Lample, G., Conneau, A., Ranzato, M. A., Denoyer, L., & Jégou, H. (2018). Word translation without parallel data. In International Conference on Learning Representations.

如在使用过程中有问题,可加入官方QQ群进行交流:778260830。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

·飞桨官网地址·

https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·

GitHub: 

https://github.com/PaddlePaddle/Paddle 

Gitee: 

https://gitee.com/paddlepaddle/Paddle

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。

END

用飞桨,为少数民族濒危语言生成一本词典相关推荐

  1. 飞桨模型保存_重磅发布开源框架、生物计算平台螺旋桨,百度飞桨交了年终成绩单...

    机器之心报道 作者:蛋酱.张倩 在 12 月 20 日举行的「WAVE SUMMIT+ 2020 深度学习开发者峰会」上,飞桨平台交出了一份非常亮眼的年终成绩单. 2020 年,是不平凡的一年:这一年 ...

  2. 百度飞桨弯道超车了吗?!

    事情是这样的... 前不久,小夕注意到了一份来自权威评测机构IDC发布的<2020年下半年深度学习平台市场份额报告>: ▲IDC:2020年中国深度学习平台市场综合份额top 5 立刻惊了 ...

  3. 从我开发过的Tensorflow、飞桨、无量框架看深度学习这几年

    文 | Peter潘欣@知乎 和深度学习框架打交道已有多年时间.从Google的TensorFlow, 到百度的PaddlePaddle,再到现在腾讯的无量.很庆幸在AI技术爆发的这些年横跨中美几家公 ...

  4. 飞桨EasyDL助力资讯网站实现信息自动分类

    编者按 EasyDL NLP内置文心·NLP大模型,业务冷启动阶段仅需少量数据即可获得产业级AI模型,助力业务快速落地.文心·NLP大模型面向语言理解.语言生成等场景具备超强语言理解能力以及对话生成. ...

  5. WAVE SUMMIT+峰会,飞桨八大亮点发布,全面助力产业智能化

    点击左上方蓝字关注我们 12月20日,由深度学习技术及应用国家工程实验室与百度联合主办的WAVE SUMMIT+2020深度学习开发者峰会在北京举办.百度飞桨作为国内开源最早.技术领先.功能完备的产业 ...

  6. 飞桨分布式训练又推新品,4D混合并行可训千亿级AI模型

    点击左上方蓝字关注我们 最近,飞桨提出了4D混合并行策略,以训练千亿级稠密参数模型. 近几年,深度学习领域的开发者们对模型效果的追求愈演愈烈,各大榜单纪录不断刷新,而这个现象的背后都有着 " ...

  7. OCR二次开发宝典:飞桨联合多家企业和高校发布《OCR产业范例20讲》

    文字识别(Optical Character Recognition,OCR)作为AI领域发展较成熟的一种技术方向,已经在各种产业场景得到落地应用.除了文档电子化.卡证识别等典型的应用场景,还存在大量 ...

  8. 国产首款——飞桨PaddlePaddle深度学习框架介绍

    现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...

  9. 寻求合作 | 飞桨深度学习企业应用合作伙伴计划

    人工智能技术和应用进入高速发展期,到2030年,AI核心产业规模将超过1万亿元.未来没有任何一家企业可以与AI无关.百度大脑深度学习合作伙伴计划致力于建设深度学习生态,为合作伙伴提供技术.人才培养.资 ...

  10. 基于飞桨的“小书虫”儿童电子阅读器

    项目背景 教育学和心理学的研究表明,幼儿的阅读能力对认知能力的发展影响最大,尤其是0-6岁阶段的早期阅读能力,是影响幼儿未来学习能力和水平的关键. 可是如今,快餐式媒体信息的爆发,导致儿童的精神世界日 ...

最新文章

  1. Wrong permissions on configuration file, should not be world writable!
  2. nodejs 全局变量和全局对象
  3. php 正则报错,PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析...
  4. python函数知识点总结_python函数map()和partial()的知识点总结
  5. 边缘计算高考题!全答对就可以去华为上班!
  6. Redis的基础事务
  7. Visual Studio 2017新建及运行C++程序步骤
  8. Hibernate VS iBATIS
  9. NASA 传奇数学家去世,她曾笔算了登月轨道
  10. HTTP Error: 413 Request Entity Too Large的解决
  11. 官网MySQL下载速度慢的解决方法(5分钟内搞定)
  12. 电子商务平台搭建方案
  13. w10运行游戏计算机中丢失xinput1-3.dll,WIN10启动游戏由于找不到xinput13dll无法运行如何修复...
  14. 5G注册流程分级详解Step4-8
  15. 关于数字转换成人民币大写的问题
  16. c语言初阶(2-函数-上篇)
  17. 怎么样做能让站点文章收录更快一些呢
  18. Android WebView 视频播放解决
  19. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库
  20. 高级工程师职称申报到底需要参加答辩不?

热门文章

  1. office起动缓慢_如何解决Microsoft Outlook启动缓慢的问题
  2. miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
  3. Eclipse官方下载步骤
  4. Python:整数的阶乘
  5. 西方文学名著鉴赏——英文诗歌翻译赏析
  6. 关于邮箱显示已经回复,但是已发送邮件里面没有
  7. 高一计算机课期中考试总结反思,高一期中考试总结反思
  8. X射线检测系统技术行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. 三星s5开发者选项不能连电脑问题
  10. python一个字符占几个字节_字符串在Python内部是如何省内存的