拼音型简单错误语料获取与处理

在自然语言处理领域中,语料是非常关键的一个部分。然而,中文的自然语言处理领域在大的通用型语料上虽然不少,但在特定方向上的语料仍然匮乏。在要进行拼音型文本纠错任务过程中,我发现这方面的语料着实少,因此在语料的获取和处理上花费较多时间,以下是我面对语料匮乏情况下的探索和总结。

语料的获取

语料获取分为两个部分,一是搜索:查询并获取已有的特定方向的语料。二是制造:自行制造出需要的语料。

语料搜索

首先我们自然要考虑能否找到已经标记好的公开语料。

没有查询到相应结果之后,开始寻找这方面的公开比赛,最好是去年或前年这类年份较近且比赛已经结束的,一来更可能可以获取完整语料,二来可以参考比赛结束后放出的优胜者的论文,而年份越近则参赛者更可能用上更先进的方法。

此外还可以参考这方面的论文,论文中会给出评测的方法和样例文本,根据文中出现的语料来源关键词再进行搜索。由此我搜索到几份台湾的拼音型质量较高的语料,分别是13-15年的Chinese Spelling Check Task的语料:

汇总链接

SIGHAN 2013 Bake-off: Chinese Spelling Check Task

CLP 2014 Bake-off: Chinese Spelling Check Task

SIGHAN 2015 Bake-off: Chinese Spelling Check Task

以下是语料的一个样例:

image

可以看出,这份语料的错误类型是拼音相近的词语,它不仅标出了错误词语,还给出了正确答案,由此还可以将错误检测模型扩展为纠正模型。

填写资料下载后可以看到,压缩包中除了训练、测试语料外还包含相似拼音字表和相近字形字表。

虽然语料质量较高,但还是有些缺点的:

1. 首先自然是语料的规模不足,将三份语料汇总之后也不过得到3M左右的语料
 2. 其次是文本问题,可以看出语料使用的是繁体字,在建立面向简体字的模型的过程中,我们需要将其转换为简体字
 3. 第三是文化问题,文字虽然可以转换为简体字,但文本的组织结构、表述以及用词还是附带较浓的台湾气息,如“幼儿园”在文本中称为“幼稚园”,“什么”在文本中为“什幺”

在浏览完各类论文和语料库之后,就可以开始发散思维了。原本打算爬取小学生病句作为语料,然而点开几份病句题之后却发现,小学生的病句里就已经涉及到知识推理、指代不明等高难度问题了,由此不得让人感慨,我们还有很长的路要走。

可以直接用于训练的语料并不多,接下来该考虑语料制造了

语料制造

语料制造分为人工制作新语料和在现有语料上进行改造。

人工制作

人工制作新语料可以是完全人为构造新句子,当然还有方便得多的方法就是从已有的句子上挑选词语,选择相近音的字词进行替换。除了项目人员自行替换之外,也可外包出去花费金钱获取有一定数目和质量的人工语料。

此外,也可以从外国人学习中文的作文着手,已有的语法错误、词语错误语料有相当一部分是来自外国人的作文加上人工标记形成的,如北京语言大学的HSK动态作文语料库,但笔者并未发现有能够获取完整语料的地方。仅有官方提供的各种小规模查询方式。

改造语料

在网上各类公开语料库上得到大量中文通用语料并进行预处理之后,最简单的方法就是对于每个句子以一定的概率随机替换掉某个字或词(取决于模型是基于字还是基于词的,但一般来说基于字效果更好、字典更小、速度更快),替换的字或词的数目可以自行调整, 不同的概率对应不同的替换数目。优点是足够自动化、方便快速、语料数目大,缺点则是语料和将要纠错的句子的贴合度并不高。

在前面的方法之上为了更贴近待纠错句子,可以构造相近音的字表或词表,替换时查表随机替换。

以上就是语料获取方面的总结。在获取到Chinese Spelling Check Task的语料之后,还需要对其进行处理。

CSC语料处理

繁体转简体工具介绍及安装

为了建立面向简体中文的纠错模型,我们首先得将繁体语料转换成简体。在搜索python转换的工具包时,网上博客一水的推荐https://github.com/skydark/nstools/tree/master/zhtools的转换工具,然而在实际使用过后发现效果并不是很好,在剔除使用zhtools的文章之后,发现一个在github有3k stars的工具包opencc:https://github.com/BYVoid/OpenCC

使用python的可以 pip install opencc,但会报错并且需要各种设置。以下介绍一下Ubuntu下编译安装的方法,安装完成后直接可以在命令行中使用opencc而无需特定语言。

先找个空白文件夹安装需要的其它工具:
git clone https://github.com/doxygen/doxygen.git
cd doxygen
mkdir build
cd build
sudo apt-get install flex
sudo apt-get install bison
cmake -G "Unix Makefiles" ..
make
sudo make install

而后就可以开始安装opencc了:
git clone git@github.com:BYVoid/OpenCC.git
cd OpenCC
make
sudo make install

安装完成后就可以在命令行中以:

opencc -c <配置文件名> -i <输入文件名> -o <输出文件名>

的格式进行使用了,-c中支持的配置文件名可以在github上找到,若不加-o选项则会直接将转换后的结果显示出来。

进一步处理

将所有的Input txt 和Truth txt拷到一个文件夹后,使用

cat *Input* > input.txt
cat *Truth* > truth.txt

opencc -c tw2sp.json -i input.txt -o input.txt
opencc -c tw2sp.json -i truth.txt -o truth.txt

就可以得到转换后的文件了。

在进行简繁转换后,笔者发现其内部的英文和数字使用的是全角字符,然后在网上找段转换代码将文本转换成半角,之后再将数字转换成星号

在检测阶段,我们还不需要正确的词语,只需要错误词语的索引即可,在用正则表达式将truth中的汉字剔除后,就得到处理后的文本了:

文本

image

答案(只有索引)

image

答案(带正确字)

image

值得注意的是,测试语料中错误字所使用的索引是从1开始的,并且0代表句子完全正确。

训练语料使用的sgml格式,可以用parser处理也可以直接暴力用正则表达式替换再用python细处理。

其它

上面的处理完成之后,已经可以投入训练了,但是也可以进一步进行处理:

  1. 长句切短句。将长句子按照逗号、句号、感叹号等切分成几个短句子,因为只是要检测简单的词语错误,因此不大需要考虑前后短句子的逻辑关系,将句子切开之后语料数目也同样增加了。
  2. 增加STA、END、UNK标签,自然语言处理领域中常常使用的方法,对于要输入LSTM的句子,开头加上STA标签,结尾加上END标签(也可以开头和结尾使用同一个标签),加上标签可以让模型知道是句子开头和结尾,由此可以加强判断第一个词和最后一个词正确与否的能力。而UNK则是用于标记词表外单词的标签,若单词频率太低则将其替换成UNK,减少词表大小。
  3. 保存字词和索引转换表,提前切分并替换成索引。将字词和索引的转换以固定文件保存下来,而后将语料预先转换成索引序列,可以省去大规模语料在内存中转换成索引的时间。要注意STA、END和UNK标签不要被单独切开了。

以上就是我在语料方面的探索和总结,希望能对读者有些许帮助。

我的个人博客:Zedom1.top

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 寻找方向:找对浪潮再起步 成立初创企业、启动创业项目,不能急于投入具体的项目之中,而要先寻找方向、找对浪潮。在寻找...
    逆逆nini阅读 161评论 0 0
  • 问题不是问题,以什么样的态度面对问题才是问题。这就是我们常说的态度决定一切,有了适合(不是好和坏)的态度才有...
    赵国兴阅读 1,229评论 0 2
  • 人物介绍:神探——警官陈桂彬(刘青云shi) 神探的徒弟——警官何家安(请求陈桂彬帮忙破案) ...
    王文会516阅读 590评论 4 2
  • 牙龈出血肿痛:(有口疮,嘴内热臭熏人,口干口苦,而且口渴,胸闷烦躁,舌苔黄腻。属于脾胃积热) 生石膏30克、知...
    逍遥an阅读 437评论 0 0
  • 落叶化春泥,残月照心间。 功名倘若现,父母定欢颜。
    六二之阿正咿呀阅读 268评论 1 0