1.灰度转换计算
ITU-R BT.709 标准加权系数 来对一个特定 RGB 颜色进行灰度转换计算
标准加权系数:
- \(a_1\) (Red, 红色) \(\approx 0.2126\)
- \(a_2\) (Green, 绿色) \(\approx 0.7152\)
- \(a_3\) (Blue, 蓝色) \(\approx 0.0722\)
- 公式: \(\rho = 0.2126 \cdot R + 0.7152 \cdot G + 0.0722 \cdot B\),四舍五入到最近的整数(在 $0 \sim 255$ 范围内)
色权重在 RGB 到灰度转换公式中占比如此之高(通常在 70% 左右,如 BT.709 标准中的 $0.7152$),主要是由人类视觉系统的生理结构决定的。人类的眼睛对绿色光最敏感,对蓝色光最不敏感。
转换公式的目的是让转换后的灰度值 (\(\rho\)) 最准确地代表人类视觉系统所感知到的亮度 (Luminance)。
绿色权重高是科学事实,它反映了人眼在感知亮度时对绿色光最敏感这一生理特性。
2.词袋到深度语义:自然语言处理中的文本表示与局限性
2.1向量空间模型(VSM)的基础构建
向量空间模型 (Vector Space Model, VSM), VSM 中的词频模型 (Term Frequency Model)中,统计文档 \(D\) 的向量 \(V_D\) 中的每个元素 \(V_D[i]\) 代表词汇表中的第 \(i\) 个词在文档 中出现的\(D\) 次数,记为 \(TF_{i, D}\)。
如果文档中 \(a\) 出现 5 次,\(b\) 出现 2 次,\(e\) 出现 1 次,\(f\) 出现 3 次,其余词汇未出现,那么文档向量为:
\[V_{D} = ( \stackrel{5}{a}, \stackrel{2}{b}, \stackrel{0}{c}, \stackrel{0}{d}, \stackrel{1}{e}, \stackrel{3}{f}, \stackrel{0}{g}, \stackrel{0}{h}, \stackrel{0}{i}, \stackrel{0}{j} )\]词袋模型 (BoW) 是对整个文档的表示方法,而 One-Hot 编码是词袋模型建立过程中,对单个词汇进行编码的基础技术。
可以说,One-Hot 编码提供了词汇到数字的映射基础,而词袋模型利用这种基础映射,将整个文本转化为一个特征向量。
2.2词袋模型的固有局限性
虽然词频模型比布尔模型有所改进,但它仍存在一个缺陷:它认为所有词汇的重要性都一样。但实际上,像“的”、“是”、“在”这样的常见词 (Stop Words) 即使频率很高,对文档主题的区分度却很低。
无论是布尔模型、纯词频 (TF) 模型,还是更高级的 TF-IDF 模型,它们都面临着一个共同的、主要的局限性,即:
向量空间模型 (VSM) 的主要局限性:缺乏顺序和结构信息
这种缺点被称为 “词袋模型” (Bag-of-Words, BoW) 的缺陷,因为这些模型将文档视为一个装满了词语的袋子,只关心袋子里面有什么词以及它们的数量,而完全忽略了词语出现的顺序和它们之间的语法结构。
比如“我借你钱” vs. “你借我钱”
在 TF 或 TF-IDF 模型中,这两个句子将产生完全相同的向量,因此在计算相似度时(例如通过余弦相似度),它们将被认为是完全相似的,但它们的语义是完全相反的。
再例如,“苹果”(Apple)可以指代手机品牌,也可以指代一种水果,这是自然语言处理中一个经典且核心的问题:歧义,即词义消歧 (Word Sense Disambiguation, WSD) 或更广义的多义性 (Polysemy) 问题。
在向量空间模型或词袋模型中,“苹果”这个词只有一个唯一的 ID 和一个向量维度。模型无法区分以下两种情况:
- “我买了苹果公司的最新手机。” (科技公司)
- “我喜欢吃红色的苹果。” (水果)
2.3解决顺序和语义缺陷的高级模型
为了克服这种顺序和结构的缺陷,信息检索和自然语言处理 (NLP) 领域发展出了更复杂的模型:
1.N-gram 模型 (部分解决语序)
- 思路: 不将文档的基本单元视为单个词,而是视为连续的 $N$ 个词的序列(例如,2-gram 或 bigram 是两个连续的词,3-gram 是三个连续的词)。
- 示例: 句子 “我借你钱” 将被视为 “我借”、”借你”、”你钱” 三个 N-gram。
- 句子 “你借我钱” 将被视为 “你借”、”借我”、”我钱” 三个 N-gram。
- 结果: 两个句子的 N-gram 集合不同,因此它们的向量也不同,相似度计算结果更合理。
- 缺点: 向量维度会爆炸式增长,计算和存储成本极高。
2.句法/语义模型 (Semantic Models)
这是更高级的 NLP 方法,目标是理解词语的真正含义和它们在句子中的角色:
- Word Embeddings (词嵌入,如 Word2Vec, GloVe): 将词语映射到低维连续向量空间,使语义相似的词在向量空间中距离相近。
- 基于深度学习的模型 (如 RNN, LSTM, Transformer): 这些模型(尤其是 Transformer 及其衍生的 BERT, GPT 等)通过注意力机制和序列编码,能够完全理解词语的顺序和它们之间的远距离依赖关系,从而捕捉到“我借你钱”和“你借我钱”的本质区别。
2.4解决词义歧义(WSD)的现代方法
解决多义性问题的方法
解决这种依赖于上下文的词义问题(歧义),需要模型能够理解词语所处的环境 (Context)。主要有以下几种方法:
1.基于知识库的方法 (Knowledge-Based Methods)
- 使用同义词典/语义网络: 利用人工构建的语义资源库,如 WordNet。
- 方法: 为每个词义定义其特征、同义词和上下文。当模型遇到“苹果”时,它会查看句子中其他词语(如“手机”、“吃”),然后根据预定义的语义关系选择最合适的词义。
2.基于上下文的方法 (Context-Based Methods)
这是现代 NLP 的主流方法,主要依赖于统计模型和机器学习:
- 词嵌入 (Word Embeddings) 的局限性: 传统的 Word2Vec 或 GloVe 模型为“苹果”只生成一个静态向量,无法区分多义性。
- 语境化词嵌入 (Contextualized Word Embeddings) — 解决问题的关键:
- 代表模型: BERT(来自 Google)、GPT(来自 OpenAI)等基于 Transformer 架构的模型。
- 思路: 这些模型为每个词生成的向量不再是固定的,而是动态的、随句子上下文变化的。
- 如何工作:
- 当输入 “我买了苹果手机” 时,BERT 会通过其内部的注意力机制,发现“苹果”与“手机”的关联性很高,从而生成一个倾向于“科技公司”的向量。
- 当输入 “我吃了红苹果” 时,模型会发现“苹果”与“吃”、“红”的关联性更高,从而生成一个倾向于“水果”的向量。
通过这种方式,同一个词语“苹果”在不同的句子中会有两个截然不同的向量表示,从而在后续的相似度计算或分类任务中被正确地识别为两个不同的语义实体。
3.聚类方法 (Clustering Methods)
- 思路: 将所有包含“苹果”的句子收集起来,然后利用机器学习算法根据周围的词语对其进行聚类。
- 结果: 句子可能会自然地分成两组:一组是关于科技和电子产品的,另一组是关于食物、农业和健康的。聚类中心就代表了“苹果”的两种不同词义。
要解决“苹果”的多义性问题,现代方法已经超越了简单的词袋计数,而是通过复杂的深度学习模型(例如 Transformer 架构),让计算机学会关注上下文,从而为同一个词在不同语境下生成独特的语境化向量,实现精确的词义消歧。
3.分析与比较:两种性别编码方法
用户画像(User Persona)构建中,对性别(Sex/Gender)这一特征进行数值化编码,有下面2种方法:
- 男 \([0] \quad\) 女 \([1]\) —–>标签编码 (Label Encoding)
- 男 \([0, 1] \quad\) 女 \([1, 0]\) —–>独热编码 (One-Hot Encoding)
这两种方法都属于将分类变量转化为数值变量的技术,以便输入到机器学习模型中进行训练和分析。
【标签编码】:引入了错误的序数关系(Order/Magnitude): 机器会将 $[1]$ 识别为比 $[0]$ “更大”或“更高”的值。
对于像性别这样的名义变量 (Nominal Variable)(即没有大小、顺序或等级之分的分类),这种编码会使模型误认为 “女” 比 “男” 更重要、更优越,或者存在某种数值上的顺序关系。这会扭曲模型对特征权重的学习。
【独热编码】:每个类别都用一个独立的维度表示,所有维度都是二进制(0 或 1)。模型无法从数值大小上推断出“男”和“女”之间有任何顺序或大小关系。确保了模型将“男”和“女”视为两个独立的、平等的类别特征。对于只有两个类别的性别特征,维度从 1 增加到了 2。在特征类别非常多的情况下,会导致特征空间维度膨胀。
- 结论:方法 ② 更好
在机器学习和数据分析中,对于名义分类变量(如性别、国家、职业类型等),方法 ② (独热编码) 是标准且更推荐的编码方法。
原因总结:
方法 ② (独热编码) 能够正确地处理名义变量,避免了方法 ① 错误引入数值上的序数关系,从而保证了机器学习模型能够更准确、无偏地学习该特征对预测目标的影响。
在您的例子中,虽然性别只有两种,用标签编码 (方法 ①) 也能跑通,但在处理多类别(如学历:小学、中学、大学、硕士)时,标签编码的问题会更加突出。独热编码是处理所有分类变量的安全做法。
用于减少维度的独热编码变体,即 虚拟编码(Dummy Coding)
虚拟编码是独热编码 (One-Hot Encoding)的一种变体,主要目的是在不损失信息的前提下,避免多重共线性 (Multicollinearity) 问题。
虚拟编码只使用 \(N-1\) 个特征维度来表示 $N$ 个类别。它省略了其中一个类别的维度,将这个被省略的类别作为基准 (Reference Category)。
- 如果所有 \(N-1\) 个维度的值都是 $0$,就意味着这个样本属于被省略的那个基准类别。
在统计回归模型中,如果特征之间存在精确的线性关系(例如:如果“男”是 \([1, 0]\),“女”是 \([0, 1]\),那么“女”就可以通过 \(1 - \text{“男”}\) 线性推导出来),这就会导致多重共线性,使得模型估计的系数不稳定。
虚拟编码通过丢弃一个维度来打破这种完美的线性关系。
假设我们仍有性别这一特征(\(N=2\) 个类别)。
类别 独热编码 (One-Hot) 虚拟编码 (Dummy Coding) 男 \([1, 0]\) \([0]\) 女 \([0, 1]\) \([1]\) 维度数 \(N=2\) \(N-1=1\) 假设有三个学历类别:小学、中学、大学。我们将“小学”设为基准类别。
类别 独热编码 (One-Hot) (N=3 维) 虚拟编码 (Dummy Coding) (N−1=2 维) 小学 \([1, 0, 0]\) \([0, 0]\) (基准类别) 中学 \([0, 1, 0]\) \([1, 0]\) (中学=1, 大学=0) 大学 \([0, 0, 1]\) \([0, 1]\) (中学=0, 大学=1) 虚拟编码在回归分析中特别常见,因为它能保持模型系数的可解释性(系数代表相对于基准类别的差异)。
4.处理连续特征(如年龄)的表示
在机器学习中,处理连续特征(如年龄)有多种表示方法,目标是提高模型的性能、稳定性和可解释性。
-
对于卖一定产品的人群来说,比如中年30-50岁,这群年龄的人更容易消费,所以0-29和51-100更不重要了。
-
其次,25岁和26岁,虽然只差一岁,但是没啥大的区别。
在电商场景中,往往利用离散化/分箱(Binning or Discretization)+ 独热编码处理年龄。
比如:
- 箱子 1: 0-18 岁(青少年) \(\rightarrow [1]\)
- 箱子 2: 19-35 岁(青年) \(\rightarrow [2]\)
- 箱子 3: 36-60 岁(中年) \(\rightarrow [3]\)
- 箱子 4: 61-100 岁(老年) \(\rightarrow [4]\)
基于此:
- 0-18 岁 \(\rightarrow [1, 0, 0, 0]\)
- 36-60 岁 \(\rightarrow [0, 0, 1, 0]\)
这种分法,边节点的选择非常重要。
为了缓和震荡,也可以这么划分:
- 0-18
- 15-35
- 30-55
- 50-100
这种划分策略在特征工程中被称为重叠分箱 (Overlapping Binning),主要目的是缓和分界点处的震荡和突变,提高模型的平滑度和鲁棒性。
5.二手车平台场景下的颜色编码问题
如果二手车平台要将汽车的颜色(如“绿”、“红”、“黑”)作为特征输入到机器学习模型中(例如,预测售价或用户偏好),\((0 \sim 255, 0 \sim 255, 0 \sim 255)\) 对应 \(R, G, B\),
这种基于 RGB 原始值比较的编码方法是不合适的。
原始 RGB 值是连续、感知且多维的,如果模型试图直接比较这些 RGB 向量,就会错误地引入数值上的大小关系。比如,在二手车交易中,“红色车”和“黑色车”只是两种不同的分类,它们之间没有数值大小、顺序或等级之分。模型可能会错误地认为 RGB 值高的车(例如,浅色或高亮度的车)在某些方面“更重要”或与目标变量有错误的数值关联,从而扭曲模型的学习。
对于“二手车颜色”这种名义分类变量(车的颜色其实就几种,没有特别多的类别),正确的机器学习表示方法应该是:独热编码,因为像之前讨论的性别编码一样,避免了在“绿”、“红”、“黑”之间引入错误的数值顺序或大小关系。
所以在处理特征的时候,一定要强烈地理解业务场景。
6.组合特征
电商场景下,2 位 (性别) + 4 位 (年龄)去刻画用户画像,考虑这样的场景,16-40岁的人购买力是10,对于女生购买力是15,但是年龄是16-40且女性,购买力飙升变成40。这就需要多个分类特征(性别和年龄)组合编码成一个向量,所以需要创建交叉特征 (Interaction Feature) 来捕捉特征组合的非线性效应。即引入第7位特征 \(X_{组合}\)。
\[X_{组合} = \begin{cases} 1 & \text{如果用户属于 “16-40 岁” 且为 “女性”} \\ 0 & \text{否则} \end{cases}\]原来的 6 位向量会扩展为 7 位。
当模型学习时,它会为这个新的交叉特征 \(X_{组合}\)分配一个巨大的权重 \(w_{组合}\)。
\[\text{购买力} \approx w_{\text{基线}} + \sum w_i \cdot X_i + \dots + w_{\text{组合}} \cdot X_{\text{组合}}\]- 对于普通的16-40岁男性, \(X_{组合}=0\),该权重项消失。
- 对于16-40岁的女性, \(X_{组合}=1\),模型会学习到一个很大的 值\(w_{组合}\),从而将最终的购买力预测值推高到40左右。
通过这种方式,成功地将两个特征的协同效应以线性项的方式引入到模型中,使模型能够精确地学习和预测特定用户群体的非线性高价值。
7.亿维特征问题
这种方法也有缺点,一个在互联网和大数据领域(尤其是推荐系统、广告系统、用户画像构建)中非常现实且棘手的问题:亿维特征 (Billion-Scale Feature Dimensions)
独热编码 (One-Hot Encoding)*和*特征交叉是维度爆炸的直接原因。
当遇到高基数特征(High Cardinality Feature,即特征的可能取值非常多)时,使用独热编码会立即引发维度爆炸。如果用户 ID 有1亿个取值,广告 ID 有10万个取值,那么它们的交叉特征维度就是 \(10^8 \times 10^5 = 10^{13}\)(十万亿),这远远超出了实际计算的能力范围。
训练数据和模型参数需要巨大的存储空间和分布式计算集群。即使维度很高,对于单个样本而言,大部分特征值仍为 0(高度稀疏),导致计算资源浪费。许多交叉特征可能在训练集中只出现过一两次,导致模型无法进行有效学习和泛化。
解决亿维特征问题的关键是:将高维稀疏的特征空间,压缩到低维密集的语义空间。
1.特征降维与嵌入(Embedding)—— 最核心的方法
这是现代推荐和广告系统中最常用的技术,灵感来源于词嵌入 (Word Embedding)。
- 方法: 不再对高基数 ID(如用户 ID、商品 ID)使用 One-Hot 编码,而是将每个 ID 映射到一个低维、密集的向量中。
- 示例: 一个1亿维的用户 ID 独热向量,被压缩成一个 64维或128维的密集向量(Embedding)。
- 优势: 既保留了每个 ID 的语义信息(向量空间中的距离代表相似性),又解决了维度爆炸和稀疏性问题。
2.特征哈希(Feature Hashing)
- 方法: 使用哈希函数将原始的高维特征空间映射到一个预先指定维度的低维空间中。
- 示例: 无论用户 ID 是 1亿还是 100 亿,都将其哈希到 \(10^5\) 维的向量中。
- 优势: 不占用额外内存存储哈希表,效率高。
- 缺点: 存在哈希碰撞(不同的特征可能被映射到相同的维度),会轻微损失模型精度。
3.自动化特征交叉(Factorization Machines & Deep Learning)
对于交叉特征,不再手动创建所有 \(A \times B\) 的组合特征:
- 因子分解机 (Factorization Machines, FM): 自动学习任意两个特征之间的隐式交叉权重。
- 深度神经网络 (Deep Learning, 如 Wide & Deep Model): 利用神经网络的多层结构,自动学习高阶、非线性的特征组合,无需人工显式创建交叉特征。
总结: 解决“亿维特征”问题的关键在于拥抱低维密集表示。通过 Embedding 技术处理高基数特征,结合 深度学习模型 或 FM 来实现特征的自动化交叉学习,是当前业界的主流解决方案。
8.复杂特征工程:多模态数据与特征提取
多模态输入
- Video (视频)
- Img (图像)
- Text (文本)
【视频/图像特征提取】
完成率: 视频播放进度指标。
数量: 可能是图片数量、视频时长、帧率等。
敏感信息: 这是一个业务相关的视觉标签(可能是用于吸引用户点击或计算内容风险),通过图像识别或目标检测模型提取。
清晰度: 图像或视频的质量指标,用于评估用户体验。
【文本特征提取】
章长度: 文本的基础统计特征。
[ one-hot 关键词 ]: 使用独热编码 (One-Hot) 或 布尔向量 来表示文章中是否包含特定的关键词,即使用高维稀疏向量表示。
[ 文章类别 ]: 文章所属的分类标签,也常使用独热编码。
在现代系统中,Video, Img, Text 更常用 Embedding 向量(低维密集表示)来提取特征,而非完全依赖手动设计的统计特征或高维稀疏的 One-Hot 编码。
这些特征提取的方案一般都是强业务绑定的
特征工程不仅仅是数据处理,更是业务知识的数学化表达。
所以透彻的理解业务是做好AI的关键。
应用场景涵盖了电商、短视频、金融、医疗等众多领域。首先,我们需要结合领域知识 (Domain Knowledge),与产品经理、业务分析师深度协作,将这些场景中复杂、多样的业务概念和用户行为,转化为机器可理解的数值特征。这个过程的最终目标是构建一个统一、标准化的特征向量(即‘屏蔽掉场景差异的向量’)。这个向量的核心是用低维、密集的语义表示(如 Embedding)来替代高维、稀疏的原始特征。最终,这个通用化的特征向量被送入模型进行训练。模型通过学习特征与目标变量之间的复杂关系,得出适用于跨场景或特定场景的预测结果(如推荐、风控评分或点击率)。
即,分成3个阶段:
- 特征工程阶段:涉及到人工特征工程 (Hand-crafted Features),需要利用领域专家知识,定义具有高区分度的特征,并通过分箱、标准化、标签编码等方式将业务概念转化为数值。
- 特征表示阶段:变成一个向量(一个屏蔽掉场景差异的向量),这个过程称为特征统一化或通用特征表示。关键是使用 Embedding 技术。即使是不同的场景,如果用户行为模式相似,其 Embedding 向量也会在语义空间中靠近,从而“屏蔽掉场景差异”。
- 模型应用阶段:训练的目的是让模型学习特征向量中的权重和交互关系。最终结果是模型对目标变量(如 \(P(\text{Click})\)、LTV、违约风险)的概率或数值预测。
以上是传统模型的AI的工作过程。
深度学习自动化了传统特征工程的一部分,但引入了新的、更抽象的特征工程任务。
在深度学习框架下,特征工程的任务转变为对模型输入和架构的设计
对于表格数据(如用户ID、年龄、地区),深度学习仍然需要:
- 独热编码/分箱: 虽然最终会被嵌入层处理,但原始特征的离散化和规范化是必要的。
- 特征归一化/标准化: 对连续特征(如年龄、收入),标准化(如 Z-score)仍是提高模型收敛速度和稳定性的标准步骤。
- 创建 Embedding 特征: 这是深度学习特有的、最重要的“特征工程”。需要决定:
- 哪些 ID 需要被 Embedding?(如 User ID, Item ID)
- Embedding 的维度是多少?(如 64 维还是 128 维)
- Embedding 是共享还是独立?(如所有商品的颜色特征共享一个 Embedding 矩阵)
虽然模型可以自动学习交互,但在模型架构设计中,显式地引入重要的交叉特征依然能提升性能(即 Wide & Deep 模型中的 Wide 部分)。
在处理用户行为序列或时间序列时,特征工程尤为关键:
- 序列截断/填充: 确定序列的最大长度,并进行填充(Padding)或截断(Truncation)。
- 位置编码 (Positional Encoding): 在 Transformer 模型中,必须手动将位置信息编码为特征向量,以便模型理解词语的顺序。
- 时间特征: 将时间戳转化为机器可学习的特征,如 “星期几”、“小时”、“是否为周末” 等。
深度学习要求工程师将精力投入到高层抽象、稀疏 ID 的 Embedding 化,以及模型结构的优化上。