ML for Games 课程文档
Sentence Similarity 🤖 的强大功能
并获得增强的文档体验
开始使用
Sentence Similarity 🤖 的强大功能
在深入制作演示之前,我们必须理解句子相似度及其工作原理。
这个游戏是如何运作的?
在这个游戏中,我们希望给予玩家更多的自由:不再仅仅通过点击按钮向机器人发出指令,我们希望他们通过文本与机器人互动。
机器人有一个动作列表,并使用句子相似度模型来选择最接近的动作(如果有),根据玩家的指令。

例如,如果我写“Hey, grab me the red box”,机器人并不知道“Hey, grab me the red box”是什么意思。但是句子相似度模型将此指令与我们为机器人编程的“bring red box”动作联系起来。
因此, благодаря этой технологии, 我们可以构建可信的角色 AI,而无需手动映射每个可能的玩家输入交互到机器人响应的繁琐过程。我们让句子相似度模型为我们完成这项工作!
什么是句子相似度?
句子相似度是一项任务,给定一个源句子和一组目标句子,计算目标句子与源句子的相似程度。

例如,如果我们的源句子(玩家指令)是“Hey grab me the red box”,它与动作列表中的“Bring red box”句子非常接近。

句子相似度模型将输入文本(如“Hello”)转换为向量(称为嵌入),这些向量捕捉语义信息。我们将此步骤称为嵌入。然后,我们使用余弦相似度计算它们有多接近(相似)。
我不会深入细节,但本质是:由于我们的句子相似度模型生成向量,我们可以计算两个向量之间角度的余弦值。结果越接近 1,这两个向量就越相似。

如果您想更深入地了解句子相似度任务,请查看这里 👉 https://huggingface.co/tasks/sentence-similarity
完整流程
现在我们理解了句子相似度,让我们看看整个流程:从玩家输入指令到机器人执行动作。

玩家输入指令:“Can you bring me the red cube?”(你能给我拿来红色立方体吗?)
机器人有一个动作列表 [“Hello”, “Happy”, “Bring red box”, “Move to blue pillar”]([“你好”,“高兴”,“拿红盒子”,“移动到蓝色柱子”])
我们接下来要做的是嵌入这个玩家输入文本,以便与机器人动作列表进行比较,找到最相似的动作(如果有)。
为了做到这一点,我们对输入进行分词:Transformer 模型不能将字符串作为输入。它需要被翻译成数字。这是使用 Sharp Transformers 提供的 Tokenizer 代码完成的。
然后,输入(分词后)被传递给模型,模型输出此文本的嵌入:一个捕捉文本语义信息的向量。这个推理部分由 Unity Sentis 完成。

现在我们可以将这个向量与其他向量(来自动作列表)使用余弦相似度进行比较。
我们选择具有最高相似度的动作,并获得相似度分数。
如果相似度分数 > 0.2,我们要求机器人执行该动作。
否则,我们要求机器人执行“我很困惑”的动画。因为给出的指令与动作列表差异太大(例如,如果玩家写了一些完全不相关的东西,比如“你喜欢兔子吗?”)。

为什么相似度分数阈值为 0.2?
这是一个阈值:如果相似度分数低于它,我们认为玩家的指令与可能的机器人动作列表差异太大。
这是通过测试不同的阈值分数发现的。
更重要的是,这不是一个固定的阈值,因为所有可能的机器人动作的相似度分数总和为 1。如果您向机器人动作列表添加更多动作,则必须降低此阈值。
现在我们了解了整个流程,您可能想知道如何运行这个 AI 模型。 在玩家的机器上还是远程运行? 以及两者之间的区别。 这是下一节的主题。
< > 在 GitHub 上更新