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

例如,如果我写“嘿,把红色的盒子给我”,**机器人并没有被编程为知道“嘿,把红色的盒子给我”是什么**。但句子相似度模型将这个命令与我们为机器人编程的“拿红色盒子”动作联系起来。
因此,多亏了这项技术,**我们可以构建可信的角色AI,而无需手动将所有可能的玩家输入互动映射到机器人响应的繁琐过程**。我们让句子相似度模型为我们完成这项工作!
什么是句子相似度?
句子相似度是一项任务,给定一个源句子和一组目标句子,**计算目标句子与源句子的相似程度**。

例如,如果我们的源句子(玩家命令)是“嘿,把红色的盒子给我”,它与动作列表中的“拿红色盒子”句子非常接近。

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

如果你想深入了解句子相似度任务,请查看此链接👉 https://huggingface.co/tasks/sentence-similarity
完整的流程
现在我们已经理解了句子相似度,**让我们看看整个流程:从玩家输入命令到机器人执行动作的那一刻**。

玩家输入命令:“你能把红色方块给我吗?”
机器人有一个动作列表:[“你好”, “开心”, “拿红色盒子”, “移到蓝色柱子”]
我们接下来要做的是将玩家输入的文本进行嵌入,**以便与机器人动作列表进行比较,从而找到最相似的动作(如果有的话)。**
为此,**我们对输入进行标记化**:Transformer 模型不能直接接收字符串作为输入。**它需要被翻译成数字。**这通过 Sharp Transformers 提供的分词器代码完成。
然后,将输入(标记化)传递给模型,**模型会输出此文本的嵌入**:一个捕获文本语义信息的向量。此推理部分由 Unity Sentis 完成。

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

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