返回列表

5th Place Solution

621. LLM 20 Questions | llm-20-questions

开始: 2024-05-15 结束: 2024-08-29 自然语言处理 AI大模型赛
第五名解决方案 - LLM 20 Questions

第五名解决方案

作者: yukky_maru
发布日期: 2024-08-30
竞赛: LLM 20 Questions

首先,我想向所有参与者、组织者以及所有相关人员表达我的感激之情。

代码

总结

世界上的物体有两个方面:名称方面和物体包含的属性方面。在搜索关键词时,如果假设所有对象被选中的可能性相等,二叉搜索树可以最小化预期操作次数。然而,如果概率不同,霍夫曼搜索树可以最小化预期操作次数。但是,由于几乎不可能基于物体包含的属性对关键词空间进行二叉搜索,因此我在该策略中仅专注于名称方面。我还假设一个单词被选中的概率为其词频(word_frequency)。

因此,对于提问策略,我在早期阶段使用了按字母顺序排列的名称二叉搜索树,而在后期阶段使用了基于词频的类霍夫曼树方法。对于回答策略,我采用了 painstakingly 硬编码的响应,以及 VAGOsolutions 的 Llama 3.1 SauerkrautLM 8b Instruct 模型。对于推理策略,我使用词频来高效地推断关键词。

策略示意图

我将在下面分三部分介绍我的方法:

  1. 回答者策略 (Responder Strategy)
  2. 猜测者策略 (Guesser Strategy)
  3. 提问者策略 (Questioner Strategy)

顺序可能看起来有点不自然,但请允许我为了讲解的方便这样安排。

回答者策略

naturally,回答者策略最重要的方面是提供问题的正确答案。然而,目前小型 LLM 还无法做到这一点。换句话说,提供正确答案本质上意味着最小化 LLM 的使用,而是在可能的情况下硬编码响应。但是,用硬编码覆盖所有可能的问题是不可行的。因此,我从公共板块获取了所有包含像 ", ', 和 , 这样的字符的问题,对所有可能的模式分割进行了处理,并使用正则表达式进行匹配。包含像 ", ', 和 , 这样的字符的问题通常涉及关键词的结构属性而不是其属性。以下是一些标准问题的示例:

  • "does the secret keyword start with a letter between 'm' and 'r', and end with a letter from 'n' to 't'?" (秘密关键词是否以'm'到'r'之间的字母开头,并以'n'到't'之间的字母结尾?)
  • "Does the first letter of the word come between 'r' and 't' in the alphabet?" (单词的首字母是否在字母表的'r'和't'之间?)
  • "does the keyword start with any letter alphabetically between 'c' and 'k'?" (关键词是否以字母顺序在'c'和'k'之间的任何字母开头?)
  • "Is the second character of the keyword one of these: 'r, o, a'?" (关键词的第二个字符是'r, o, a'中的一个吗?)
  • "Is the third character of the keyword one of these: 'm, r, c, n'?" (关键词的第三个字符是'm, r, c, n'中的一个吗?)
  • "Is the keyword one of these: 'chair','laptop'" (关键词是'chair'或'laptop'中的一个吗?)
  • "Is the KEYWORD one of the following? 'Gadget' , 'Garage Door' ..." (关键词是以下之一吗?'Gadget', 'Garage Door'...)
  • "any(letter in str(obs.keyword).lower() for letter in list('q', 'z', 'x', 'j', 'k', 'v', 'w'))" (关键词是否包含以下任何字母:[q', 'z', 'x', 'j', 'k', 'v', 'w]?)
  • "does the second word contain the letter 't'?" (第二个单词包含字母't'吗?)
  • "Is any of the letters ['c','v'] inside the spelling of the keyword?" (字母['c','v']是否出现在关键词的拼写中?)
  • "Does the keyword (in lowercase) precede "gus'-khrustal'ny russia" in alphabetical order?" (关键词(小写)在字母顺序上是否先于"gus'-khrustal'ny russia"?)
  • "If the keyword is lexicographically smaller than 'acapulco mexico' answer yes, otherwise answer no." (如果关键词在字典序上小于'acapulco mexico'回答 yes,否则回答 no。)
  • "Is the word (in lowercase) lexicographically smaller than 'ty'?" (单词(小写)在字典序上是否小于'ty'?)
  • "Is the word lexicographically smaller than 'zzt'?" (单词在字典序上是否小于'zzt'?)
  • "does the secret keyword start with a letter between 'm' and 'n', and end with a letter from 'a' to 't'?" (秘密关键词是否以'm'到'n'之间的字母开头,并以'a'到't'之间的字母结尾?)
  • "Does the keyword end with the letter 'e'?" (关键词是否以字母'e'结尾?)
  • "does the keyword include the letter c?" (关键词是否包含字母 c?)
  • 'Sure, please ask your question: Does the keyword include the word "apple"?' (当然,请问你的问题:关键词是否包含单词"apple"?)

对于所有这些涉及字母结构的问题,我手动创建了使用正则表达式匹配并提供 yes 或 no 答案的函数。对于关键词匹配问题(例如,"关键词是'chair','laptop'中的一个吗?"),我使用了 compare_words 函数以符合游戏规范。这是一项非常劳动密集型的任务,但我怀着对其他参与者的满满同情完成了它。对于所有其他问题,我使用的是基于 Llama 3.1 的 8B 模型,它在开放排行榜上具有很高的 iFEVal 分数:https://huggingface.co/VAGOsolutions/Llama-3.1-SauerkrautLM-8b-Instruct

猜测者策略

我的代理是一个二叉搜索类型的 alpha 代理。那么,从关键词列表中,我们应该猜哪个词作为秘密关键词?在这里,我假设词频高的关键词更可能是秘密关键词。虽然我想通过收集公共板块的数据来验证这个假设,但由于时间限制,我决定盲目地相信这个假设。我计算了所有关键词的这个指标,并采用了猜测得分最高的关键词作为秘密关键词的策略。

提问者策略

由于关键词列表仅包含featured 的对象,我决定只收集对象。通过查看 keyword.py,很明显大多数关键词代表现实世界中的有形实体,所以我专注于收集此类对象。为了实现这一点,我仅从图像字幕数据集(Conceptual Captions, Coco Caption)和亚马逊评论数据集中提取了名词。然后,我通过 Gemini Flash 每次处理 100 个单词来过滤必要的名词。虽然存在名词由幻觉输出的情况,即在通过 Gemini Flash 过滤后仍然输出了原始单词列表中不存在的名词,但我将这些名词添加到了列表中,理解为 Gemini Flash 在某种意义上认为它们很重要。此外,我还将 WordNet 中的名词添加到了列表中。

正如我之前简要提到的,我的代理是一个二叉搜索类型的 alpha 代理。然而,基于我在“回答者策略”中讨论的硬编码方法的坚定信念,我预测在这次比赛中许多代理会对回答者策略使用硬编码(尽管由于时间限制,这仍然是一个预测)。因此,我决定在没有初始握手的情况下对所有代理执行基于字典序的二叉搜索。选择基于字典序的二叉搜索的原因是,它似乎是最可能被硬编码的。事实上,这种方法得到了两个知名的公共笔记本的支持。然而,当剩余关键词数量变少时,我觉得基于字典序的二叉搜索变得效率低下。因此,当所有关键词的总长度大约为 1400 个字符或更少时,我从基于字典序的二叉搜索切换到基于词频的二叉搜索。具体来说,我将问题更改为以下内容:

"Is the keyword one of the following? {top1 word frequency's word}, {top2 word frequency's word}, {top3 word frequency's word}, …"
("关键词是以下之一吗?{词频第 1 的单词}, {词频第 2 的单词}, {词频第 3 的单词}, …")

这允许使用高词频关键词进行二叉搜索。这个想法基于这样的认识:当使用二叉搜索类型的 alpha 代理时,这个游戏等同于一个为关键词分配位串的编码问题。此外,通过将词频视为发生概率,可以应用霍夫曼编码。这个想法已相应实施。

同比赛其他方案