草履虫都能上手用的人工智能模型
前排提示:
- 阅读本文 不需要 任何人工智能以及算法相关的知识。
- 你会 任何一种 编程语言就行,会python当然那更好。
- 仅作为NLP科普,娱乐,实际算法工作并非这么简单。
X:“宝,你搞的是什么算法?”
A:“NLP,又叫自然语言处理。”
X:“太抽象了啊”
A:“比如聊天机器人?”
X:“emmmmm”
A:“算了,你自己试一下吧,上车,坐稳了。”
接下来会分为两部分:
- 没有Python环境的我会提供一个colab,但是colab是谷歌的,要怎么打开能懂我的意思吧。
- 有Python环境的可以直接上手进行尝试了。代码是完全一样的。
如果你没有Python环境
那么:Transformers, what can they do? - Colaboratory ( http:// google.com )
看到上边这个链接了吧,看到Google知道怎么才能打开它吧。(疯狂暗示)
使用colab的话,你会点击鼠标左键就行了。
看到上图中红色框框的按钮没,我说到哪段代码,你直接点击一下他就运行了。
如果你有Python环境
你有Python环境我就默认你已经会pip安装东西了。那你只需要会复制粘贴代码,丢进你的IDE里运行就行了。
第一步:
pip install datasets evaluate transformers[sentencepiece]
下载使用抱抱脸提供的pipeline让你们可以迅速看一下现在的一些NLP模型能干嘛。
第二步:
打开你的IDE,开始复制粘贴运行我下边的代码。
注意
:jupyter和Python常规的IDE存在差别。在jupyter(上边的colab)中直接写下边的代码,么一个代码块最后一行会默认输出,不需要print,但是普通的IDE你要看到结果需要自己加上
print()
。
情感分析
# colab:from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier("I love you!")# 其他IDE:from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("I love you!")print(result)复制代码
这段代码的意思是导入pipeline,新建一个classifier,这个classifier是使用了pipeline的 情感分析 功能。
之后你只需要给它传入句子,就可以进行句子的情感分析了。
然后你可以看到他的输出大概是长这样
[{'label': 'POSITIVE', 'score': 0.9998717308044434}]
意思是说系统判定这个句子是个积极的句子,得分是99%,得分越高,当然越偏向于积极。
传入多个句子:
当然你也可以给他传入多个句子,句子需要使用列表进行储存。
Python列表(list)的特点是用
[]
存储,数据项之间使用
,
分割。
比如我们想传入两个句子,就是
["I love you.","我不爱换吃香菜。"]
。
我们只需要把这个列表传给刚才的classifier即可。
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier(["I love you.","我不爱换吃香菜。"])复制代码
之后我们可以看到输出结果为:
[{'label': 'POSITIVE', 'score': 0.9998705387115479},
{'label': 'NEGATIVE', 'score': 0.9371575713157654}]
模型认定第一个句子是个积极的句子,得分是99%,第二个句子是个消极的句子,得分是94%。
总结
这个任务就是自然语言处理之中的情感分析任务。可以应用在一些评论中来处理用户极性,比如各大购物平台的评论区啊,或者外卖平台的评论区啊,服务提供商可以迅速地通过对评论进行情感分析,来获取用户对产品的一些喜欢或者厌恶的程度。当然在这里只是进行了一个粗粒度的情感分析。细粒度的情感分析可以做到更精准的定位。
文本生成
文本生成就是说你给他一个句子或者几个句子,他给你继续往下写。我之前就是在做这个东西。然后我做的主要是受控文本生成,就是说你可以去控制模型生成的情感呀主题呀之类的。当时写这个东西的时候大家在想应用场景嘛,然后想来想去,我说了一句是不是要去做免费的网络水军。
今天在这里就简单的展示一下最普通的文本生成。因为各种各样的原因,这些简单的模型现在的生成效果可能并不是特别的好。所以在这里仅仅是做一个展示而已。
from transformers import pipeline
generator = pipeline("text-generation")
generator("I am boring, I want to")复制代码
注意:
在这里默认使用的是GPT-2,每个人每一次生成出来的结果都是不一样的。所以我生成出来的答案并不是你生成出来的答案,它是随机的。你得到的输出肯定是和我的不一样。
[{'generated_text': 'I am happy, I want to go to work."\n\nWith her hand in a pocket, the waitress looked around and saw an expression on Colin's face. "It's pretty obvious that you are here in the business to do this, as'}]
我这边的生成结果是
“我很高兴,我想去工作。”女服务员把手放在口袋里,环顾四周,看到柯林连上的表情……
语言模型并不如大家想象中的那么智能,所以你看到它生成的结果可能并不通顺,或者逻辑也并不清晰,这一点不要诧异。文本生成任务其实还是任重道远的。
生成多个候选:
可以使用参数 num_return_sequences 控制生成多少个不同结果。
from transformers import pipeline
generator = pipeline("text-generation", model="distilgpt2")
generator( "In this course, we will teach you how to",
num_return_sequences=3,
)复制代码
在这里设置了返回序列的数量为3,这样你就可以一下获得三个结果。
[{'generated_text': 'In this course, we will teach you how to write with both HTML & JavaScript which is easy to learn, easy to use, and in-depth in HTML. You will learn how to write with both HTML & JavaScript which is easy to learn,'},
{'generated_text': 'In this course, we will teach you how to run a simple and simple network with a very simple set of parameters (for example, for a network where you can run a network with just one parameters in place), which is very important to your network'},
{'generated_text': "In this course, we will teach you how to use the skills required to make the right choices while playing a successful video game. If we can't find that many gamers do not feel like making this course even though they don't understand how to get"}]
问答
现在问答系统分为好多种。有的是基于上下文阅读理解归纳推理的,有的是基于信息提取的。二者的区别是比如说我给你一个问题,然后给你一段文本。
- 基于阅读理解的就是读完你这段文字之后给你归纳出来一个答案。这个答案比较合理,但是和你的原文可能说法不太一样。
- 而基于信息提取的就是直接把你原文中可能作为答案的部分给你摘出来。
from transformers import pipeline
question_answerer = pipeline("question-answering")