NLP实践!文本语法纠错模型实战,搭建你的贴身语法修改小助手 ⛵

💡 作者:韩信子@ShowMeAI
📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42
📘 自然语言处理实战系列:https://www.showmeai.tech/tutorials/45
📘 本文地址:https://showmeai.tech/article-detail/399
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

自然语言处理(NLP)技术可以完成文本数据上的分析挖掘,并应用到各种业务当中。例如:

  • 机器翻译(Machine Translation),接收一种语言的输入文本并返回目标语言的输出文本(包含同样的含义)。
  • 情感分析(Sentiment Analysis),接收文本数据,判定文本是正面的、负面的还是中性的等。
  • 文本摘要(Text Summarization),接收文本输入并将它们总结为更精炼的文本语言输出。

输入文本的质量会很大程度影响这些业务场景的模型效果。因此,在这些文本数据到达机器翻译、情感分析、文本摘要等下游任务之前,我们要尽量保证输入文本数据的语法正确性。

语法纠错(Grammatical Error Correction)是一个有非常广泛使用的应用场景,有2种典型的模型方法:

  • 序列到序列(seq2seq)模型:它最早被使用在机器翻译引擎中,将给定语言翻译成同一种语言,这种映射方法同样可以用来做语法纠错(例如📘Yuan 和 Briscoe,2014)。
  • 序列标注模型:输入文本被标注然后映射回更正的内容(例如📘Malmi 等人,2019)。

虽然 seq2seq 神经机器翻译方法已被证明可以实现最先进的性能(例如📘Vaswani 等人,2017 年),但它仍然存在某些缺点,例如:1)推理和生成输出需要很长时间;2)训练需要大量数据;3)与非神经架构相比,模型的神经架构使得对结果的解释具有挑战性(例如📘Omelianchuk 等人,2020 年)等。为了克服这些缺点,我们在本文中讨论并应用更新的方法:使用 Transformer 编码器的序列标注器

📘Omelianchuk, et al., 2020 中提出的 📘GECToR 模型,是非常优秀的文本纠错模型。它对 Transformer seq2seq 进行微调,Transformer 的引入极大改善了 seq2seq 模型的推理时间问题,并且可以在较小的训练数据的情况下实现更好的效果。

在后续的内容中,ShowMeAI将演示使用这个库来实现纠正给定句子中语法错误的方案,我们还会创建一个可视化用户界面来将这个AI应用产品化。

💡 语法纠错代码全实现

整个语法纠错代码实现包含3个核心步骤板块:

  • 准备工作:此步骤包括工具库设定、下载预训练模型、环境配置。
  • 模型实践:实现并测试语法纠错模型。
  • 用户界面:创建用户界面以产品化和提高用户体验

💦 准备工作

我们先使用以下命令将 GitHub 中的代码复制到我们本地,这是 GECToR 模型对应的实现:

git clone https://github.com/grammarly/gector.git

GECToR 提供了3种预训练模型。我们在这里使用 📘RoBERTa 作为预训练编码器的模型,它在现有模型中具有最高总分最好的表现。我们使用以下命令下载预训练模型:

wget https://grammarly-nlp-data-public.s3.amazonaws.com/gector/roberta_1_gectorv2.th

下载完毕后,我们把下载的模型权重移动到gector目录,以便后续使用:

mv roberta_1_gectorv2.th ./gector/gector

接下来,我们切换到gector文件夹下:

cd ./gector

gector对其他工具库有依赖,因此我们将使用以下命令安装这些依赖:

pip install -r requirements.txt

💦 模型实践

现在我们已经做好所有准备工作了,可以开始使用工具库。总共有下述步骤:

  • 导入工具包
  • 构建模型实例
  • 在有语法错误的句子上测试模型,以查看输出

① she are looking at sky

为此,我们将使用以下句子『she are looking at sky』。

# 导入工具库
from gector.gec_model import GecBERTModel# 构建模型实例
model = GecBERTModel(vocab_path = "./data/output_vocabulary", model_paths = ["./gector/roberta_1_gectorv2.th"])# 需要纠错的句子
sent = 'she are looking at sky'# 存储处理结果
batch = []
batch.append(sent.split())
final_batch, total_updates = model.handle_batch(batch)
updated_sent = " ".join(final_batch[0])
print(f"Original Sentence: {sent}\n")
print(f"Updated Sentence: {updated_sent}")

结果:

模型的纠错结果非常准确!有以下变化:

  • 句首将she大写为She
  • are更改为is,以使sheis主谓一致
  • sky之前添加the
  • 在句子末尾加句号.

② she looks at sky yesterday whil brushed her hair

刚才的句子语法比较简单,让我们看看复杂场景,比如混合时态下模型的表现如何。

# 添加复杂句子
sent = 'she looks at sky yesterday whil brushed her hair'# 存储纠错后的句子
batch = []
batch.append(sent.split())
final_batch, total_updates = model.handle_batch(batch)
updated_sent = " ".join(final_batch[0])
print(f"Original Sentence: {sent}\n")
print(f"Updated Sentence: {updated_sent}")

结果:

在这个句子中我们来看一下纠错模型做了什么:

  • 句首将she大写为She
  • looks改为looked,与yesterday一致
  • sky之前添加the
  • 将缺失的字母添加到while
  • brushed改为brushing,这是while之后的正确格式

不过这里有一点大家要注意,模型的另外一种纠错方式是将yesterday更改为today,对应的时态就不需要用过去式。但这里模型决定使用过去时态。

③ she was looking at sky later today whil brushed her hair

现在让我们再看一个例子:

# 添加复杂句子
sent = 'she was looking at sky later today whil brushed her hair'# 纠错及存储
batch = []
batch.append(sent.split())
final_batch, total_updates = model.handle_batch(batch)
updated_sent = " ".join(final_batch[0])
print(f"Original Sentence: {sent}\n")
print(f"Updated Sentence: {updated_sent}")

结果:

我们发现了一种边缘情况,在这种情况下,模型无法识别正确的动词时态。更新后的句子是『She was looking at the sky later today while brushing her hair』,我们读下来感觉这句是将来时(今天晚点),而模型纠正后的句子是过去时。

我们想一想,为什么这句对模型比以前更具挑战性呢?答案是later today用两个词暗示时间,这需要模型具有更深层次的上下文意识。如果没有later这个词,我们会有一个完全可以接受的句子,如下所示:

在这种情况下,today可能指的是今天早些时候(即过去),纠错后的语法完全可以接受。但在原始示例中,模型未将later today识别为表示将来时态。

💦 用户界面

在下一步,我们将制作一个web界面,通过用户界面把它产品化并改善用户体验:

# 创建一个函数,对于输入的句子进行语法纠错并返回结果
def correct_grammar(sent):batch = []batch.append(sent.split())final_batch, total_updates = model.handle_batch(batch)updated_sent = " ".join(final_batch[0])return updated_sent

我们找一个句子测试这个函数,确保它能正常工作和输出结果。

sent = 'she looks at sky yesterday whil brushed her hair'print(f"Original Sentence: {sent}\n")
print(f"Updated Sentence: {correct_grammar(sent = sent)}")

结果:

接下来我们将添加一个可视化用户界面。我们使用 📘Gradio 来完成这个环节,它是一个开源 Python 工具库,可以快捷创建 Web 应用程序,如下所示。

# 在命令行运行以安装gradio
pip install gradio

安装Gradio后,我们继续导入和创建用户界面,如下所示:

# 导入Gradio
import gradio as gr# 构建一个demo实例
demo = gr.Interface(fn = correct_grammar, inputs = gr.Textbox(lines = 1, placeholder = 'Add your sentence here!'), outputs = 'text')# 启动demo
demo.launch()

结果我们得到如下的界面:

我们可以在 web 界面中再次测试我们的句子啦!我们只需在左侧的框中键入待纠错的句子,然后按 Submit(提交)。接错后的结果将显示在右侧的框中,如下所示:

非常顺利,你也快来测试一下吧!

💡 总结

在这篇文章中,我们实践了语法纠错模型。我们使用公开可用的 GECToR 库来实现一个预训练的语法纠错模型,在一些错误的句子上对其进行测试,发现该模型的适用场景和局限性(需要提高的地方),最后我们构建了一个可视化界面把文本纠错产品化。

参考资料

  • 📘 Grammatical error correction using neural machine translation:https://aclanthology.org/N16-1042/
  • 📘 Encode, Tag, Realize: High-Precision Text Editing:https://aclanthology.org/D19-1510/
  • 📘 Attention Is All You Need:https://arxiv.org/abs/1706.03762
  • 📘 GECToR – Grammatical Error Correction: Tag, Not Rewrite:https://aclanthology.org/2020.bea-1.16/
  • 📘 GECToR模型的GitHub页面:https://github.com/grammarly/gector
  • 📘 RoBERTa的GitHub页面:https://github.com/facebookresearch/fairseq/blob/main/examples/roberta/README.md
  • 📘 Gradio的GitHub页面:https://github.com/gradio-app/gradio

推荐阅读

  • 🌍 数据分析实战系列 :https://www.showmeai.tech/tutorials/40
  • 🌍 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
  • 🌍 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
  • 🌍 TensorFlow数据分析实战系列:https://www.showmeai.tech/tutorials/43
  • 🌍 PyTorch数据分析实战系列:https://www.showmeai.tech/tutorials/44
  • 🌍 NLP实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
  • 🌍 CV实战数据分析实战系列:https://www.showmeai.tech/tutorials/46

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23070.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里 P10 级大佬吴翰清离职,下一步或将开启 AI 短视频创业

作者 | 苏宓 出品 | CSDN(ID:CSDNnews) 5 月 25 日,据 Tech 星球报道,阿里巴巴集团研究员吴翰清已从阿里离职,接下来其将深度拥抱 AI 新时代,投身于 AI 短视频赛道创业。 这位被阿里程序员誉为大…

智能文本生成:进展与挑战

智能文本生成:进展与挑战 万小军 北京大学王选计算机研究所 摘要:智能文本生成是人工智能与自然语言处理领域的前沿研究方向,也是AI生成内容(AIGC)的关键技术支撑,近些年受到学术界和产业界的高度关注&…

2023.3.20-3.26 AI行业周刊(第142期):AI创业过程中的思考和实践

最近一段时间,因为开始接触更多的市场用户,包括和一些AI公司的创始团队沟通,越来越感觉创业的不容易。 因为需要考虑的因素太多,市场分析后产品的定位,产品打磨出来后用户的推广,用户使用后商业化的落地等…

【热点抢先看】智能文本生成:进展与挑战

智能文本生成:进展与挑战 万小军 北京大学王选计算机研究所 摘要:智能文本生成是人工智能与自然语言处理领域的前沿研究方向,也是AI生成内容(AIGC)的关键技术支撑,近些年受到学术界和产业界的高度关注&…

吴恩达与OpenAI官方合作的ChatGPT提示工程课程笔记

吴恩达与OpenAI官方合作的ChatGPT提示工程课程笔记 🥸 下述代码均在煮皮特上运行喔 LLMs(large language models) Base LLM:基于文本训练数据来预测做“文字接龙” Instruction Tuned LLM(指令调整型LLM):接受了遵循指示的培训&am…

会议学习笔记

目录 1.标注高效的核心思路:1.部分监督PSL2.自监督SSL魔方复原 3.单一标注无标注 2.深度通用学习DUL1.通用特征点检测2.通用MRI重建 3.学习与知识融合 如何把大数据小任务转换成小数据大任务 1.标注高效的核心思路: 以一变二:数据增广无中生…

【Android知识笔记】Parcelable 为什么速度优于 Serializable ?

Q:Parcelable 为什么速度优于 Serializable ? 首先,抛开应用场景谈技术方案都是在耍流氓,所以如果你遇到有面试官问这样的题目本身就是在给面试者挖坑。 序列化 将实例的状态转换为可以存储或传输的形式的过程。 Serializable 实现方式: Serializable 是属于 Java 自带的…

计算机IO模型二、pageCache、mmap作用

前言 文章开始前先推荐两本书,《深入理解linux内核》可以帮助大家对内核有一个系统的理解,《深入理解计算机系统》可以夯实对操作系统的了解 1. 物理内存: 物理内存中有内核,有应用程序,程序在物理内存中是不连续的。…

一个JavaSript信息提示框的实现

在很多时候我们需要在一个Html控件获得光标的时候在控件旁边显示一个提示框,实现这个关键在于怎么定位当前控件的位置。这个位置可以是相对于浏览器左上角窗口的x,y坐标,也可以是相对于Body的X,Y坐标。相对于第一种方法,第二种方法实现起来会方便些,因为要获得相对于浏览器…

ospf协议

一、路由协议基础: 1. 静态路由协议缺点: 1)路由不能随着拓扑的变化而自动变化(网络中接口关闭或者故障是不可知的,有无汇总都会有黑洞的——接口故障关闭断电或者网段不存在之后,此时如果有缺省就会出现…

D3D12渲染技术之顶点着色器

相信大家以前用过D3D9的或是编写过Shader的对顶点着色器都比较了解,现在我们回顾一下: cbuffer cbPerObject : register(b0) {float4x4 gWorldViewProj; };void VS(float3 iPosL : POSITION, float4 iColor : COLOR, out float4 oPosH : SV_POSITION,o…

chatgpt赋能python:Python编程教程之抽签程序

Python编程教程之抽签程序 介绍 对于喜欢玩抽签、体育彩票等游戏的人来说,抽签程序是一款非常有用的小工具。抽签程序可以用来随机抽取一定数量的幸运儿,而且运行速度快,结果随机性高,不需要人工干预。 那么,Python…

《大众证券报》报道云创大数据等企业谋取新春“开门红”

近日,《大众证券报》以《拼研发、抓项目、拓市场 南京上市公司谋取新春“开门红”》为题发表新闻报道,描绘包括南京云创大数据科技股份有限公司等南京本地上市公司在新春伊始的生机活力景象,报道这些企业是如何围绕主业谋发展,力争…

游戏版《西部世界》来了!NPC全由AI操控,行动自如有理想和记忆,基于最新GAEA技术系统打造

​ChatGPT彻底引爆了AI领域,也点燃了各赛道玩家的热情。 以虚拟交互体验为例,就已经有不少新产品冒头。 不仅像Chat D-ID这类以ChatGPT驱动的虚拟女友bot花样百出,就连游戏AI NPC也变得火热起来,这几天知名游戏公司育碧要推出AI…

游戏版《西部世界》来了!NPC全由AI操控,行动自如有理想和记忆,基于最新GAEA技术系统打造...

萧箫 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT彻底引爆了AI领域,也点燃了各赛道玩家的热情。 以虚拟交互体验为例,就已经有不少新产品冒头。 不仅像Chat D-ID这类以ChatGPT驱动的虚拟女友bot花样百出,就连游戏AI NPC也变得火热起来&#x…

无人出租车被警察截停后逃逸!AI:我当时害怕极了

新智元报道 编辑:好困 袁榭 snailnj 【新智元导读】愚人节当晚,在美国旧金山上演了史上第一场无人驾驶汽车被警察截停后逃逸的事件,画面爆笑。 警察拦车很常见,但是拦AI开的出租车你见过么? 在最近爆火的一段视频中&…

H5营销海报如何制作,在线制作平台分享

互联网影响着我们的生活习惯,很多人获取消息不再是从别人口中听到、从电视上看到、从报纸上阅读到,但一切消息皆可以从互联网上来获取。而商家们也可以通过互联网进行高效、精准的宣传,方式很简单。通过H5海报制作,巧妙的利用互联…

fast-poster 海报生成器,一分钟完成海报开发。

fast-poster 海报生成器,一分钟完成海报开发。 曾几何时,开发一个海报功能,需要调用底层的绘图API,要熟悉各种不友好的GUI代码。 经过N次迭代和线上生产环境的考验。 现在,开发一个海报功能,只需三步。 …

漫画:是喜,还是悲?AI竟帮我们把Office破活干完了

图文原创:亲爱的数据 国产大模型烈火制造。阿里百度字节美团各科技大佬不等闲。 大模型嘛,重大工程,对我等“怀保小民”来说,只关心怎么用,不关心怎么造。 我来介绍一下自己,我是一个写稿男团组合的成员&am…

腾讯云开发者2022年度热文盘点

01 十亿人都在用的健康码运维体系如何设计? 随着疫情防控模式的迭代,健康码访问DAU逐渐趋于下跌,意味着健康码将逐步完成历史使命,见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体…