news 2025/12/25 19:00:19

使用 GloVe 嵌入破解《代号》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 GloVe 嵌入破解《代号》

原文:towardsdatascience.com/hacking-codenames-with-glove-embeddings-0cf928af0858?source=collection_archive---------7-----------------------#2024-07-16

使用基于 GloVe 嵌入的算法,在流行派对游戏《代号》中实现 100%的准确性。

https://jiangzh.medium.com/?source=post_page---byline--0cf928af0858--------------------------------https://towardsdatascience.com/?source=post_page---byline--0cf928af0858-------------------------------- Zhiheng Jiang

·发表于数据科学之路·阅读时间 7 分钟·2024 年 7 月 16 日

介绍

代号是一个流行的派对游戏,适合两队,每队由两名玩家组成,每队包括一个间谍主人和一个操作员。每队在游戏板上会被分配一定数量的词卡。在每轮游戏中,间谍主人给出一个词线索,并说明该线索对应的词卡数量。操作员需要猜测哪些词卡属于他/她的队伍。目标是间谍主人给出好的线索,使得操作员能够用较少的回合猜出所有的词卡,且在对方队伍之前完成。此外,还有一张“刺客”卡,操作员一旦猜中该卡,队伍将立即输掉游戏。

在这个项目中,我们将使用一种简单的词向量算法,利用机器学习中预训练的词向量,尽可能少的尝试次数来最大化我们解游戏的准确性。

以下是游戏板的示例:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ef91552569e8509704b3ca7648c0890c.png

间谍主人视图(图片来源:作者)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b4f8e55702cf738cf5afb1d412926980.png

操作员视图(图片来源:作者)

在间谍主人的卡片安排中,每张卡片的颜色代表红队、蓝队、中立(米色)和刺客卡(黑色)。

自动化间谍主人和操作员

我们将创建一个算法,它可以扮演间谍主人和操作员的角色,自动进行游戏。在一个包含 25 张卡片的游戏板上,会有 9 张“好”卡和 16 张“坏”卡(其中包括 1 张“刺客”卡)。

使用 GloVe 嵌入表示意义

为了使间谍头目能够给操作员提供好的线索,我们的模型需要能够理解每个词的含义。表示词义的一种流行方法是通过词嵌入。在这个任务中,我们将使用预训练的 GloVe 嵌入,其中每个词由一个 100 维的向量表示。

然后,我们使用余弦相似度来计算两个词之间的相似性,余弦相似度是两个向量的点积除以它们的模长:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cdac39603dd26713dca9dfbdad647b5c.png

图片来源:作者

操作员:解码算法

在每轮中,操作员接收到一个线索c,以及一个表示要猜测的词数的整数n。换句话说,操作员必须解码一个{c, n}对,并一次选择n个词,直到选择到错误词并结束该轮。

我们的解码器是一个直接贪婪算法:简单地根据与线索词c的余弦相似度对剩余的所有词进行排序,并根据相似度得分选择前n个词。

间谍头目:编码算法

在每轮中,基于剩余的“好”词和“坏”词,间谍头目必须选择n个词,并决定一个线索c给予操作员。我们在这里做出的假设是,间谍头目和操作员一致同意上面提到的解码策略,因此操作员会选择最优的{c, n}来最大化被选择的正确词的数量。

在这一点上,我们可以观察到线索c是一个信息瓶颈,因为它必须将n个词总结为一个单一的词c供操作员解码。编码后的线索的词向量与每个原始词向量位于同一个向量空间中。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4fcc5c4d51b44ad6289128c84d3ca814.png

编码器-解码器系统的机制(图片来源:作者)

生成线索候选词

词嵌入具有的特性使我们能够通过不同词向量的加法和减法来表示复合意义。给定“好”词集G和“坏”词集B,我们可以利用这个特性,通过计算标准化均值来获得“好”词的“平均”意义,参考“坏”词,其中“好”词向量相加,“坏”词向量相减。这个平均向量使我们能够生成线索候选词:

glove=api.load("glove-wiki-gigaword-100")good_words=[g_1,g_2,...,g_n]bad_words=[b_1,b_2,...,b_n]candidates=glove.most_similar(positive=good_words,negative=bad_words,topn=20)

负采样

由于“坏”词的数量通常超过“好”词的数量,我们进行负采样,通过随机采样与“好”词数量相等的“坏”词来计算我们的平均词向量。这还增加了生成线索时的随机性,从而提高了线索候选词的多样性。

在我们找到平均词向量后,我们使用 Gensim 中的most_similar()函数,根据余弦相似度从整个 GloVe 词汇表中获得与平均词向量最接近的单词。

评分函数

现在,我们有一种方法可以根据给定的n个单词生成线索候选c。然而,我们仍然需要决定选择哪个候选c,选择哪些n个单词,以及如何确定n

接下来,我们从剩余的k个“”单词中,按照k, k-1, …, 1 的顺序生成所有可能的单词组合,并为每个组合生成相应的线索词候选c,从k开始向回推。为了选择最佳的{c, n},我们通过解码算法对剩余的“好”单词的每个可能组合中的所有候选进行评分。然后,我们通过知道操作员将使用的策略,获得给定线索c时正确猜出的最大单词数量 count©。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0cd6af4e7a2d8b9295a2106e24ca4ea8.png

图片由作者提供

结果

在每局游戏中,从 一份包含 400 个常见 Codenames 单词的列表 中抽取 25 个单词。总体而言,经过 100 次实验,我们的方法能够 100%正确选择单词,在平均 1.98 回合内完成游戏,或者每回合 4.55 次猜测(对于 9 个正确单词),最多需要 2 回合。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/676819238b000e10030980d1d45ef3de.png

游戏进行时每回合的平均猜测次数(图片由作者提供)

换句话说,除少数例外情况外,这个算法几乎每局游戏都需要两回合,只有在一次回合中猜出所有单词时才会有例外。

让我们查看一下我们所做的线索和猜测的词嵌入分布示例。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a2aae26b63061bcc794fd17b6a7421e1.png

1 局游戏的词嵌入散点图,经过 PCA 降维(图片由作者提供)

尽管生成的线索确实在某种程度上提供了操作员最终正确猜出的单词的语义摘要,但这些线索与猜测之间的关系从人类的角度来看可能并不明显。使线索更易于解释的一种方法是限制每回合最大猜测次数,这样可以生成更接近猜测语义的线索。

尽管如此,我们的算法仍然促进了每个单词的良好聚类结果,以便我们的解码器能够通过提供接近目标单词的良好线索,帮助它正确地猜出更多的单词。

结论

总结来说,这种基于贪婪的 GloVe 算法在 Codenames 游戏中作为间谍首领和操作员都表现得很好,它提供了一种有效的方式通过线索和数字来编码和解码单词。

在我们的模型中,编码器和解码器共享一个共同的策略,这个策略的工作原理与共享加密密钥类似。一个可能的限制是,编码器和解码器分开使用时效果不佳,因为人类玩家可能无法有效地解读生成的线索。

理解词嵌入和向量操作背后的机制是开始自然语言处理的一个极好方式。看到简单的方法也能在语义聚类和分类任务中表现出色,确实很有趣。为了进一步提升游戏体验,可以考虑加入强化学习元素或训练自编码器以获得更好的结果。

Github 仓库:github.com/jzh001/codenames

参考文献

  1. Koyyalagunta, D., Sun, A., Draelos, R. L., & Rudin, C. (2021). 使用语言图和词嵌入玩 Codenames。人工智能研究期刊71,319–346.doi.org/10.1613/jair.1.12665

  2. Pennington, J., Socher, R., & Manning, C. (2014). Glove:用于词表示的全局向量。2014 年自然语言处理经验方法会议(EMNLP)论文集doi.org/10.3115/v1/d14-1162

  3. Li, Y., Yan, X., & Shaw, C. (2022). Codenames AIxueweiyan.github.io/codenames-ai-website/

  4. Friedman, D., & Panigrahi, A. (2021). Codenames 算法www.cs.princeton.edu/~smattw/Teaching/521FA21/FinalProjectReports/FriedmanPanigrahi.pdf

  5. Jaramillo, C., Charity, M., Canaan, R., & Togelius, J. (2020). 词自机器人:使用变换器进行 Codenames 游戏中的词关联。人工智能与互动数字娱乐会议论文集16(1),231–237.doi.org/10.1609/aiide.v16i1.7435

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 20:35:08

AI Agent的可解释性设计原则

AI Agent的可解释性设计原则关键词:AI Agent、可解释性、设计原则、透明度、责任性摘要:本文聚焦于AI Agent的可解释性设计原则。随着AI Agent在各个领域的广泛应用,其决策过程的可解释性变得至关重要。文章首先介绍了相关背景,包…

作者头像 李华
网站建设 2025/12/25 9:17:51

LobeChat监控指标采集方案:Prometheus+Grafana集成

LobeChat监控指标采集方案:PrometheusGrafana集成 在AI应用日益深入日常的今天,像LobeChat这样的智能对话平台已不再只是“能聊几句”的玩具,而是承载着真实业务逻辑的关键入口——从企业客服到个人助手,用户对响应速度、稳定性与…

作者头像 李华
网站建设 2025/12/17 2:31:49

[PM]十种项目管理方法详细介绍

十种项目管理方法详细介绍1. 瀑布模型 (Waterfall)方法概述瀑布模型是最传统的项目管理方法,由Winston Royce于1970年首次提出。该方法采用线性顺序的方式推进项目,将项目划分为多个不可重叠的阶段,每个阶段必须完成后才能进入下一阶段。典型…

作者头像 李华
网站建设 2025/12/17 2:30:57

森林生态系统藏着哪些秘密?R 语言带你分析结构、功能与稳定性,还有超炫可视化

森林作为地球上最重要的生态系统之一,其结构、功能与稳定性一直是生态学研究的核心议题。森林生态系统的物种组成、空间分布与多样性不仅决定了能量流动和物质循环的效率,也直接影响其抵御干扰和恢复平衡的能力。在全球气候变化与人类活动加剧的背景下&a…

作者头像 李华
网站建设 2025/12/17 2:30:23

云屋音视频 SDK 国产化适配:兼容自主系统、芯片,符合信创标准

云屋音视频 SDK:信创浪潮下的国产化适配先锋在当今时代,信创产业正呈现出蓬勃发展的态势,它已然成为推动我国科技自主创新、保障国家信息安全的核心力量。在这股信创浪潮中,云屋音视频 SDK 凭借其出色的国产化适配能力&#xff0c…

作者头像 李华
网站建设 2025/12/17 2:29:46

污水里重金属超标怎么办

在工业生产飞速发展的当下,污水排放问题日益严峻,其中重金属超标尤为令人担忧。重金属一旦进入水体,不仅会破坏生态平衡,还会通过食物链积累,后会威胁人类健康。那么,当污水里重金属超标时,我们…

作者头像 李华