Press "Enter" to skip to content

推荐系统中多值特征的八大处理技巧

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

 

简介

 

在诸多数据处理的问题中,存在着一类特殊的特征–多值特征,该类特征常见的情形有:

 

论文的关键字描述信息;

 

商品信息的描述;

 

网站关键词;

 

其它情况;

 

那幺关于这些多值特征,该如何处理,都有哪些常见操作呢?本文我们介绍多值特征的8大处理技能,希望对大家有所启发和帮助。

 

 

Count

 

LabelEncoder

 

Multi One-Hot

 

CounterVector

 

TfidfVectorizer

 

Word2Vec

 

基础Multi-Value Embedding

 

加权Multi-Value Embedding

 

 

多值特征的处理

 

此处我们介绍几种最为常见的多值特征的处理技巧。

 

01

 

Count

 

即计算多值特征中有多少个值。

 

02

 

LabelEncoder

 

如果特征存在明显的聚集效应,很多多值特征组合在一起就是一个有意义的信息,例如,

 

文章关键词里面的:SVM|

 

商品里面的,女生|连衣裙;

 

等等,这些词组合在一起就是很有意义的一类信息,可以直接LabelEncoder进行编码;

 

03

 

Multi One-Hot

 

这个不用多说了,就是每个不同的值对应一列特征,出现了就是1没出现就是0。

 

 

04

 

CounterVector

 

CounterVector是One-Hot的扩展,统计了每个词在当前文本下的出现次数,如果每个关键词在当前的Multi-Value特征中都是唯一的值的时候,那幺CounterVector就和One-Hot等价。

 

05

 

TfidfVectorizer

 

TfidfVectorizer又可以认为是CounterVector的扩展,它还考虑了在上下问中文本的出现次数。

 

06

 

Word2Vec

 

先使用Word2Vec进行训练,得到每个词的词向量,再基于词向量做统计特征。

 

07

 

基础Multi-Value Embedding

 

对多值每个值进行emebdding之后,然后取对应的统计值进行concat得到最终的Multi-Value的表示。

 

 

08

 

加权Multi-Value Embedding

 

和基础的直接取均值最大最小值等统计特征不一样,此处我们自动学习每个embedding对应的权重,然后再进行加权得到最终的emebdding。

 

 

当然上面是最基础的一种加权策略,还有很多其它的策略,例如SENet等等。

 

 

代码

 

此处我们就列举下面几种常见的操作,

 

LabelEncoder

 

CountVectorizer(包含Multi One-Hot)

 

TfidfVectorizer

 

Word2Vec

 

其余的有兴趣的大家可以自己尝试。

 

01

 

LabelEncoder

 

from sklearn.preprocessing import LabelEncoder
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',]
vectorizer = LabelEncoder()
X = vectorizer.fit_transform(corpus)
X

 

array([3, 2, 0, 1])

 

02

 

CountVectorizer

 

Multi One-Hot是CountVectorizer的特例,此处就不再赘述。

 

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
X

 

<4x9 sparse matrix of type '<class 'numpy.int64'>'
with 21 stored elements in Compressed Sparse Row format>

 

03

 

TfidfVectorizer

 

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
X

 

<4x9 sparse matrix of type '<class 'numpy.float64'>'
with 21 stored elements in Compressed Sparse Row format>

 

04

 

Word2Vec

 

import numpy as np
import pandas as pd 
from gensim import models
def to_text_vector(txt, model):
    '''
        将文本txt转化为文本向量
    '''
    words = txt.split(',') 
    array = np.asarray([model.wv[w] for w in words if w in words],dtype='float32')   
    return array.mean(axis=0)
## 案例
sentences = ["1,2,3",'3,4,1','1,4,2']
model = models.Word2Vec(sentences, workers=8, min_count = 1,  vector_size = 10, window = 2)
to_text_vector(txt="1,2,3", model= model)

 

array([-0.03244876,  0.00847926, -0.01252694, -0.0171898 , -0.02409677,
       -0.01349981,  0.01097592,  0.01558573, -0.01085999, -0.0165647 ],
      dtype=float32)

 

适用问题

 

本文我们针对常见的多值特征问题,介绍了8大通用的处理策略。当然在多值特征等处理时,还需要注意:

 

如果多值特征和其它基于时间戳的特征等一起出现还需要特别注意很多衍生特征;

 

如果有多个关联的多值特征出现的时候的一些衍生特征;

 

参考文献

 

 

CountVectorizer

 

TfidfVectorizer

 

多值类别特征加入CTR预估模型的方法

 

https://github.com/DeepBlueAI/AutoSmart

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注