如何用Gramformer和Gradio建立一个语法纠正的Python应用程序

517 阅读5分钟

用Gramformer和Gradio构建一个语法纠正的Python应用程序

写英语句子而不犯语法错误是很有挑战性的。许多人在书写正确的词汇和时态时非常挣扎。

当你想到语法纠正网络应用时,脑海中总是浮现出grammarly应用。

Grammarly是一项运行在你的网络浏览器或桌面应用程序(如Microsoft Word)中的服务。当你输入一些东西时,它会帮助你纠正语法错误。

在某些情况下,它为你建议新的句子。像这样的服务的问题是,它们不是开源的,没有免费的API。因此,你需要支付订阅费用来修复高级语法错误。

在本教程中,我们将使用一个名为Gramformer的开源框架构建一个类似于Grammarly的服务。

这个构建将帮助我们对Grammarly等服务的工作方式有一个概念。我们将把一个有语法错误的句子交给模型,它将产生一个修正版的句子。

前提条件

要跟上本教程,读者需要熟悉。

  • Python编程语言。
  • [谷歌Colab]或[Jupyter笔记本]。

请注意,我们将在本教程中使用Google Colab。

简介

Gramformer是一个开源的框架,用于检测、突出显示和纠正自然语言文本的语法错误。

它是一个相对较新的框架,目前在GitHub上可用。你可以把一个句子传给这个框架,它将为你改进它。

该框架由三个模型组成;error correctionerror detection ,和error highlighter model

在编写本教程时,只有error detectorhighlighter 模型可用。

由于计算预算有限,这些模型的微调是在相对较小的模型上进行的,数据量不大。

安装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()

Output

一个有趣的事情是,一旦你启动它,它就会生成一个外部链接,允许它作为一个网络应用程序运行。对于我们的案例。

Running on External URL: https://23225.gradio.app

在这里找到本教程的完整代码。

总结

在本教程中,我们已经学会了如何使用Gramformer构建一个端到端的语法修正网络应用。

然而,这个简单的构建只适合于实验性的目的,如果你需要构建一个用于生产的,需要做更多的工作。