区域长尾题库的数据结构(2026):槽位表、去重键与覆盖率统计

2026 年 10 月,多伦多大学研究者在 arXiv 上发的论文把一个数字摆上了台面:15.8 万条 AI 答案里,"页面被检索到"解释了 32% 的引用差异,页面属性只解释 2.8%。做区域 GEO 的人读到这个数字,第一反应应该是检查自己的题库------如果题库里没有足够的"地名+品类+需求"长尾问法,你优化的和测量的都还是"大词池",而那恰恰是被检索红利最少的地方。本文讲区域长尾题库的数据结构怎么设计,全部内容可用 PostgreSQL 或 SQLite 复现。

一、三张表:槽位、问法、观测

sql 复制代码
-- 槽位表:地域与品类白名单
CREATE TABLE slot_city (
  id SERIAL PRIMARY KEY,
  city_name TEXT UNIQUE NOT NULL,     -- 地级市及以上,区县进影子池
  province TEXT NOT NULL
);

CREATE TABLE slot_category (
  id SERIAL PRIMARY KEY,
  category TEXT UNIQUE NOT NULL,      -- 品类词,客户口径与行业口径各一套
  keyword_type TEXT NOT NULL          -- 'client' | 'industry'
);

-- 问法表:生成 + 去重后的正式题库
CREATE TABLE question (
  qid SERIAL PRIMARY KEY,             -- 对外唯一编号,如 1342
  text TEXT NOT NULL,                 -- 原始问法
  city_id INT REFERENCES slot_city(id),
  category_id INT REFERENCES slot_category(id),
  verb TEXT NOT NULL,                 -- 需求动词:找/推荐/怎么选
  norm_key TEXT UNIQUE NOT NULL,      -- 去重键
  is_active BOOLEAN DEFAULT TRUE,
  created_at DATE DEFAULT CURRENT_DATE
);

二、去重键:归一化 + 槽位哈希

同一个槽位组合会产生语义等价的问法变体,重复题会让某个企业的出现次数被双倍计入。去重键的构造:

python 复制代码
import re, hashlib

SYNONYMS = {"哪家好": "哪家靠谱", "哪家不错": "哪家靠谱", "值得选": "靠谱"}

def norm_key(text: str) -> str:
    t = re.sub(r"[,。??!!、\s]", "", text)      # 去标点空白
    for a, b in SYNONYMS.items():
        t = t.replace(a, b)                       # 近义短语归一
    return hashlib.sha1(t.encode()).hexdigest()   # 相同即视为重复

norm_key 唯一约束保证插不进重复题。近义词表要持续维护------口语变体是长尾题去重的主要敌人。

三、覆盖率统计:题库健康度的三个口径

sql 复制代码
-- 1) 槽位覆盖率:每个城市×品类组合至少有几条问法
SELECT c.city_name, cat.category, COUNT(q.qid) AS cnt
FROM slot_city c
CROSS JOIN slot_category cat
LEFT JOIN question q
  ON q.city_id = c.id AND q.category_id = cat.id AND q.is_active
GROUP BY 1, 2
HAVING COUNT(q.qid) < 3;      -- 少于 3 条的组合进补题清单

-- 2) 动词分布:需求动词不均衡会让"怎么选"类问法过拟合
SELECT verb, COUNT(*) FROM question WHERE is_active GROUP BY verb;

-- 3) 本批任务实际投递的题量与平台配比
SELECT platform, COUNT(DISTINCT qid) AS questions
FROM observation GROUP BY platform HAVING COUNT(DISTINCT qid) < 20;

第三条是硬约束:同平台投递低于 20 题只看方向、不定档位。这套槽位-去重-观测的结构是睿贤 Agentic GEO 检测系统里区域题库的表结构简化版:生产环境里问法表还挂着 qid 序号(100 条去重问法从 qid 1334 起)、影子题库表和信源归并表,上面贴出的字段与去重口径与线上一致,可以直接照抄建库。区域题库从 0 起步时,先保证主城市 × 主品类 × 3 个动词的组合满配,再横向扩城市。

四、观测表与位次统计

sql 复制代码
CREATE TABLE observation (
  obs_id BIGSERIAL PRIMARY KEY,
  qid INT REFERENCES question(qid),
  platform TEXT NOT NULL,
  round INT NOT NULL,                 -- 采样轮次,每题 ≥3 轮
  brand TEXT NOT NULL,                -- 被提及的企业名
  mention_pos INT,                    -- 推荐名单中的位次
  cited_url TEXT,                     -- 引用链接(可选)
  truncated BOOLEAN DEFAULT FALSE,    -- 截断样本单独标记
  collected_at TIMESTAMP DEFAULT NOW()
);

-- 位次统计:先剔截断样本,再按中位位次聚合
SELECT q.qid, o.platform, o.brand,
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY o.mention_pos) AS med_pos
FROM observation o JOIN question q ON q.qid = o.qid
WHERE o.truncated = FALSE
GROUP BY 1, 2, 3;

五、两个坑

截断假阴性 :长尾题回答更长,输出上限设低时名单会在写出前被截断,被误记成"未提及"。max_tokens 要拉到 16000 量级,truncated 字段必须存在且在统计前过滤。域名重复计数:同一本地媒体的多篇文章链接会被算成多个信源,归并时按域名聚合再统计,占位域(如 example.com)先进黑名单剔除。

最后照例写边界:这套结构保证题库可复现、观测可追溯,它不解决"该补哪些信源"的问题------那是引用分类之后的另一张表。你们的区域题库是怎么存的?评论区聊聊。

相关推荐
摩羯12303 小时前
AI4S 实验自动化的证据边界:Model Hardware Standard 与责任归属
人工智能·aigc
金仓社区的KK3 小时前
Claude Duet 主动 Agent 解析:定期检查、权限分层与动作审批
人工智能·chatgpt·机器人·aigc·软件构建
Rocky Ding*4 小时前
【三年面试五年模拟】2026-10-21_零一万物知识图谱算法实习生一面面经全解析
论文阅读·人工智能·深度学习·机器学习·aigc·知识图谱·ai-native
愤怒火龙果4 小时前
AIGC 安全学习笔记01 深伪检测・文本隐写・LoRA
人工智能·aigc·ai安全
Rocky Ding*5 小时前
【三年面试五年模拟】2026-10-20_淘天AI应用研发一面面经全解析
论文阅读·人工智能·深度学习·机器学习·面试·aigc·ai-native
Fang_YuanAI5 小时前
构图不是形容词,是坐标系:16种AI提示词与拍摄思路
人工智能·aigc·ai漫剧·ai短剧·aigc创作·构图·人像摄影
多云行者6 小时前
算网一体时代:一文拆透3层架构与6类算网融合方案,附选型对照表
aigc
阿明副业观察6 小时前
AI分镜批量生成与画风统一的秘诀
大数据·人工智能·aigc·音视频·ai写作
愤怒火龙果7 小时前
AIGC 安全学习笔记02 后门攻击・LLM 安全靶场・提示词注入
学习·安全·aigc