首先,恭喜你!能看到这篇文章,说明你已经可以开发AI程序了。
“啊?我吗?我……我会了吗?可是人工智能真的好难,听说得博士生才能搞!”
咳咳……我们研究的方向不一样。在我这里,小学生就可以搞。
一、理由是什么?
一项事物,它会有好多个层级。
就拿做面条来说:
- 你可以从小麦的种植开始,经历播种、收割,然后晾晒、磨粉……
- 你也可以从买袋面粉开始,经历和面、揉面、拉面……
- 你甚至可以从买份鲜面条开始,经历下锅,打鸡蛋,切火腿肠……
不管什么样的背景,想做面条都不是件难事(你得有锅)。
你顶多说,我不如你做得高级,但你不能说我不配做面条。
博士们从小麦的DNA开始研究,我则从菜市场买鲜面条开始操作。等学会之后,你虽然成不了大厨,但可以不受限于外卖,随做随吃,搞不好还可以开个小店。
现在,我将带领大家,一步一步,一层一层,从菜市场追溯到农田去。
看你的情况,你觉得吃饱了,随时可以离队,不用向我打招呼。
废话不多说,下面开始正文。
二、更人性化的学习思路
做人工智能的应用,就像是做菜。框架就是菜系,数据就是菜谱,电脑就是煤气灶。
人工智能分为很多菜系,比如Jax,PyTorch以及TensorFlow等等。
第一天做菜,我不建议大家去关心菜系。
我是填鸭教育的产物,因此痛恨说教式的教程。比方说一开课,你这边连锅把儿还没摸到,他那边先告诉你“同学,我们首先来背诵八大菜系,鲁菜、川菜、粤菜、苏菜……”。
先让我做一道菜好不好?
等我愿意考厨师证了,我自然会去研究他们的区别。
所以啊,在我这儿,我们先炒菜。
三、从抱抱脸开始起步
“抱抱脸”这个词很萌,不知道谁给翻译的,反正国内都这么叫。
抱抱脸(hugging face)的网址是 huggingface.co/ 。看上面的图就知道,它很厉害。它在GitHub上的星星已经超过10w+了。而且,很多AI巨头,比如Meta、Google、Microsoft、Intel也都会在它上面,发布一些新的成果,供大家学习和使用。
一开始,它只是发布了一个叫“Transformers”的开源库。但是,后来这个库太好用了。它做了这样一件事情:连接了AI科学家和企业小白。
他可以让一个AI小白,不用了解关于构建、训练和部署的知识,就能使用科学家的成果。这些事情,虽然也是谷歌、微软他们想做的。但是,谷歌只能让自己变得简洁,他管不了微软。抱抱脸的出现,让各家都能接入到它。它成为了一个全球AI的标准化使用平台。
很多NLP工程师招聘的要求上,也会写着熟悉huggingface transformer库的使用。这说明……它有用,你学它,不会亏。
说了这么多,我们开始来实际操作一下。
四、走进HuggingFace
抱抱脸上有大量的成品模型,这是可以直接下载用的(连注册都不用)。
为什么会这么多?哪里来的?
这都是全球各路的壮士,他们自己上传的。他们上传后,别人就可以使用。别人又站在他们的肩膀上,进行更深的研究,研究完了再上传。这就是“开源精神”。
我翻译并整理了一下,具体类型和数量如下。
好了,就说这么多。再多说,我会抽自己的“又开始给人家说教了”。
下面,我就用python语言来编写程序。
在动手之前,确保你处于python
环境,并且安装了抱抱脸它们家的transformers
库。
安装方法就是在命令执行:pip install transformers
。
小提示:安装transformers前,你需要先安装 Flax 、 PyTorch 或 TensorFlow 其中之一。
建议安装TensorFlow,命令为
pip install tensorflow
。
五、挖呀挖:敲一个情绪分析
我们先做一个情绪分析的应用。
所谓情绪分析,是指对一段文字进行好与坏的评判。其实,就是让它能听出来好赖话。
这一点,我们人类是可以轻松做到的。
- “你真是太棒了,我为你感到骄傲!”这是夸人的,属于正面,英文叫POSITIVE。
- “太不让人省心了,别让我见到你!”这是骂人的,属于负面,英文叫NEGATIVE。
“你不要以为我不会拒绝你的这种消极行为,这不等同于痴心妄想”
这……我的CPU烧干了。
如果让AI来评判一句话的性质,该如何写代码呢?
下面是代码:
from transformers import pipeline
classifier = pipeline('sentiment-analysis')
classifier('I like you very much!')
没错,就是3行。要不怎么说,它连接了小白!
第1行,从transformers
中导入pipeline
。transformers
就已经很简化了,但是pipeline
(流水线)更简化。
第2行,通过pipeline
,可以轻松加载模型。比如,此处加载的是sentiment-analysis
(情绪分析)这个模型。它会自动从网站去下载需要的所有数据。加载完毕,会把能力赋值给一个叫classifier
的变量。
执行这一句,控制台会出现如下的输出:
Downloading lve/main/config.json: 100%|██████████| 629/629
Downloading pytorch_model.bin: 100%|██████████| 268M/268M
Downloading okenizer_config.json: 100%|██████████| 48.0/48.0
Downloading solve/main/vocab.txt: 100%|██████████| 232k/232k
第3行,将一句话传输给classifier
,让它判断属于什么情绪。那么,它会打印出结果。
[{'label': 'POSITIVE', 'score': 0.9998810291290283}]
I like you very much!(我非常喜欢你!)这句话,99.98是夸人的。
再来试验几个。
Can you stay away from me?(你能离我远点吗?)98.89%是消极的。
Don’t think I don’t dislike you.(不要以为我不是不讨厌你)93.61%是积极的。
这项能力能做什么?
有很多应用场景。比如,归类商品的好评与差评。或者,通过大量的微信对话,统计你女朋友对你到底持有怎样的态度。
自己想去吧,反正技术有了。
六、随堂练:基于文本的问答
再来一个问答的例子。
这类问答,就是先给一段文本作为依据,然后再问问题。
就比如,我先说“ITF男孩,写的文章很有意思,但他这个人很无趣”。然后,我再问你“ITF男孩,他写的文章怎么样?”。其实就类似于阅读理解。
上代码:
from transformers import pipeline
qa = pipeline('question-answering')
qa({
# 正文:我是一个程序员,我从2022年开始写博客。
'context': 'I am a programmer and have been writing blogs since 2022.',
# 问题:我哪年开始写博客?
'question': 'When do I start writing a blog?'
})
也是3行。和上面的例子一样。只是加载的模型不同。
它的最终输入如下:
{'score': 0.9318629503250122, 'answer': '2022'}
答案:93.18%的可能是2022年。
这个,挺有意思!能干的也有很多。
比如,你把你的课本录进去,让它成为课本知识小达人,随时问,不用再去翻书查找了。
七、小小的成果,大大的骄傲
上面的代码,是可以本地运行的。也就是说,在你的电脑跑起来之后,拔了网线一样可以用。
你可能会很兴奋,去拿来研究或者解决问题,也可能你想分享给其他人使用。因此,那就做成API吧!
我们需要先安装两个库。
pip install fastapi
pip install uvicorn
刚刚安装的是FastAPI,是个Web框架,写接口很方便。它的好处能说上三天三夜。因为我今晚得睡觉,所以不说了。
uvicorn
是运行应用程序的服务器,它能让接口一直跑着。
建立一个mian.py
文件,全部代码如下:
from fastapi import FastAPI
import uvicorn
from transformers import pipeline
app = FastAPI(title="超级模型开发能力平台")
question_answerer = pipeline('question-answering')
classifier = pipeline('sentiment-analysis')
@app.get("/sentiment", summary='情绪分析', tags=['NLP方向'])
def qa(text: str = None):
result = classifier(text)
result = result[0]['label'] # 解析结果,只要需要的
return {"code": 200, "result": result}
@app.get("/qa", summary='文本问答', tags=['NLP方向'])
def qa(text: str = None, q_text: str = None):
result = question_answerer({'question': q_text, 'context': text})
result = result['answer'] # 解析结果,只要需要的
return {"code": 200, "result": result}
if __name__ == '__main__':
uvicorn.run("main:app", host='0.0.0.0', port=8000)
上面的代码,作用就是把人工智能的例子,封装了接口。此时,可以访问 http://127.0.0.1:8000/docs ,可以进入FastAPI自带的接口文档页面。
八、再见
我们能见面,就是一场缘分。下一次未必还会相逢。
因此,我想给你一个完整的小回忆。
你我萍水相逢。我不搞系列,没有星球,每一篇文章都是独立的。你可以从任意节点过来,并随时离开。咱们没有历史包袱。愿你每次都轻松而来,满载而归。
我是ITF男孩,开始进行全民AI的普及计划。