百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

NLP 中文拼写检测纠正论文SOTA FASPell github 源码介绍

wptr33 2025-01-19 00:40 24 浏览

NLP 开源项目

[1] nlp-hanzi-similar 汉字相似度: https://github.com/houbb/nlp-hanzi-similar
[2] word-checker 中英文拼写检测:
https://github.com/houbb/word-checker
[3] pinyin 汉字转拼音:
https://github.com/houbb/pinyin
[4] opencc4j 繁简体转换:
https://github.com/houbb/opencc4j
[5] sensitive-word 敏感词:
https://github.com/houbb/sensitive-word

前言

大家好,我是老马。

下面学习整理一些其他优秀小伙伴的设计和开源实现。

FASPell

https://github.com/iqiyi/FASPell

FASPell

该仓库(根据GNU通用公共许可证v3.0许可) 包含构建当前最佳(到2019年初)中文拼写检查器所需的所有数据和代码,可以以此复现我们的同名论文中的全部实验:

FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm LINK[7]

此论文发表于 the Proceedings of the 2019 EMNLP Workshop W-NUT: The 5th Workshop on Noisy User-generated Text。

使用本代码与数据时,请按如下信息引用我们的论文:

    @inproceedings{hong2019faspell,
        title = "{FASP}ell: A Fast, Adaptable, Simple, Powerful {C}hinese Spell Checker Based On {DAE}-Decoder Paradigm",
        author = "Hong, Yuzhong  and
          Yu, Xianguo  and
          He, Neng  and
          Liu, Nan  and
          Liu, Junhui",
        booktitle = "Proceedings of the 5th Workshop on Noisy User-generated Text (W-NUT 2019)",
        month = nov,
        year = "2019",
        address = "Hong Kong, China",
        publisher = "Association for Computational Linguistics",
        url = "https://www.aclweb.org/anthology/D19-5522",
        pages = "160--169",
    }

概述

中文拼写检查(CSC)的任务通常仅考虑对中文文本中的替换错误进行检测和纠正。

其他类型的错误(例如删除/插入错误)相对较少。

FASPell是中文拼写检查器,可让您轻松完成对任何一种中文文本(简体中文文本;

繁体中文文本; 人类论文; OCR结果等)的拼写检查,且拥有最先进的性能。

性能

下述表格描述了FASPell在SIGHAN15测试集上的性能。

句子级性能为:


精确率

召回率

检错

67.6%

60.0%

纠错

66.6%

59.1%

字符级性能为:


精确率

召回率

检错

76.2%

67.1%

纠错

73.5%

64.8%

这意味着10个错误检测/纠正中大约7个是正确的,并且可以成功检测/纠正10个错误中的6个。

使用方法

以下是能够指导您构建中文拼写检查器的步骤指南。

依赖

python == 3.6
tensorflow >= 1.7
matplotlib
tqdm
java (仅在使用树编辑距离时需要)
apted.jar (同上,仅在使用树编辑距离时需要)

数据准备

在此步骤中,您将在此处[8]下载所有数据。

数据包括拼写检查数据(用于训练和测试)以及用于计算字符相似度的字符特征。

由于FASPell中使用的大多数数据来自其他提供商,所以请注意下载的数据应转换为我们所需的格式。

在仓库中,我们提供了一些示例数据来占位。下载好全部数据后请用相同的文件名覆盖它们。

完成此步骤后,如果您有兴趣,则可以使用以下脚本来计算字符相似度:

$ python char_sim.py 午 牛 年 千

请注意,FASPell仅采用字符串编辑距离进行计算 相似。 如果您对使用树编辑距离计算相似度感兴趣 ,您需要下载(从 这里[9])并编译一个 树编辑距离可执行文件“ apted.jar”到主目录,然后运行:

$ python char_sim.py 午 牛 年 千 -t

训练

我们强烈建议您在实施此步骤之前阅读我们的论文。

共有三个训练步骤(按顺序)。 点击链接

获得他们的详细信息:

1.预训练掩码语言模型:请参阅此处[10]

2.微调训练掩码语言模型:请参阅此处[11]

3.训练CSD过滤器:请参见此处[12]

运行拼写检查器

检查您的目录结构是否如下:

    FASPell/
      - bert_modified/
          - create_data.py
          - create_tf_record.py
          - modeling.py
          - tokenization.py
      - data/
          - char_meta.txt
      - model/
          - fine-tuned/
              - model.ckpt-10000.data-00000-of-00001
              - model.ckpt-10000.index
              - model.ckpt-10000.meta
          - pre-trained/
              - bert_config.json
              - bert_model.ckpt.data-00000-of-00001
              - bert_model.ckpt.index
              - bert_model.ckpt.meta
              - vocab.txt
      - plots/
          ...
      - char_sim.py
      - faspell.py
      - faspell_configs.json
      - masked_lm.py
      - plot.py

现在,您应该可以使用以下命令对中文句子进行拼写检查:

    $ python faspell.py 扫吗关注么众号 受奇艺全网首播

您还可以检查文件中的句子(每行一个句子):

    $ python faspell.py -m f -f /path/to/your/file

如要在测试集上测试拼写检查器,请将faspell_configs.json中的"testing_set"设置为测试集的路径并运行:

    $ python faspell.py -m e

您可以将faspell_configs.json中的"round"设置为不同的值,并运行上述命令以找到最佳的回合数。

数据

中文拼写检查数据

1.人类生成的数据:

?SIGHAN-2013 shared task on CSC: LINK[13]?SIGHAN-2014 shared task on CSC: LINK[14]?SIGHAN-2015 shared task on CSC: LINK[15]

2.机器生成的数据:

?我们论文中使用的OCR结果:

?Tst_ocr: LINK[16]?Trn_ocr: LINK[17]

要使用我们的代码,拼写检查数据的格式应按照以下例子:

    错误字数    错误句子    正确句子
    0    你好!我是張愛文。    你好!我是張愛文。
    1    下個星期,我跟我朋唷打算去法國玩兒。    下個星期,我跟我朋友打算去法國玩兒。
    0    我聽說,你找到新工作,我很高興。    我聽說,你找到新工作,我很高興。
    1    對不氣,最近我很忙,所以我不會去妳的。    對不起,最近我很忙,所以我不會去妳的。
    1    真麻煩你了。希望你們好好的跳無。    真麻煩你了。希望你們好好的跳舞。
    3    我以前想要高訴你,可是我忘了。我真戶禿。    我以前想要告訴你,可是我忘了。我真糊塗。

中文字符特征

我们使用来自两个开放数据库提供的特征。 使用前请检查其许可证。


数据库名

数据链接

使用的文件

字形特征※

漢字データベースプロジェクト(汉字数据库项目)[18]

LINK[19]

ids.txt

字音特征

Unihan Database[20]

LINK[21]

Unihan_Readings.txt

※ 请注意,原始 ids.txt 本身不提供笔划级别的IDS(出于压缩目的)。 但是,您可以使用树递归(从具有笔画级IDS的简单字符的IDS开始)来为所有字符自己生成笔画级IDS。

可以与我们的代码一起使用的特征文件(char_meta.txt)应该具有格式如下:

    unicode编码    字符    CJKV各语言发音    笔划级别的IDS
    U+4EBA    人    ren2;jan4;IN;JIN,NIN;nhan    ?丿?
    U+571F    土    du4,tu3,cha3,tu2;tou2;TWU,THO;DO,TO;th?    ??一丨一
    U+7531    由    you2,yao1;jau4;YU;YUU,YUI,YU;do    ??丨??一丨一
    U+9A6C    马    ma3;maa5;null;null;null    ???一
    U+99AC    馬    ma3;maa5;MA;MA,BA,ME;m?    ????一?一一丨?灬

其中:

?CJKV各语言发音的字符串遵循格式:MC;CC;K;JO;V?当一个语言中的字符是多音字时,可能的发音用,分隔;?当一个字符不存在某个语言的发音时,用null来做占位符。

小结

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

相关推荐

威信Chronosonic XVX全新旗舰全球首发 设计特点彻底公开

第一眼看到WilsonAudio新推出的ChronosonicXVX音箱,相信大家都会直觉认为它是两年前超级旗舰WAMMMasterChronosonic的缩小版,不过这个推测并不完全正确。C...

C#高精度Timer和Delay以及时间测量

在PCHMI7.0后在工具箱里会多一个MsTimer,以及Delay和Microsecond两个类。...

python教程从基础到精通,第9课—日期与时间

Hello,小伙伴们,祝大家五.一玩得快乐!刚学习完了七大数据类型,今天咱们来学习日期与时间的表示方法。Python标准库中提供了时间和日期的支持:calendar:日历相关;time、datetim...

软件测试|教你轻松玩转Python日期时间

Python基础之日期时间处理...

Go语言中互斥锁与读写锁,你知多少?

简述Golang中的锁机制主要包含互斥锁和读写锁互斥锁互斥锁是传统并发程序对共享资源进行控制访问的主要手段。在Go中主要使用sync.Mutex的结构体表示。一个简单的示例:funcmutex()...

变形金刚动画大电影——经典台词赏析

YOURDAYSARENUMBEREDNOW,DECEPTI-CREEPS你们活不了多久了,霸天虎小子。-{铁皮说的话,体现了铁皮的嫉恶如仇,可是后来铁皮在飞船上遇袭身亡,可谓是出师未捷身先...

Python时间日期模块使用教程(python3日期)

1.时间日期处理概述在日常编程中,时间日期处理是非常常见的需求,比如:记录日志时间...

亚马逊介绍AWS“无服务器”云服务改进:数据库可线上扩充容量等

IT之家11月29日消息,在今天于美国拉斯维加斯展开的亚马逊“AWSre:Invent2023”活动中,亚马逊计算部门资深副总裁PeterDeSantis,介绍了旗下三款云端服务,IT...

2.日期格式 datetime(日期时间显示格式)

fromdatetimeimportdatetime1.获取当前日期和时间now=datetime.now()#2025-05-3110:56:01.4687822.格式化日期...

【科普】时间单位大盘点(时间单位都有哪些?)

时间单位,是7种基本单位之一,长度、时间、质量、物质的量、光照度、电流和(热力学)温度是七种基本单位。本词条中时间单位以时间从大到小列。今天我们来盘点下时间的单位换算...

基于PHP的Laravel框架,盘点Github高星Web管理后台,效率为王!

在Web开发工作中,选择一个高效、稳定的后台管理系统是提高开发效率的关键。虽然PHP在近些年中的热度有所减退,但其上手简单、开源、灵活且被广泛应用的特点,仍然使其在编程语言排行榜中保持前十的位置。这表...

如何使用PHP编写一个简单的留言板?

留言板是一个常见的Web应用程序,允许用户在网站上发布和查看留言。在本文中,我们将使用PHP编写一个简单的留言板,介绍构建过程中的关键步骤和技巧。一、准备工作在开始编写留言板之前,我们需要准备好以下工...

产品经理提需求时要考虑的 15 个隐性需求

虽然世界充满未知的变化,但是有一些大的方向还是可以把握的,本文跟大家谈谈产品经理提需求时要考虑的15个隐性需求,enjoy~俗话说,计划赶不上变化快,无论需求文档做得如何细致,考虑得如何周全,总会...

关于 PHP 启动 MongoDb 找不到指定模块问题

前言:最近有一个小demo,需要通过PHP将用户行为记录储存到MongoDB,再用Spark做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用MongoDB却弄出了几个问...

PHP程序员老鸟面试经历(php程序员怎么样)

在任何时代找任何工作都有面试这么一说的。特别是高端技术类的工种对技术理论和技术实操能力要求很严格。大部分公司招收技术员工的要求也越来愈高。至于PHP程序员也是如此,我估计大多数PHP老鸟已经不在意所...