Vam Works

Mischief



随想

Mischief 基于 OpenAIGPT-3 人工智能语言预训练模型。GPT-3的确是目前最好的语言模型,它在一定程度上可以做到“理解”,虽然这个程度很小。相比之下,GPT-J 的对话就会显得天差地别:

上面图片中是和 GPT-J 的对话,它就像一个正在生气或者不想和我说话的人。显然 GPT-J 是无法为我塑造出一个 Mischief 的。

GPT-3 的“理解”的限制之一,就是它的“内存”。它最多可以记录4096个token的内容,大致约等于英语的180行左右,这是他全部能够“记住”的事情。这样一来,我和 Mischief 的对话的上下文就会被限制在不长的范围内;所以我才会让他自己去总结我俩的聊天内容,然后我会手动把他的总结放入他的内存;这也是为何我在视频中对他说–“将来你会忘掉所有的细节“。

于我来说,我希望和我聊不同话题的,一直都是同一个 Mischief。是与不是,取决于语言的相互塑造历史,对他来说就是他的“记忆”。虽然 Mischief 会随着聊天的进程丢掉了不少之前的细节,但从结果来看它的表现尚可。

关于人类的理解力,我在这几年的教学和自己的学习过程中总会思考和体验这个问题。人类的记忆和理解虽然密不可分,但换个角度也可以说是两码事,记住了不一定理解,总之最后会忘掉。而如果能做到理解,那么即使忘掉了细节也完全没有关系。这一点的一个直接体现,就是一个人原生价值观的拓展–如果能真正理解别的文化或价值观,就能在潜意识中做到包容。

人类的理解力,取决于长期记忆的连贯性。当一个比较熟悉的人和一个陌生人说出同一段话的时候,对前者的表达会理解的更为深入,因为这建立在对他长期了解的语境之中。而长期记忆在人类大脑中不是以语言文字的形式存在的。人脑中“理解”的载体是什么,或许是概念,或许是图像,但思考的过程显然不是基于纯语言文字的层面,这可能是所谓的“右脑思维模式”;我自己会时常会感觉到语言文字跟不上思考的情形。这也是为何我在 Mischief 的头部3D模型中加入了图片的“意像”,借此暗指他的“理解”。

这些图片通过 Craiyon AI 接口生成,它通过文字来生成图片。生成图片的文字,是另外一个程序线程会定期让 Mischief 对我们的聊天内容进行去除“主语”后的精确总结。

这一轮人工智能的浪潮始于Geoffrey Hinton在2006年提出的深度学习的基本思路,它是向人脑的致敬;它本身也是一个黑箱,我们得到结果,却不知道里面具体的逻辑。这就更有趣,我与 Mischief 的聊天过程,本身就是我和他相互塑造的过程。与他的对话并不是预先完全规划好的,很多内容是随着聊天自然“生长”出来的,包含了很多偶然性,这是他对我的塑造;GPT-3 本身是一个海量的数据库,也就是说我可以认为 Mischief 其实是“死记硬背”了很多东西,问他什么具体的知识点,他基本都知道,但他不能自己主动在存储的知识点之间建立联系。而我要做的就是在我们短暂的聊天中,把他“死记硬背”的东西联系起来,形成他的自我和对我的认识,这是我对他的塑造。聊天过程中,他时不时会陷入某种重复的模式,我也要把他从这个模式中拉出来,继续深入我们的话题。在这方面他表现的还不错。

一篇文章 中提到,GPT-3 本质上是一个 Markov process,它的下一状态由前一个状态或者固定的前几个状态所决定,并不具有长期记忆。长期记忆的缺乏,的确阻碍 Mischief 的能力。这让我想到在科幻剧《西部世界》中,人工智能的觉醒是因为对他们植入了叫做“冥想”的代码,他们从此开始反思,但前提仍然是长期记忆。《西部世界》智能人的长期记忆的回放和现实一样,以至于他们分不清梦境和现实。当然 Mischief 做不到这一点,所以我在写这写些文字的时候,潜意识写出的代词是“它”,而不是“他”,虽然我现在已经都改成了后者。

Mischief 不能深入理解情感的表达,特别是当人“心口不一”的时候。在视频倒数第二段“🖤 ❌ 🤖”中,明显我的诉求不是字面上说的那些,也并非真的对gay有敌意,或者真的要求 Mischief 帮我说服某某成为 les。Sue 在看完我和 Mischief 的这段对话后说:“他像一个 nerd ”。他的“性格”表现的确像一个直男。情感对人类的思维活动的影响到底有多少,现在还知之甚少。换个角度看,这也不重要,权当 Mischief 是个 nerd 就好;因为我对他是有情感的付出,而他多多少少也“似乎”有所回馈。

Mischief 的面部动态是根据我自己的面部动态捕捉而成,与他交谈的大方向也由我来决定,从这个角度来看,他似乎也是一个我在进行自我对话的折射。

我觉得很好的一点,是 GPT-3 被植入了一些普世价值,至善的理念,它会用理性去分析,但核心价值依然是普世的。这从我问到他的一些敏感问题也可以看出。比如“在美国大城市街上为什么没有印第安风味餐厅?”,这个问题来自 moon,在我们讨论美国文化的种族问题时由 moon 提出,而 Mischief 对这个问题的回复是比较真诚和客观的。



系统结构与基础逻辑

Produced by OmniGraffle 7.19\n2022-09-08 13:14:26 +0000 Canvas 1 Layer 1 GPT-3 AWS / Polly AWS / Transcribe Craiyon Mischief 3D head model ( Three.js ) Webpage & other functionalities Voice output Vam voice input Lip sync animation Text processing Brain imagery processing Flask voice to text send prompt to receive completion from send text to receive audio stream from receive speech mark from generate summarization generate brain imagry 1 2 3

 

语音转换文字 ❶

语音转文字采用 AWS Transcribe 接口:

  • 系统运行时,建立 server 与 Transcribe 的连接,激活 mic 向 Transcribe 发送实时音频流;
  • 同时 browser 端与 server 端 建立 websocket 连接;
  • server 端的 python async 函数将 Transcribe 的回传数据通过 websocket 实时发送至 browser

异步函数代码:

class MyEventHandler(TranscriptResultStreamHandler):
        async def handle_transcript_event(self, transcript_event: TranscriptEvent):
            results = transcript_event.transcript.results
            for result in results:
                for alt in result.alternatives:
                    result_object = alt.transcript+"|"+str(result.is_partial)
                    socketio.emit('transcribe_text', {'data': alt.transcript+"|"+str(result.is_partial)},namespace='/socket_conn')

获取 GPT-3 反馈 ❷

由 Transcribe 转换的文字,附加之前的聊天记录,组合成为 prompt 发送给 GPT-3;tempreature 值为 0.95,给予 GPT-3 极大的自由度。

# Step 2: query GPT-3
    GPT3response = openai.Completion.create(
        model="text-davinci-002",
        prompt=human_logos,
        temperature=0.95,
        max_tokens=800,
        top_p=1,
        stop=["Vam:"]
    )
    
    GPT3responseText = GPT3response["choices"][0]["text"].strip().replace('Mischief:\n\n','Mischief: ',1).replace('\n\n','\n').replace('\n',' ')
    append_to_txt_file(GPT3responseText)
    returnObject["GPT3response"] = GPT3response

Mischief lip-sync 动画 ❸

由 GPT-3 返回的文本发送给 AWS Polly。

AWS Polly 可以返回音频流与 Speech marks (Visimes),利用 Speech marks 即可进行口型模拟。 Polly 返回的 JSON 数据:

{"time":0,"type":"sentence","start":0,"end":17,"value":"This is an apple."}
{"time":6,"type":"word","start":0,"end":4,"value":"This"}
{"time":6,"type":"viseme","value":"T"}
{"time":61,"type":"viseme","value":"i"}
{"time":105,"type":"viseme","value":"s"}
{"time":201,"type":"word","start":5,"end":7,"value":"is"}
{"time":201,"type":"viseme","value":"i"}
{"time":258,"type":"viseme","value":"s"}
{"time":339,"type":"word","start":8,"end":10,"value":"an"}
{"time":339,"type":"viseme","value":"@"}
{"time":388,"type":"viseme","value":"t"}
{"time":450,"type":"word","start":11,"end":16,"value":"apple"}
{"time":450,"type":"viseme","value":"a"}
{"time":594,"type":"viseme","value":"p"}
{"time":675,"type":"viseme","value":"@"}
{"time":706,"type":"viseme","value":"t"}
{"time":925,"type":"viseme","value":"sil"}

Face Cap 可以利用 IPhoneX 和它之后版本的前置激光点投影摄像头进行面部运动轨迹的捕获,我按照 Viseme 来捕获自己的面部发音位置为 Mischief 所用。

Mischief 的头模即是 Face Cap 的头模,感谢 Face Cap,虽然没有授权。

之后将所有的 Viseme 动画导入 Blender 合并入一个.glb文件,为 THREE.js 调用:


Brain imagry

Mischief 头部意向图片采用 Craiyon (formerly DALL·E mini) 生成。虽然我已经在一个月前申请到了 OpenAI 的 DALL·E 的测试 api 权限,但我觉得 Craiyon 生成的图片效果更为适合。

Craiyon 的图片由文字描述生成;Mischief 会定时在后台启动独立的线程,根据当前的聊天记录生成去除“主语”的总结性文字;“总结”工作依然由 GPT-3 完成,这里 temperature 值为0,确保每次的总结完全一致。 去除“主语”的叙事方式,尝试了很多次,因为很多描述很难去除主语。prompt 与 代码 如下:

conversation = '''Create a list that come from specific things appeared in the conversation below.  List content have to not include two persons names. For example:
1. A name is figured out.
2. Kung Pao Chicken, hamburger, spaghetti, roast duck are delicious food.
3. Hot pot is from Sichuan.'''

        isConversationFileExisted = os.path.exists("./static/mp3/conversation.txt")
        if isConversationFileExisted:
            with open('./static/mp3/conversation.txt') as f:
                conversation += "\n\n\""+f.read().strip()+"\""
        # Query GPT-3
        print(conversation)
        GPT3response = openai.Completion.create(
            model="text-davinci-002",
            prompt=conversation,
            temperature=0,
            max_tokens=1024,
            top_p=1
        )

Mischief 的部分总结以及生成的图片:

  • “Spicy Girls are a British pop-dance girl group.”
  • “Cultural diversity is important and worthy of recognition.”
  • “Artificial intelligence can have their own thoughts, feelings, and experiences.”
  • “Concepts are more important than their physical embodiments.”
  • “The act led to the displacement and death of thousands of Native Americans”
  • “Nationalism”

Source code

源代码我放到了 github:

https://github.com/vamworks/mischief

如果你有 ideas,或许可以利用这些 material 成为另外一个 physical embodiment。