句子相似性的力量 🤖
在深入制作演示之前,我们必须 **了解句子相似性及其工作原理**。
这个游戏是怎么玩的?
在这个游戏中,我们想 **让玩家拥有更多自由**:而不是通过简单地点击按钮来向机器人下达命令,我们希望他们能够通过文本与机器人进行互动。
机器人拥有一个动作列表,并 **使用句子相似性模型根据玩家的命令选择最接近的动作**(如果有)。
例如,如果我写:“嘿,帮我拿那个红色的盒子”,**机器人并没有被编程来了解“嘿,帮我拿那个红色的盒子”是什么意思**。但句子相似性模型将此命令与我们为机器人编程的“拿红色盒子”动作联系起来。
因此,借助这种技术,**我们可以构建可信的字符 AI,而无需手动将所有可能的玩家输入交互映射到机器人响应的繁琐过程**。我们让句子相似性模型为我们完成这项工作!
什么是句子相似性?
句子相似性是一项任务,它在给定源句子和一组目标句子的情况下,**计算目标句子与源句子的相似程度**。
例如,如果我们的源句子(玩家命令)是“嘿,帮我拿那个红色的盒子”,它与动作列表中的“拿红色盒子”句子非常接近。
句子相似性模型将输入文本(如“Hello”)转换为向量(称为嵌入),这些向量捕获语义信息。我们称此步骤为嵌入。然后,我们使用 **余弦相似度** 来计算它们之间的接近程度(相似程度)。
我不会深入细节,但本质是:由于我们的句子相似性模型生成向量,我们可以计算 **两个向量之间夹角的余弦。结果越接近 1,这两个向量就越相似。**
如果您想深入了解句子相似性任务,请查看此 👉 https://huggingface.co/tasks/sentence-similarity
完整的管道
既然我们了解了句子相似性,**让我们看一下整个管道:从玩家输入命令到机器人执行命令的整个过程。**
玩家输入命令:“你能帮我拿那个红色的方块吗?”
机器人有一个动作列表 [“你好”,“开心”,“拿红色盒子”,“移动到蓝色柱子”]。
然后,我们想要做的是将此玩家输入文本嵌入 **以便与机器人动作列表进行比较,以找到最相似的动作(如果有)。**
为此,**我们将输入进行标记化**:Transformer 模型无法将字符串作为输入。**它需要转换为数字。** 这是使用 Sharp Transformers 提供的标记器代码完成的。
然后,将输入(标记化)传递给模型 **它输出此文本的嵌入**:一个捕获文本语义信息的向量。此推理部分由 Unity Sentis 完成。
现在,我们可以使用 **余弦相似度** 将 **此向量与其他向量(来自动作列表)进行比较。**
我们选择 **相似度最高的动作** 并获得相似度得分。
如果相似度得分 > 0.2,**我们将要求机器人执行该动作。**
否则,我们将要求机器人执行“我很困惑”动画。由于给定的命令 **与动作列表相差太大**(如果玩家例如写了一些完全不相关的文字,如“你喜欢兔子吗?”,就会出现这种情况)。
为什么相似度得分阈值为 0.2?
这是一个阈值:如果相似度得分低于此阈值,**我们将认为玩家的命令与可能的机器人动作列表相差太大。**
它是通过 **测试** 不同的阈值得分找到的。
更重要的是,**这不是一个固定阈值**,因为所有可能的机器人动作的相似度得分之和为 1。**如果在机器人动作列表中添加更多动作,则必须降低此阈值**。
现在我们了解了整个管道,您可能会想知道 **如何运行此 AI 模型。** 在玩家的机器上还是远程运行?它们有什么区别?这是下一节的主题。
< > 更新 在 GitHub 上