【免费下载链接】MatrAIx_Persona_1M
MatrAIx_Persona_1M 是一套包含 999,847 个人物画像(persona)的大规模分类属性数据集,每人拥有 1,290 个稀疏分类属性。要正确读取它,关键在于理解null_bitmap(缺失位图)与attribute_overrides(码本外覆盖值)这两个字段——本文用最短路径带你避开最常见的两个坑。
数据长什么样:1,290 个属性的"压缩饼干"
这套数据集把每个人物的 1,290 个属性压缩成 645 字节的 4-bit 编码(nibble 打包,低位优先)。整套数据只有4.17 GB,切成 10 个 Zstandard 压缩的 Parquet 分片:
- 数据分片:data/persona-1m-0000.parquet 到 data/persona-1m-0009.parquet
- 码本(codebook):persona_codes.schema.json,共 1,290 个字段,每个字段列出其合法取值
- 行/字节数/哈希清单:manifest.json
数据是高度稀疏的:平均每行只填充约 656 个属性(约 51%)。比如age_bracket只在约五分之一行中出现,而 Amazon 来源的画像平均只有 16 个属性,synthetic来源则 990 个全满(见 README.md 的分来源统计表)。
⚠️ 注意:官方明确说
datasets库打不开这些文件,需要用pyarrow读取并对照码本解码。datasets只能打开 sample/sample.parquet 这个已解码的 999 行样本——它不是完整数据,只是 Dataset Viewer 的展示用预览。
null_bitmap 正确用法:位 = 1 代表"缺失"
null_bitmap是一个按字段索引排列的位图,规则只有三条:
规则一:位被置 1,说明该属性缺失
官方解码逻辑(见 README.md)核心就是这一句判断:
# bit 置 1 = 该位置属性缺失(missing),直接跳过 if (null_bitmap[i // 8] >> (i % 8)) & 1: continue这和很多"0 表示空"的直觉相反——在这里置位代表缺失。
规则二:LSB 优先,别数错位
第i个属性的缺失位在第i // 8字节、第i % 8位上,低位(LSB)优先。数错位序会导致"明明有位为 1 却当成有效值"的解码错位。
规则三:null 位图 = 一行都不缺
如果某行的null_bitmap本身是 null,代表这一行没有任何缺失(典型如synthetic来源的完整合成画像)。处理时不能假定它一定是个空数组,否则会误判所有属性都缺失。
attribute_overrides:码本装不下时的"更正值"
码本 persona_codes.schema.json 里每个字段的取值是封闭列表。但真实数据里有些值落在这个列表之外(例如自由文本、跨walk映射产生的新类别),这些精确值就存放在attribute_overrides列里。
它的使用规则只有一条,但非常关键:
attribute_overrides优先于解码出的 code。
即:先解码attributes,再检查该行attribute_overrides中是否对同一字段给了精确值;若有,用覆盖值替换解码结果。顺序反了,码本外的那部分数据就会丢失。
三条实战规则速记 📌
- 用
.get(),不要用[...]。行是稀疏的,某字段大概率不在结果里,直接取键会抛KeyError。 - 缺失 ≠ 0,也 ≠ 未赋值。缺失表示"来源数据不支持该字段",官方不做任何插补(imputation)。做统计时必须区分"值为 A"和"值未知"两种情况。
- overrides 最后生效。解码 → 检查位图 → 应用覆盖,顺序不能乱。
不扫 4GB 也能筛选:postings 索引
想"找出所有region= East Asia 的行"时,没必要全量扫描 10 个分片。数据集自带倒排索引:
- indexes/postings.sqlite:把每个字段取值映射到拥有它的全局行号列表(共 10,617 个 posting key)
- indexes/manifest.json:记录每个分片的
rowStart/rowCount,用全局行号就能算出该读哪个 parquet 分片、第几行
典型流程:查 sqlite 拿行号 → 按分片偏移定位 → 用null_bitmap+attribute_overrides规则解码该行。
常见错误自检清单
| 错误做法 | 后果 | 正确做法 |
|---|---|---|
用datasets.load_dataset直接打开 data/ 分片 | 文件根本打不开 | 用pyarrow+ 码本解码 |
| 把位图为 1 当成"有值" | 大量脏数据 | 置位 = 缺失,跳过 |
对稀疏字段用row["age_bracket"] | KeyError | 用.get() |
忽略attribute_overrides | 码本外的值被静默丢弃 | 覆盖值最后一步应用 |
| 把 Viewer 里 999 行当成全量 | 统计偏差 1000 倍 | 全量是 999,847 行 |
相关资源
- 数据集说明与解码示例:README.md
- 字段码本与打包规范:persona_codes.schema.json
- 分片行数/字节/SHA-256 清单:manifest.json
- 倒排索引及其分片偏移:indexes/postings.sqlite、indexes/manifest.json
- 校准目标与实际达成:calibration_targets.json、audit.json、RESULTS.md
最后提醒:该数据集仅限非商业研究使用,且"human-grounded"不等于"已验证"——Wiki/Amazon/Stack Overflow 等来源的属性来自模型抽取,可能带抽取误差。做研究结论前,务必保留字段级grounding中的置信度信息。
【免费下载链接】MatrAIx_Persona_1M
相关推荐
如何用一句话改图:FLUX.1 Kontext 图像编辑实战指南
如何用一句话改图:FLUX.1 Kontext 图像编辑实战指南 想把商品图上的 Logo 换成自己品牌、给图里的人换个发色,或者连续多轮编辑同一张图还不"跑偏
人工智能大模型本地部署媒体生成Voyager 提示词库(Prompt Library)实战指南:从捕获、分类到斜杠一键部署,让提示词在任何网站复用
Voyager 提示词库(Prompt Library)实战指南:从捕获、分类到斜杠一键部署,让提示词在任何网站复用 导读:本指南围绕 Voyager 扩展的「
AI 应用前端插件系统提示工程MXNet RowSparseNDArray 实战:行稀疏格式与稀疏梯度更新指南
MXNet RowSparseNDArray 实战:行稀疏格式与稀疏梯度更新指南 本指南以 MXNet 官方教程 row_sparse.md https://l
深度学习机器学习人工智能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考