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']}} 个玩家关注

...

相关元素

相关游戏

相关问题

你怎么看待 Steam 中游戏需要付费来抢先体验?

5人关注 7个回答

We Happy Few 有哪些充满讽刺意味的细节和设定?

9人关注 1个回答

问题被以下收藏夹收录