用于推荐系统的生成式 AI:用户交互数据标记化指南

社区文章 发布于2025年3月26日

大型语言模型 (LLM) 和其他生成式 AI 模型,特别是那些基于 Transformer 架构 [Vaswani et al., 2017] 的模型,在理解和生成序列数据(主要是文本)方面表现出惊人的能力。但如果我们能将这种能力应用于其他类型的序列呢?用户交互数据——我们留下的点击、浏览、搜索和购买的数字面包屑——本质上是序列化的。我们能否通过将这些交互表示为标记来训练生成模型理解和预测用户行为?

答案是肯定的。通过仔细标记异构用户交互数据,我们可以释放生成模型的能力,用于以下任务:

  • 下一代推荐系统:预测用户可能交互或购买的下一个项目。
  • 个性化用户体验:生成定制内容或界面调整。
  • 深度用户行为理解:发现复杂模式和用户旅程原型。
  • 合成数据生成:创建真实的用户会话,用于测试或训练下游模型。

这篇博文提供了一个实用指南,介绍如何对用户交互数据进行标记化,以用于大型生成式 AI 模型,通常是在此特定数据类型上对现有 LLM 进行微调或从头开始训练基于 Transformer 的模型。

1. 定义和收集原始数据:用户交互

在标记化之前,你需要正确的数据。用户交互包括用户在你的数字环境中采取的任何操作。常见示例包括:

  • 内容交互:页面浏览、文章阅读、视频观看(包括时长)、音乐收听。
  • 电子商务行为:产品浏览、点击、添加到购物车、添加到愿望清单、购买、类别浏览。
  • 搜索活动:输入的搜索查询。
  • 参与度:评分、评论、点赞、分享、按钮点击。
  • 隐式信号:悬停时间、滚动深度。

有效的数据收集至关重要。每个事件都应记录关键信息:

  • user_id:用户的唯一标识符(为保护隐私,可进行匿名化或假名化)。
  • session_id:将单个访问中的操作分组。
  • timestamp:事件的精确时间(对于排序至关重要)。
  • event_type:定义操作的类别(例如,viewclickpurchase)。
  • item_id:(如果适用)特定产品、文章、视频等的标识符。
  • context:其他相关元数据,如设备类型、位置(务必谨慎处理隐私问题)、搜索查询文本、项目类别、价格等。

道德考量:始终将用户隐私放在首位。尽可能匿名化数据,删除个人身份信息 (PII),并遵守数据保护法规(如 GDPR、CCPA)。注意历史交互数据中可能存在的偏见 [Chen et al., 2023]。

2. 预处理:从原始日志到有序序列

原始日志需要精炼:

  • 清洗:过滤掉噪声(例如,机器人流量、错误事件),处理缺失值。
  • 会话化:user_idsession_id 对事件进行分组,然后按 timestamp 按时间顺序排序。定义逻辑会话边界(例如,30 分钟不活动)。长用户历史记录可能需要拆分为可管理的子序列。基于会话的推荐工作突出了此步骤的重要性 [Hidasi et al., 2016]。
  • 特征工程(可选但有帮助):派生新特征,如事件之间经过的时间、一周中的某天,或将价格等数值特征分类到不同的区间中。
  • 结构化:将数据组织成每个用户或会话的按时间顺序排列的事件序列。
    • 示例:[会话开始 -> 浏览商品 A -> 添加商品 A -> 搜索 "查询文本" -> 浏览商品 B -> 购买商品 B -> 会话结束]

3. 核心挑战:统一标记化策略

这是我们弥合结构化交互数据与 Transformer 模型期望的基于标记的输入之间差距的地方。与自然语言不同,用户交互序列是异构的,包含项目 ID、事件类型、类别、文本和可能的数值。

最常见和最灵活的方法是创建带特殊标记的统一词汇表

  • 构建词汇表:为你希望模型理解的每个不同元素分配一个唯一的整数 ID(标记)。

    • 项目 (item_id):每个唯一的产品、文章、视频等都获得自己的标记。item_123 -> 5001item_456 -> 5002。鉴于可能有数百万个项目,你可能需要将其限制为特定交互频率以上的项目,或者在词汇表过大时使用哈希等技术。
    • 事件类型 (event_type):view -> 101click -> 102purchase -> 103
    • 分类特征:category_electronics -> 201device_mobile -> 301
    • 文本(搜索查询、评论):使用标准子词标记器(BPE、WordPiece、SentencePiece)——出色的 Hugging Face tokenizers 库非常适合此目的 [HF Tokenizers Docs]。在你的文本数据(查询、评论)上训练它,并将生成的子词标记添加到你的主词汇表中。search query "sci-fi novels" 可能变成 sci ##-fi novels 标记。
    • 数值/时间特征:离散化(分箱)连续值,如价格或事件之间的时间差。为每个分箱分配一个标记。time_delta_0-10s -> 401price_$10-$50 -> 451
    • 特殊控制标记:这些对于结构和模型处理至关重要:
      • <PAD>:用于将序列填充到固定长度。
      • <UNK>:用于训练后遇到的未知项目/特征(或不频繁的项目/特征)。
      • <SESSION_START>, <SESSION_END>:用于划分会话。
      • <USER_START>, <USER_END>:(可选)用于划分属于单个用户在多个会话中的序列。
      • <SEP>:分隔标记,可能用于单个交互事件的不同组件之间(例如,项目及其类别之间)或事件类型与项目之间。
      • 表示特征类型的标记,例如,<QUERY><CATEGORY><TIME_DELTA>
  • 标记化序列:根据你构建的词汇表,将每个预处理的交互序列转换为其对应的整数标记 ID 序列。

概念标记化示例

  • 交互事件:(时间戳: T1, 事件: 浏览, 商品: 123, 类别: 图书)
  • 可能的标记化表示:[<ITEM_ID_123>, <EVENT_VIEW>, <CATEGORY_BOOKS>]
    • (或者可能包含与上一个事件的时间差) [<TIME_DELTA_BIN_X>, <ITEM_ID_123>, <EVENT_VIEW>, <CATEGORY_BOOKS>]
  • 完整会话序列
    • 原始:[浏览商品 123 (图书), 15秒后, 搜索 "科幻", 5秒后, 点击商品 456 (图书)]
    • 标记化(示例):[<SESSION_START>, <ITEM_ID_123>, <EVENT_VIEW>, <CAT_BOOKS>, <TIME_DELTA_10-20s>, <QUERY>, sci, ##-fi, <SEP>, <ITEM_ID_456>, <EVENT_CLICK>, <CAT_BOOKS>, <TIME_DELTA_0-10s>, <SESSION_END>]
    • 实际输入(ID):[1, 5123, 101, 205, 402, 600, 15001, 15008, 10, 5456, 102, 205, 401, 2](示例 ID)

在应用 Transformer 模型时,一些序列推荐工作已经隐含地使用了类似的标记化思想 [Kang & McAuley, 2018; Sun et al., 2019]。

4. 格式化模型输入

Transformer 模型通常期望固定大小的输入:

  • 填充和截断:使用 <PAD> 标记 ID 填充较短的序列,使其达到最大序列长度。截断较长的序列(通常保留最近的交互)。
  • 注意力掩码:创建与输入序列长度相同的二进制掩码(1 和 0 的序列)。真实标记(包括 <SESSION_START> 等特殊标记)使用 1,<PAD> 标记使用 0。这会告诉模型的自注意力机制忽略填充。
  • 输入字典:为模型构建数据结构,通常使用 Hugging Face transformers 等库所期望的字典:
# Example format
{
    "input_ids": [1, 5123, ..., 401, 2, 2, 2], # Padded token IDs
    "attention_mask": [1, 1, ..., 1, 0, 0, 0]  # 1 for real tokens, 0 for padding
    # "labels": [5123, 101, ..., 2, -100, -100, -100] # Often input_ids shifted for next-token prediction, ignore padding/inputs in loss
}

资源:查看 Hugging Face Data Collators,如 DataCollatorForLanguageModeling,以处理填充和标签偏移 [HF Data Collator Docs]。

5. 训练生成式 AI 模型

在你的数据被标记化和格式化后,你可以训练模型:

  • 模型选择:标准 Transformer 架构(例如,GPT 风格的仅解码器模型,根据任务可能采用 T5 风格的编码器-解码器模型)在 transformers 中是极佳的选择。你可以微调预训练的 LLM 或从头开始训练。
  • 训练目标
    • 下一个标记预测(因果语言建模):这是最自然的匹配。模型学习根据所有前面的标记预测序列中的下一个标记(交互元素)。这直接建模了用户行为的序列性质。这类似于 GPT 等模型在文本上训练的方式 [Radford et al., 2019]。
    • 掩码建模(类似于 BERT/MLM):掩码序列中的一些标记,并训练模型根据双向上下文预测它们。这对于学习丰富的表示很有用,但对于预测未来的生成能力较弱。
    • 序列到序列:将“根据会话历史预测购买”等任务构建为输入-输出问题。
  • 训练:使用标准的深度学习框架(PyTorch、TensorFlow)和 Hugging Face 生态系统(transformersdatasetsaccelerate)。使用交叉熵损失进行预测目标的优化。
Generative AI Recommendation System

6. 挑战与考量

  • 可伸缩性:用户交互日志可能非常庞大。高效的数据管道(例如,使用 datasets)和分布式训练通常是必要的。
  • 词汇表大小:唯一项目的数量可能非常大。可能需要使用基于频率的截断、项目聚类或哈希嵌入等技术。
  • 冷启动:如何处理训练期间未见过的新用户或新项目?使用 <UNK> 标记、初始化新嵌入或元学习方法可以提供帮助。
  • 序列长度:非常长的用户历史记录可能超出模型容量。截断、总结旧历史记录或分层建模都是可选项。
  • 评估:离线评估通常使用保留交互的推荐指标(Recall@K、NDCG@K、MRR)[Jarvelin & Kekalainen, 2002]。困惑度可以衡量生成质量。在线 A/B 测试是衡量实际影响的黄金标准。
  • 时间动态:用户兴趣会漂移。明确地纳入时间特征(绝对时间、时间差)或使用对时间变化敏感的技术非常重要。

结论

对用户交互数据进行标记化,将其转换为强大的生成式 AI 模型可以理解和学习的格式。通过将点击、浏览、搜索和购买表示为标记序列,我们超越了简单的协同过滤或基于内容的方法。这种方法允许模型捕获用户行为中复杂的序列依赖关系,为更准确的预测、更深入的个性化和更丰富地理解用户旅程铺平道路。

尽管存在挑战,特别是在规模和词汇管理方面,但将尖端生成模型应用于用户交互数据的潜在收益是巨大的。工具和技术正在迅速发展,这使得对于任何处理用户数据的人来说,这是一个令人兴奋的前沿领域。

立即开始!

  • 探索 Hugging Face datasets 库,用于处理大型数据集。
  • 使用 tokenizers 库构建你的自定义统一词汇表。
  • 利用 transformers 库,在你新标记的序列上训练或微调 GPT-2、Llama 或 T5 等模型。

我们鼓励你进行实验并与社区分享你的发现!


参考文献

  • [Chen et al., 2023] Chen, J., Dong, H., Wang, X., Feng, F., Wang, M., & He, X. (2023)。推荐系统中的偏见与去偏:一项调查和未来方向。《ACM 信息系统汇刊 (TOIS)》。
  • [Hidasi et al., 2016] Hidasi, B., Karatzoglou, A., Baltrunas, L., & Tikk, D. (2016)。使用循环神经网络的基于会话的推荐。《ICLR》。(使用 RNN 进行序列感知推荐的开创性工作)。
  • [HF Data Collator Docs] Hugging Face 文档。数据校对器。https://huggingface.co/docs/transformers/main_classes/data_collator
  • [HF Tokenizers Docs] Hugging Face 文档。Tokenizers 库。https://huggingface.co/docs/tokenizers/index
  • [Jarvelin & Kekalainen, 2002] Järvelin, K., & Kekäläinen, J. (2002)。基于累积增益的 IR 技术评估。《ACM 信息系统汇刊 (TOIS)》。(NDCG 指标的基础)。
  • [Kang & McAuley, 2018] Kang, W. C., & McAuley, J. (2018)。自注意力序列推荐。《ICDM》。(引入 SASRec,使用注意力机制进行序列推荐)。
  • [Radford et al., 2019] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., & Sutskever, I. (2019)。语言模型是无监督多任务学习器。《OpenAI 博客》。(GPT-2 论文,展示了因果语言模型的能力)。
  • [Sun et al., 2019] Sun, F., Liu, J., Wu, J., Pei, C., Lin, X., Ou, W., & Jiang, P. (2019)。BERT4Rec:基于 Transformer 的双向编码器表示的序列推荐。《CIKM》。(将 BERT 类似的掩码建模应用于推荐)。
  • [Vaswani et al., 2017] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017)。Attention Is All You Need。《NeurIPS》。(引入了 Transformer 架构)。

社区

注册登录 以评论