什么是ModelScope
首先什么是ModelScope?ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单,减少开发者的重复研发成本。更多的内容可以参考ModelScope的文档,整体撰写非常详细,包括快速入门、详细教程、模型库以及数据集等内容。
Pipeline快速推理
Pipeline()函数是ModelScope框架上最基础的函数之一,可对多种领域的多种模型进行快速推理。通过pipeline()函数,用户可以只需要一行代码即可完成对特定任务的模型推理!这里我们演示使用Pipeline()函数调用句子相似度模型进行推理的流程。
句子相似度相似度服务提供不同句子之间相似度的计算,并输出一个介于0到1之间的分数,分数越大则句子之间的相似度越高。
首先我们在ModelScope模型库-自然语言处理-句子相似的可以看到达摩文本相似度模型,根据基于的预训练模型structbert型号分为三种不同大小base、tiny、large的模型。点击不同的模型后会进入模型介绍页,包括模型介绍、代码范例等内容,用户可以根据自身的实际需求以及资源的情况来选择模型。
这里我们选择第一个base模型,通过点击右上角“在Notebook中打开”按钮,快速创建一个可使用的环境——包括免费的CPU环境与有时间限制的GPU环境(如果未登录会有一个简短的注册流程),这里我们选择GPU环境。
等待5分钟左右后环境创建完毕,点击左下“”按钮会跳转到一个dsw的实例,根据使用习惯可以选择Notebook、Console等交互形式。这里我们选择Notebook,输入模型介绍页-代码范例中的实例代码,即可完成快速调用,其中pipeline()函数支持按照任务类型、模型名称从模型仓库拉取模型进行进行推理:
from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks semantic_cls = pipeline(Tasks.sentence_similarity, 'damo/nlp_structbert_sentence-similarity_chinese-base') semantic_cls(input=('ModelScope非常好用', 'Model S非常好开')) semantic_cls(input=('如何成为一名厨师','怎样当一名厨师'))
返回结果如下,我们可以看到对于第一组两个字面上比较接近但语义相差较远的句子,模型还是很轻松的将它们分开了;第二组相似的句子对分数也很合理:
Pipeline()函数也支持批量推理,只需要把带推理句子对都放在一个list里即可(关于pipeline()函数的更多信息请看文档):
test_list=[('ModelScope非常好用', 'Model S非常好开'),('如何成为一名厨师','怎样当一名厨师')] semantic_cls(input=test_list)
很多时候受制于资源,我们没法使用large或者base模型,所以之类我们也尝试一下tiny版模型的效果。相比刚才使用的base模型,tiny模型大小只有其十分之一,约为33m。此时我们只需要简单的改一下加载模型的参数,代码如下,可以发现pipeline()函数作为ModelScope的推理函数还是非常方便的:
semantic_cls = pipeline(Tasks.sentence_similarity, 'damo/nlp_structbert_sentence-similarity_chinese-tiny') test_list=[('ModelScope非常好用', 'Model S非常好开'),('如何成为一名厨师','怎样当一名厨师')] semantic_cls(input=test_list)
返回结果如下,可以看到虽然tiny模型大小仅有base模型的十分之一,但结果还是一样正确的。但毕竟参数量大大减少,分数呈现出来的区分度就稍显不足,在资源要求比较严格时是不错的备选
总结:
- 整体使用下来耗时不超过10分钟,“代码敲三天,环境配两天”在ModelScope这里是不存在的。User-friendly的接口,再加上阿里云技术的支持,使得环境配置、资源分配、模型下载、模型推理都如丝般顺滑~
- 支持海量的任务,包括海量的业界领先的模型,总有一款属于你!
- 希望能早日支持更多模型的finetune功能