使用机器学习进行语法错误检测/纠正

@francescofranco_39234

一、说明

        一般的学习,特别是深度学习,促进了自然语言处理。各种模型使人们能够执行机器翻译、文本摘要和情感分析——仅举几个用例。今天,我们将研究另一个流行的用途:我们将使用Gramformer构建一个用于机器学习语法错误检测和纠正的管道。

        阅读本文后,您将...

  • 了解如何将 Transformer 用于自然语言处理。
  • 使用Python构建了基于Gramformer的语法错误检测和纠正系统。
  • 使用 HuggingFace Transformers 而不是 Gramformer 存储库构建了相同的系统。

一起来看看吧!

二、用于自然语言处理的转换器

        自 2012 年 AI 取得突破性进展以来,基于深度学习的技术已经改变了机器学习领域。虽然这一突破是在计算机视觉领域,但应用此类模型的另一个突出领域是自然语言处理。

        自 2017 年以来,基于 Transformer 的型号越来越受欢迎。在我们深入研究 Gramformer 的语法检查和更正之前,最好提供一个简短的 Transformer 背景,以便每个人都能理解 Gramformer 的上下文。点击链接查看更详细的介绍。

        书面和口头文本是一系列单词,最终甚至是字母。字母与单词的组合和单词的组合,例如书面文本的语法,具有潜在的语义或意义。这意味着当神经网络要处理文本时,它们必须能够处理这些含义。因此,他们必须能够按顺序处理文本,否则他们将无法捕捉到含义。在处理所有单词和字母之前混合所有单词和字母的模型不会带来任何好处,不是吗?

        传统上,NLP 使用递归神经网络(如 LSTM)来处理文本。递归神经网络是一种网络,其中前一个“传递”的输出通过递归连接传递到下一个“传递”。换言之,在运行期间之前处理过的内容的历史记录(例如,“我正在前往......”的路上。在“超市”之前处理)用于预测下一个输出。例如,在翻译的情况下,这可能非常有用:翻译有时高度依赖于以前产生的内容的含义。

        确切地说,这个循环段是循环神经网络的瓶颈。这意味着序列的每个元素(例如,每个单词)都必须按顺序处理。此外,由于LSTM使用“记忆”,因此很久以前处理的单词的记忆(例如,20个单词前的长短语)会消失,从而可能隐藏在复杂短语中的语义依赖关系。换句话说,使用递归神经网络和LSTM是非常无效的,特别是对于较长的句子。

        2017 年,Vaswani 等人开发了一种全新的语言处理架构——Transformer 架构。通过以不同的方式应用注意力机制,他们表明注意力就是你所需要的——这意味着不再需要重复的片段。原始 Transformer 架构如下图所示,包括 N 个编码器段和 N 个解码器段。编码器段将文本联合处理为中间表示形式,该表示形式以压缩方式包含语义。这是通过计算多头自注意力来完成的,这种机制本质上允许我们从不同角度(多头)比较单个单词(自注意力)的重要性。再次,如果您想更详细地了解此机制,请查看上面的链接。

        然后,每个编码器段的中间表示形式被传递到相应的解码器段中,如图所示。编码器段将序列作为其输入(例如法语短语),解码器将相应的目标作为其输入(例如英语翻译)。通过计算目标短语中单词的个体重要性,然后将这些单词与源短语的中间表示相结合,模型可以学习产生正确的翻译。

        除了传统上使用这种序列到序列架构执行的翻译之外,Transformer 还应用于文本生成(使用类似 GPT 的架构,使用解码器部分)和文本解释(主要使用类似 BERT 的架构,使用编码器部分)。

不让我们看一个 Gramformer。

三、使用 Gramformer 进行语法错误检测和纠正

        Gramformer是一个开源工具,用于检测纠正英语文本中的语法错误:

Gramformer 是一个库,它向一系列算法公开了 3 个独立的接口,以检测、突出显示和纠正语法错误。为确保推荐的更正和突出显示是高质量的,它带有一个质量估算器。

Github (未注明日期)

3.1 使用机器学习进行语法检测和纠正 — 示例代码

        现在让我们看一下如何使用 Gramformer 构建一个语法错误检测和纠正系统。在下面,您将找到有关如何安装 Gramformer、如何使用它来获取更正的文本、进行单独编辑以及在检测到错误时获取突出显示的说明。

3.2 安装 Gramformer

        安装 Gramformer 非常简单 — 您可以直接从 Gramformer GitHub 存储库进行安装:pip

pip install -U git+https://github.com/PrithivirajDamodaran/Gramformer.git

安装 Gramformer 时可能出现的问题

  • 问题lm-scorer
  • Errant 未安装
  • En 未找到 nlp - SpaCy OSError: Can't find model 'en' - Stack Overflow

四、获取正确的文本

        从 Gramformer 获取更正后的文本非常容易,需要以下步骤:

  • 指定导入。
  • 修复 PyTorch 种子。
  • 初始化 Gramformer。
  • 指定不正确的短语。
  • 让 Gramformer 对短语提出建议,包括更正。
  • 打印更正的短语。

        让我们从导入开始。我们导入 PyTorch,通过 .Gramformertorch

# Imports
from gramformer import Gramformer
import torch

        然后,我们修复种子。这意味着所有随机数生成都使用相同的初始化向量执行,并且任何偏差都不能与随机数生成相关。

# Fix seed, also on GPU
def fix_seed(value):torch.manual_seed(value)if torch.cuda.is_available():torch.cuda.manual_seed_all(value)fix_seed(42)

        然后,我们初始化 Gramformer。我们将模型设置为 1,即校正模式,并指示它不要使用 GPU。如果你有专用的GPU,当然可以将其设置为True。

# Initialize Gramformer
grammar_correction = Gramformer(models = 1, use_gpu=False)

然后,让我们创建一个包含三个语法不正确的短语的列表:

# Incorrect phrases
phrases = ['How is you doing?','We is on the supermarket.','Hello you be in school for lecture.'
]

...之后,我们可以让 Gramformer 改进它们。对于每个短语,我们让 Gramformer 通过建议两个候选者来执行更正,然后打印带有改进建议的错误短语。

# Improve each phrase
for phrase in phrases:corrections = grammar_correction.correct(phrase, max_candidates=2)print(f'[Incorrect phrase] {phrase}')for i in range(len(corrections)):print(f'[Suggestion #{i}] {corrections[i]}')print('~'*100)

总的来说,这将生成以下代码:

# Imports
from gramformer import Gramformer
import torch# Fix seed, also on GPU
def fix_seed(value):torch.manual_seed(value)if torch.cuda.is_available():torch.cuda.manual_seed_all(value)fix_seed(42)# Initialize Gramformer
grammar_correction = Gramformer(models = 1, use_gpu=False)# Incorrect phrases
phrases = ['How is you doing?','We is on the supermarket.','Hello you be in school for lecture.'
]# Improve each phrase
for phrase in phrases:corrections = grammar_correction.correct(phrase, max_candidates=2)print(f'[Incorrect phrase] {phrase}')for i in range(len(corrections)):print(f'[Suggestion #{i}] {corrections[i]}')print('~'*100)

这些是运行它时的结果:

[Gramformer] Grammar error correct/highlight model loaded..
[Incorrect phrase] How is you doing?
[Suggestion #0] ('How are you doing?', -20.39444351196289)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] We is on the supermarket.
[Suggestion #0] ("We're in the supermarket.", -32.21493911743164)
[Suggestion #1] ('We are at the supermarket.', -32.99837112426758)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] Hello you be in school for lecture.
[Suggestion #0] ('Hello, are you in school for the lecture?', -48.61809539794922)
[Suggestion #1] ('Hello, you are in school for lecture.', -49.94304275512695)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

伟大!我们刚刚构建了一个语法问题检查器和更正工具!

五、获取个人编辑

        除了更正的短语,我们还可以打印 Gramformer 执行的编辑

# Print edits for each improved phrase
for phrase in phrases:corrections = grammar_correction.correct(phrase, max_candidates=2)print(f'[Incorrect phrase] {phrase}')for i in range(len(corrections)):edits = grammar_correction.get_edits(phrase, corrections[i][0])print(f'[Edits #{i}] {edits}')print('~'*100)

        您可以看到,对于第一个短语,is 已改进为 are;“我们在上面”在第二句话中变成了“我们在”,依此类推。

[Incorrect phrase] How is you doing?
[Edits #0] [('VERB:SVA', 'is', 1, 2, 'are', 1, 2)]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] We is on the supermarket.
[Edits #0] [('OTHER', 'We is on', 0, 3, "We're in", 0, 2)]
[Edits #1] [('VERB:SVA', 'is', 1, 2, 'are', 1, 2), ('PREP', 'on', 2, 3, 'at', 2, 3)]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] Hello you be in school for lecture.
[Edits #0] [('OTHER', 'Hello', 0, 1, 'Hello,', 0, 1), ('VERB', '', 1, 1, 'are', 1, 2), ('VERB', 'be', 2, 3, '', 3, 3), ('DET', '', 6, 6, 'the', 6, 7), ('NOUN', 'lecture.', 6, 7, 'lecture?', 7, 8)]
[Edits #1] [('OTHER', 'Hello', 0, 1, 'Hello,', 0, 1), ('MORPH', 'be', 2, 3, 'are', 2, 3)]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

六、获取亮点

        只需将 get_edits 更改为突出显示即可生成标记错误的原始短语:

# Print highlights for each improved phrase
for phrase in phrases:corrections = grammar_correction.correct(phrase, max_candidates=2)print(f'[Incorrect phrase] {phrase}')for i in range(len(corrections)):highlights = grammar_correction.highlight(phrase, corrections[i][0])print(f'[Highlights #{i}] {highlights}')print('~'*100)

        换言之:

[Gramformer] Grammar error correct/highlight model loaded..
[Incorrect phrase] How is you doing?
[Highlights #0] How <c type='VERB:SVA' edit='are'>is</c> you doing?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] We is on the supermarket.
[Highlights #0] <c type='OTHER' edit='We're in'>We is on</c> the supermarket.
[Highlights #1] We <c type='VERB:SVA' edit='are'>is</c> <c type='PREP' edit='at'>on</c> the supermarket.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Incorrect phrase] Hello you be in school for lecture.
[Highlights #0] <a type='VERB' edit='<c type='OTHER' edit='Hello,'>Hello</c> are'><c type='OTHER' edit='Hello,'>Hello</c></a> you <d type='VERB' edit=''>be</d> in school <a type='DET' edit='for the'>for</a> <c type='NOUN' edit='lecture?'>lecture.</c>
[Highlights #1] <c type='OTHER' edit='Hello,'>Hello</c> you <c type='MORPH' edit='are'>be</c> in school for lecture.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

七、将 Gramformer 与 HuggingFace 变形金刚一起使用

        根据 setup.py 安装说明,Gramformer 构建在 HuggingFace Transformers 之上。这意味着您还可以使用 HuggingFace Transformers 构建 Gramformer,这意味着您不需要使用 pip 安装 Gramformer 存储库。下面的示例说明了如何将 AutoTokenizer 和 AutoModelForSeq2SeqLM 与预训练的 Gramformer 分词器/模型结合使用进行语法检查:

# Imports
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM# Load the tokenizer
tokenizer = AutoTokenizer.from_pretrained("prithivida/grammar_error_correcter_v1")# Load the model
model = AutoModelForSeq2SeqLM.from_pretrained("prithivida/grammar_error_correcter_v1")# Incorrect phrases
phrases = ['How is you doing?','We is on the supermarket.','Hello you be in school for lecture.'
]# Tokenize text
tokenized_phrases = tokenizer(phrases, return_tensors='pt', padding=True)# Perform corrections and decode the output
corrections = model.generate(**tokenized_phrases)
corrections = tokenizer.batch_decode(corrections, skip_special_tokens=True)# Print correction
for i in range(len(corrections)):original, correction = phrases[i], corrections[i]print(f'[Phrase] {original}')print(f'[Suggested phrase] {correction}')print('~'*100)

...结果:

[Phrase] How is you doing?
[Suggested phrase] How are you doing?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Phrase] We is on the supermarket.
[Suggested phrase] We are at the supermarket.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Phrase] Hello you be in school for lecture.
[Suggested phrase] Hello you are in school for lecture.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

八、总结

        在此文有多大作用,您可以将代码拷贝后测试,需要突出的要点是:

  • 了解如何将 Transformer 用于自然语言处理。
  • 使用 Python 构建了基于 Gramformer 的语法错误检测和纠正系统。
  • 使用 HuggingFace Transformers 而不是 Gramformer 存储库构建了相同的系统。

       (在此学习了)


 

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

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

相关文章

React学习计划-React16--React基础(七)redux使用与介绍

笔记gitee地址 一、redux是什么 redux是一个专门用于做状态管理的js库&#xff08;不是react插件库&#xff09;它可以用在react、angular、vue的项目中&#xff0c;但基本与react配合使用作用&#xff1a;集中式管理react应用中多个组件共享的状态 二、什么情况下需要使用r…

sheng的学习笔记-卷积神经网络

源自吴恩达的深度学习课程&#xff0c;仅用于笔记&#xff0c;便于自行复习 导论 1&#xff09;什么是卷积神经网络 卷积神经网络&#xff0c;也就是convolutional neural networks &#xff08;简称CNN&#xff09;&#xff0c;使用卷积算法的神经网络&#xff0c;常用于计…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 近期&#xff0c;[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法&#xff0c;将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

linux 网络工具(一)

linux 网络工具 1. nmcli命令1.1 介绍1.2 networking 网络控制1.3 connection 连接管理1.4 device 设备管理1.5 nmcli 返回状态码 2. ifcfg命令家族2.1 ifconfig2.2 route2.3 netstat 3. 静态路由CentosUbuntu - netplanUbuntu - network-manager 1. nmcli命令 1.1 介绍 RHEL…

工具系列:TimeGPT_(6)同时预测多个时间序列

TimeGPT提供了一个强大的多系列预测解决方案&#xff0c;它涉及同时分析多个数据系列&#xff0c;而不是单个系列。该工具可以使用广泛的系列进行微调&#xff0c;使您能够根据自己的特定需求或任务来定制模型。 # Import the colab_badge module from the nixtlats.utils pac…

HTML简介、基本骨架、标签的关系、注释、路径

1 HTML HTML超文本标记语言 超文本——链接 标记——标记也叫标签&#xff0c;带尖括号<>的文本 标签语法&#xff1a; 标签成对出现&#xff0c;中间包裹内容 <>里面放英文字母(标签名) 结束标签比开始标签多/ 拓展&#xff1a; 双标签&#xff1a;成对出现的标签…

生产系统稳定上线600天!中国联通CUDB for OceanBase的开源共建和规模化应用

中国联通软件研究院架构部平台承载了上千应用的数据库需求&#xff0c;并且现存大量数据库使用过程缺少规范、缺少监控&#xff0c;同时还存在着数据库核心技术相关风险。为了实现核心技术自主可控&#xff0c;及时为用户解决线上问题、满足用户的功能需求&#xff0c;提供物美…

gnu工程的编译 - 以libiconv为例

文章目录 gnu工程的编译 - 以libiconv为例概述gnu官方源码包的发布版从官方的代码库直接迁出的git版源码如果安装了360, 需要添加开发相关的目录到信任区生成 configrue 的方法备注END gnu工程的编译 - 以libiconv为例 概述 gnu工程的下载分2种: gnu官方源码包的发布版 这种…

gitee+picgo+typora图床搭建

giteepicgotypora图床搭建 1.安装typora 官网下载直接安装&#xff1a;https://www.typora.io/#download 2.编辑typora图像设置 打开 文件 -> 偏好设置 -> 图像设置 插入图片时 选择 上传图片设置 上传服务 为 PicGo-Core(command line) 3.为typora安装PicGo-Core 点…

达梦dm.ini参数之SELECT_LOCK_MODE详解

一、背景 1.现象概述 某项目当晚分区表变更&#xff0c;因为manager工具多开了1个窗口执行了语句慢取消了&#xff0c;新开了一个会话窗口执行添加分区/删除分区/truncate分区卡死了&#xff0c;v$session查不到关于这张分区表的阻塞和事务&#xff0c;但是在v$lock里根据表的…

Golang 通用代码生成器仙童发布 2.4.0 电音仙女尝鲜版二,改进三大部分生成功能群

Golang 通用代码生成器仙童发布 2.4.0 电音仙女尝鲜版二&#xff0c;改进三大部分生成功能群 Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版二及其介绍视频。尝鲜版二改进了三大部分生成功能群。 视频请见&#xff1a; https://www.bilibili.com/video/BV1Q64y1H75…

CH07_简单化

Facade 模式 外观模式&#xff08;Facade&#xff09;&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一个系统更加容易使用。 类图 说明 Facade&#xff08;窗口&#xff09; Facade角色是代表构成系统…

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果

最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411

andriod安卓水果商城系统课设

​ 一、目的及任务要求 随着当今社会经济的快速发展和网络的迅速普及&#xff0c;手机基本成为了每个人都随身携带的电子产品。传统的购物方式已经满足不了现代人日益追求便利及高效率的购物心理&#xff0c;而通过移动手机上的在线购物系统&#xff0c;可以便捷地甚至足不出…

XV7011BB陀螺传感仪的规格书

角速率输出(16/24bit)优异的温度偏置稳定性工作温度范围-20℃至80℃(可选:-40℃至85℃) 角速率输出(16/24bit)优异的温度偏置稳定性工作温度范围-20℃至80℃(可选:-40℃至85℃)内置温度传感器内置可选数字滤波器低功耗视频:XV7000系列&#xff0c;用于…

全面解析 I2C 通信协议

全面解析 I2C 通信协议 lvy 嵌入式学习规划 2023-12-22 21:20 发表于陕西 嵌入式学习规划 嵌入式软件、C语言、ARM、Linux、内核、驱动、操作系统 80篇原创内容 公众号 点击左上方蓝色“嵌入式学习规划”&#xff0c;选择“设为星标” 1、什么是I2C协议 I2C 协议是一个允许…

【2023年12月18日-12月25日】一周AI咨询更新

上周&#xff0c;关于Google的Bard和Midjourney v6的讨论异常火热。 接下来&#xff0c;让我们回顾一下上周那些引人注目的AI新闻。 ① 已近乎真实拍摄&#xff1a;Midjourney v6的画质令人惊叹 由Midjourney v6制作的图片&#xff0c;质量之高&#xff0c;媲美电影级别&…

关于使用Selenium获取网页控制台的数据

背景&#xff1a; 需要获取网页的控制台的数据&#xff0c;如下图 在此文章将使用到 Pycharm 和 Selenium4 Pycharm安装 Selenium安装 from selenium import webdriver from selenium.webdriver.common.by import By import time# 创建浏览器对象 browser webdriver.Chro…

【Recruitment Mercedes Benz】

Network I) JDII) IPv4与IPv6之间的区别是什么III) was advices3.1&#xff09; 防火墙&#xff0c;配置&#xff0c;数据的in/out (data flow in or flow out)3.2&#xff09; 域名&#xff0c;网址&#xff0c;端口3.3) 三次握手&#xff0c;四次挥手3.4) TCP/IP, 几层协议&a…

Ubuntu 22.04 安装ftp实现与windows文件互传

Ubuntu 22.04 安装ftp实现与windows文件互传 1、配置安装 安装&#xff1a; sudo apt install vsftpd -y使能开机自启&#xff1a; sudo systemctl enable vsftpd 启动&#xff1a; sudo systemctl start vsftpd创建ftp工作目录&#xff1a; sudo mkdir -p /home/ftp/uftp…