自然语言处理
每次有人问:你是搞什么的?
(对于普通人)我:搞AI的。
(对于程序员)我:搞算法的。
我一般不会说我是做自然语言处理(Natural Language Processing,NLP) 的,因为大部分人并不知道这是个什么东西。
大部分人提起AI就只知道他是人工智能,脑子想的都是alpha go打败李世石或者其他和机器人相关的东西,而实际上机器人这只是人工智能的一个小分支。
看一下下图,下图来自史忠植老师编著的《人工智能》教材,这张图是展示了和人工智能相关的学科以及人工智能的研究和应用领域。
我目前所做的方向就是那个语言和图像理解,比较相关的学科是数学。我现在做的东西需要扎实的数学基础做支撑。
讲个自然语言处理里最简单的东西:语言模型。语言模型就是根据人类的自然语言不断学习,去模仿人类说话。比如我们平时用的输入法,你输入完一个词之后他会给你提示你可能需要的下一个词的内容。
语言模型学习的过程中就像小朋友学说话一样,不断获得句子,不断学习这个词下边最可能接什么话,就这样,当我们训练出一个好用的语言模型的时候,我们就可以让它帮我们说话。现在很火的语言模型比如GPT-3啊之类的。
NLG VS NLU
自然语言处理有两个重要的分支:
-
自然语言生成(Natural language generation,NLG)
将文本潜在表示转化为具体的、自洽的自然语言文本。
-
自然语言理解(Natural language understanding,NLU)
对输入文本进行消歧归纳,获得能表达文本中心思想的规范化表示。
通俗来讲, 自然语言理解的目标是让机器能够更好地理解人类说的话,但是自然语言生成的目标是让机器能够像人一样说话。
自然语言生成的应用非常广泛,比如对话系统(各种chatbot)、数据增强、故事生成等等。
想起来之前我们做的一个工作,当时是要控制细粒度的情感进行生成。然后我们思考了一下应用前景。
我:所以控制文本生成情绪干嘛呢?做水军吗?
看一下文本生成几个简单的例子:
故事生成
第一个例子是故事生成,给模型一段话,模型根据这段话中的故事线关键词进行生成,要求生成的内容是要能符合这些关键词的,并且还要按照关键词给出的顺序进行生成。
给定文本: 今天好开心能吃到甜品,感觉自己好幸福。
故事线: 开心→好幸福
给你几个句子:
-
今天我闺蜜给我熬了粥,我好幸福啊,我很开心。
× 这是不按顺序来,这样的故事生成器是不符合标准的。
-
很开心能遇到你,我感觉自己好幸福。
√ 规定的词用上了,并且顺序是对的,这是个好的故事生成器。
-
打开这个猪心,我们能看到里面的瓣膜,(闻一下),好腥啊,我服了。
× 这种故事生成器,狗都不用!!!
但是如果我们仔细看了左边那个图我们会发现,和我上边说的不太一样,因为它:
给定的文本:John needed a computer for his birthday. He worked hard to earn money. John was able to buy his computer. He went to the store and bought a computer. John was happy with his new computer.(约翰过生日需要一台电脑。他努力工作挣钱。约翰买得起他的电脑。他去商店买了一台电脑。约翰对他的新电脑很满意。)
生成的文本:The man was very happy, because he bought a new computer. He went to the store. He needed a computer. He bought the computer. He installed the computer.
可以看到虽然是使用关键词生成了,但是好像并没有按照它要求里写的一样按照关键词顺序生成。
聊天机器人
右边是一个对话文本生成的例子,我们可以看到对话内容。
机器人第二句话是要回复上一句,回复的方式千千万。
- 如果是损友,可以来根烟可以帮她解压。
- 如果是渣男可以回复“……”或者乱码表示自己无语不想说话。
- 如果是好朋友应该认真纾解安慰她。
你做聊天机器人是给人添堵的吗?肯定不是,所以你要防止出现第一第二种回复的情况,也就是不要产生毒数据或者无效文本回复,这就涉及到了受控文本生成,也是我目前在做的东西,之后有机会我再讲。
最后说个题外话,多轮对话不能只回复当前这句话,还要考虑之前的内容,所以对话生成当年的一个热点是多轮对话。我感觉天猫精灵的多轮对话做的就可以(天猫精灵快给我打钱),有天猫精灵的朋友们可以试一下,喊了天猫精灵之后喊一句小爱同学。
结语
最后总结一下,我是萝莉安,我是搞人工智能的,再具体一点叫自然语言处理,再具体一点叫文本生成,再具体一点叫可控文本生成。