Event[0]是怎么做到和NPC流畅对话?

0 条评论


  • 11

    OwenTsai游戏设计,Web开发

    Michael BlueTarqrafi伐梨道人 等 11人赞同

    我就喜欢这种讨论技术的问题2333

    首先为了避免有人不知道这款游戏——这是一款打着步行模拟tag的游戏,科幻壳子,和人工智能Kaizen对话,探索整个宇宙飞船。在游戏中你需要直接和人工智能通过打字的方式交流。AI会根据之前的聊天上文,以及你们的对话做出合适的回答——虽然有可能不是很合适。

    《Event[0]》看起来可能拥有最先进的AI,可以无障碍与人沟通。但事实并非如此。任何一个游戏程序员都会告诉你,游戏中的AI是一系列规则的状态机或者行为树,不可能可以和玩家真正沟通。Event [0] 也是如此,所谓的AI不过是一个创造出来的假象。那么这种技术是如何实现的呢?

    通过开发者访谈,我们可以看到Kaizen的运作机制。

    第一步,程序会纠正你拼错的单词。当然如果你错的太离谱,程序是不可能纠正的。

    第二步,程序会浏览你的输入字符串,提取关键词,并和数据库中的tag进行比较。比如I me my mine等词可以匹配的tag是Player,passenger crew others等词匹配的是crew, place location position等词可以匹配where,经过这样的匹配和重新组合,你的语句就能被程序翻译和解读。比如你输入Where are the rest of passengers? 和 Where's my crew?,匹配到的tag组合是一样的,你也就可以得到类似的答复。

    第三步,在回答数据库里根据你输入的语句标签搜寻可能的回答,并进行非关键词适当的替换,甚至还需要结合情感状态才能进行最后的输出。

    同时,系统也会记录上下文。比如你在之前提到了passengers,那么你下一句话的they就会被辨识为指代了船员。在整个游戏里有1W个以上的单词和数千个标签组成的数据库。

    由于游戏中的Kaizen只是一个飞船上的AI,聊天内容仅限于飞船上,所以这个数据库容量不需要多大。但是如果你想要一个能真正和人对话的人工智能,恐怕就非常难了。

    更新于 2017-10-16 00:18:24 0 条评论


  • 3

    卡尔是正太处身寒夜,把握星光。

    Tarqrafi酱爆鱿鱼yamiedie 赞同

    或许你可以看下这个

    https://www.youtube.com/watch?v=bCJw4hQkPj4​​​

    【游戏制作工具箱】《Event[0]》的运作机制


    发布于 2017-08-11 17:52:39 0 条评论


  • 3

    拉普拉斯的饿膜苦逼程序员/游戏品鉴师

    酱爆鱿鱼龙葵yamiedie 赞同

    感谢上面大佬的视频,比我想象的复杂多了,不是单纯一个算法可以解决的了。

    1.提取词库中有的关键字,并组成样本

    2.对样本进行分析,提取样本的事件以及语句的情感。

    3.寻找回复,并根据上述的不同,提供略微不同的回复。

    说是很简单,层层提取重要信息,并抽象化,但实际操作起来并不会有这么简单,还有很多细节性的东西没有披露。


    -------------------------------修改线--------------------------------------------

    Owen Tsai 说的很对,我来提提可能使用到的算法:

    1. 最经典的莫过于朴素贝叶斯分类器(Naive Bayes classifier),常用于垃圾邮件分类,这里也可以用。

    将词库对应每个可以回答的句型赋予权值,譬如:单词,“天气”,对于“今天是个好天气”这回答,权值为5,;但对于“啥玩意”这回答,权值为1。

    将用户的输入与赋予权值并对比,找出概率最大的那个回答。

    2. 决策树

    将用户输入与词库进行对比,将用户的输入转换成 01 形式,0代表词未出现,1代表词出现,根据训练好的决策树进行对比。

    3. KNN分类算法

    同决策树,将用户输入转化成一维的形式,矩阵算法找最邻近匹配。


    其余的SVM,CNN什么的,不是不可能,而是太麻烦。

    另外,以上均为猜测。

    更新于 2017-08-11 18:04:15 0 条评论


  • 2

    Artyficial有普通人皮肤的人形自走鹹魚。

    酱爆鱿鱼yamiedie 赞同

    鉴于毕设做的类似于语义分析然后提取关键字信息这种东西... =-= 就厚着脸皮来回答一下... (但肯定是最浅显的那种...)

    首先是语义分析

    第一步是分词,这个已经有很多现有的也挺好用的开源算法了~ 我当时用的是ansj,可以自己定义词库,并定义词性,可以识别新词,但是新词的识别其实不太好用... =-= 你依旧要根据自己的需求去定义词性。例如我当时做的是案情描述文本分析,例如“弹簧开锁”这种关键词语,我就适当的修改弹簧和开锁的词性,弹簧是tool,开锁是vsteal。然后开锁、弹簧等词可以导入一个近义词词库,将相近的词的词性进行更改。虽然这样准确率可能会受到影响,但是不用自己一个个找一个个改啊... 还有很多人说nlp什么的也好用~ 我没试过....

    然后就是根据分出来的词(大部分分词工具都会注明名词、动词等词性),区分主谓宾等,然后再分析语义,当时用的是卷积和关联规则来分析(因为当时分析的文本范围比较窄,就针对盗窃案情分析~ 所以简单~ 关联规则和决策树都很好用~)卷积当时用途并不大,因为太简单了用不到吧hhh 用也只是为了提升毕设的高大上感... =-= 然后卷积这方面已经有很多很多中文论文可以参考了~(我自己实际用的模糊匹配... emmm 也还好用的...)

    语义分析完之后... 我就不是很清楚了~ 因为就当时要分析的内容来说~ 我只要得到各个关键词或者案情描述文本的topic就可以了~ 也就是用了用LDA...

    感觉这方面还是很有意思的~~ 然而我的智商让我望而却步.......

    发布于 2017-08-14 09:24:29 0 条评论


  • 0

    Gamedian少磨多乐

    GDC新上传了2018年会游戏开发者的演讲视频
    发布于 2020-06-15 11:26:03 0 条评论

  • 登录奶牛关账号即可参与讨论

{{question['follower_count']}} 个玩家关注

...

相关元素

相关游戏

相关问题

《暴君》的恶人扮演设定是否真的为我们带来了与其他游戏截然不同的体验与感受?

8人关注 3个回答

《Broforce》中的所有人物的原型都是什么?

5人关注 4个回答

《The Forest》剧情是什么意思?

5人关注 3个回答

问题被以下收藏夹收录