用Gramformer和Gradio构建一个语法纠正的Python应用程序
写英语句子而不犯语法错误是很有挑战性的。许多人在书写正确的词汇和时态时非常挣扎。
当你想到语法纠正网络应用时,脑海中总是浮现出grammarly应用。
Grammarly是一项运行在你的网络浏览器或桌面应用程序(如Microsoft Word)中的服务。当你输入一些东西时,它会帮助你纠正语法错误。
在某些情况下,它为你建议新的句子。像这样的服务的问题是,它们不是开源的,没有免费的API。因此,你需要支付订阅费用来修复高级语法错误。
在本教程中,我们将使用一个名为Gramformer的开源框架构建一个类似于Grammarly的服务。
这个构建将帮助我们对Grammarly等服务的工作方式有一个概念。我们将把一个有语法错误的句子交给模型,它将产生一个修正版的句子。
前提条件
要跟上本教程,读者需要熟悉。
- Python编程语言。
- [谷歌Colab]或[Jupyter笔记本]。
请注意,我们将在本教程中使用Google Colab。
简介
Gramformer是一个开源的框架,用于检测、突出显示和纠正自然语言文本的语法错误。
它是一个相对较新的框架,目前在GitHub上可用。你可以把一个句子传给这个框架,它将为你改进它。
该框架由三个模型组成;error correction ,error detection ,和error highlighter model 。
在编写本教程时,只有error detector 和highlighter 模型可用。
由于计算预算有限,这些模型的微调是在相对较小的模型上进行的,数据量不大。
安装Gramformer和导入依赖项
PyTorch是你在使用Gramformer之前应该安装的一个核心依赖项。
在你的浏览器上,导航到PyTorch的网站,点击Install 按钮。根据你使用的操作系统,点击PyTorch build -> package -> programming language -> compute platform,选择你的偏好,然后运行安装命令。
在我们的案例中,我们选择了LTS (1.8.2) PyTorch build、Linux OS、Pip package、Python programming language、CUDA 11.1 compute platform(因为我们使用的是谷歌Colab的GPU)。不要忘记在pip 前面加一个感叹号! 。
!pip3 install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio==0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
一旦完成这些,继续使用下面的命令安装Gramformer。
!pip3 install pip==20.1.1
!pip3 install -U git+https://github.com/PrithivirajDamodaran/Gramformer.git
最后,我们需要将Gramformer 到我们的项目中。
from gramformer import Gramformer
使用Gramformer模型进行语法修正
实例化Gramformer模型
gf = Gramformer(models=1, use_gpu=False) #1=corrector, 2=detector
目前,Gramformer有两个模型;错误检测器和错误纠正器模型。因此,值1 代表校正器,而2 代表检测器。
下面是运行上述命令得到的结果。
[Gramformer] Grammar error correct/highlight model loaded..
它已经成功加载了错误纠正/突出显示模型。
纠正句子
让我们先从Gramformer中访问correct() 函数。
gf.correct()
用一个例子,让我们试着用Gramformer来纠正一个句子。
gf.correct('I taken dinner')
下面是我们的输出。
[('I took dinner.', -30.599159240722656)]
我们可以看到,该模型纠正了我们的句子。你可以把输入的句子改成你选择的另一个语法错误的句子,然后试试。
请确保输入的句子是一个字符串。输出的句子会自动存储在一个列表中。
如果你想对一堆句子进行改正,你可以运行一个循环。我们创建一个名为sentences 的列表来存储我们的语法错误的句子,如图所示。
sentences = [
'My name a Lilian',
'I love watching a action movie',
'I has a laptop',
'My phone battery a missing'
]
我们把这些句子通过一个循环,搅动出改进后的句子。
for sentence in sentences:
results = gf.correct(sentence)
print(results[0])
这是我们的输出。
('My name is Lilian.', -28.28873062133789)
('I love watching an action movie.', -33.1871337890625)
('I have a laptop.', -25.25513458251953)
('My phone battery is missing!', -36.07805252075195)
使用Gradio将模型部署为一个应用程序
现在让我们使用Gradio库将这一切结合起来。
Gradio是一个轻量级的库,允许你为你的机器学习应用程序建立用户界面。
!pip install gradio
def correct(sentence):
res = gf.correct(sentence)
return res[0]
上面的函数将我们所有的Gramformer代码封装成一个单一的应用程序。
app_inputs = gr.inputs.Textbox(lines=3, placeholder="Enter a grammatically incorrect sentence here...")
注意,Gradio有不同类型的输入。
Textbox只是其中之一。
interface = gr.Interface(fn=correct,
inputs=app_inputs,
outputs='text',
title='Hi there, I\'m Gramformer')
该接口类需要三个参数。
fn:一个要运行的机器学习函数。对于我们的例子,它是correct。inputs:输入的格式。在我们的例子中,它是app_inputs。outputs:我们的输出格式。在我们的例子中,它是text。
最后,为了启动Gradio,我们使用launch() 方法,如下图所示。
interface.launch()

一个有趣的事情是,一旦你启动它,它就会生成一个外部链接,允许它作为一个网络应用程序运行。对于我们的案例。
Running on External URL: https://23225.gradio.app
请在这里找到本教程的完整代码。
总结
在本教程中,我们已经学会了如何使用Gramformer构建一个端到端的语法修正网络应用。
然而,这个简单的构建只适合于实验性的目的,如果你需要构建一个用于生产的,需要做更多的工作。