操作步骤
环境准备
ModelScope提供了本地(参考环境配置和模型下载)和远程环境两种模式,这里选择了使用ModelScope提供的远程环境,即Notebook进行开发,更加便捷。
通过个人中心进入到实例启动页面,这里选择CPU环境启动Notebook:
进入到如图所示的交互页面,选择以Notebook方式运行
即可进入正常的Notebook页面:
模型调试
通过如下命令,即可在Notebook环境下自动下载所需推理模型。这里通过pipeline()函数,以一行代码实现了模型定义,其中第一个参数为任务名称,第二个参数为模型地址,这里选用了达摩自然语言推理模型(base),该模型为在structbert-base-chinese预训练模型的基础上,用CMNLI、OCNLI两个数据集(45.8w条数据)微调训练出来的自然语言推理模型。。
frommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTaskssemantic_cls=pipeline(Tasks.nli, 'damo/nlp_structbert_nli_chinese-base')
在定义好模型调用函数后,即可输入句子对实现模型调用:
semantic_cls(input=[('商务职业学院和财经职业学院哪个好?', '商务职业学院商务管理在哪个校区?')])
得到返回结果:
返回输入句子对可能的三种关系contradiction, entailment和neutral的概率,如上所示,该输入句子对之间最有可能为neutral关系,基本符合我们的人工判断,说明模型效果还是不错的。
除了输入单对句子,也可以将多对句子作为模型输入,以列表输入为例:
sen_list1= ['商务职业学院和财经职业学院哪个好?', '我爱中国'] sen_list2= ['商务职业学院商务管理在哪个校区?', '我很爱中国'] sen_pairs= [] forkinrange(len(sen_list1)): sen_pairs.append((sen_list1[k], sen_list2[k])) semantic_cls(input=(sen_pairs))
从而得到如下的两组返回结果,可见第一个句子对结果与上述相同,第二个句子对则更有可能为entailment关系,也基本符合我们的判断。
下面,我们展示如何通过一个web ui将该功能封装起来,形成一个小的app。
引入web ui
安装gradio:pip install gradio
运行以下代码:
importgradioasgrsemantic_cls=pipeline(Tasks.nli, 'damo/nlp_structbert_nli_chinese-base') defnatural_language_inference(text1, text2): res=semantic_cls(input=(text1, text2)) returnresserver=gr.Interface( fn=natural_language_inference, inputs=[ gr.Textbox(lines=1, placeholder="请输入文本1"), gr.Textbox(lines=2, placeholder="请输入文本2") ], outputs="text") server.launch(share="true")
注意,最后server.launch的参数share=“true”表示该应用可以在Public URL上访问,否则只能在Local URL上访问。
最终,该应用呈现如下:
体验优化建议
- 当前模型文档还比较简单,仅有单句子对输入示例,可以考虑加入多句子对和数据文件作为输入的示例,以提高用户使用效率。
- 当前结果输出为按候选类别概率从小到大排列,可以考虑按照从大到小排列,更符合阅读习惯。