用户画像(三)|通过用户对不同文章的不同行为(浏览、点赞、评论、分享)提取用户标签

最近我们对我们平台的用户进行了一个用户标签提取,这中间的主要流程如下图3-1所示:

图3-1

一、梳理做用户画像需要的数据
用户画像是基于业务数据而进行的,如果前期没有考虑好这一点,那么在真正实操时会发现做分析需要的数据存在不同的业务表里面,甚至有些数据根本没有保存。所以,在做用户画像之前最需要做的事就是梳理清楚到底需要哪些数据,如果业务上没有保存,那么就增加保存,如果数据非常分散,最好是集中保存下,否则后面随着数据越来越大,从多个业务表里面汇总数据也是一个非常麻烦的事。
如上图,如果我们要获取的是用户点赞、评论、分享、浏览的数据,那么可以使用AOP把用户做这些请求的数据记录到一个日志里面。例如:

字段名 字段说明 示例
user_id 用户id 1
operation_type 行为类型 1-点赞、2-评论、3-分享、4-浏览
operation_content_id 内容idt 1
operation_time 操作时间 2018.4.17

接下来就是对内容id进行去重,可以直接使用Set去重,去重之后可以去内容表里面通过内容id获取到内容的URL地址,因为我们的内容是不保存在本地的,所以需要通过内容的URL去第三方平台拿信息。

二、通过URL获取内容的标题和正文
对于一篇文章来说,标题和正文是最有价值的,对于提取标签这个事来说,也是需要标题和正文的。提取的方式有很多,比如可以单独写针对不同平台的爬虫进行提取信息,但是这样的成本很大。为了保证提取的内容确实是正文,也不能简单的使用driver.find_element_by_xpath('//body').text的方式,因为这样取出来的数据有很多干扰信息,会把整个页面的所有信息都获取出来当作正文,包括推荐的内容,包括广告...页面上呈现的所有内容。代码如下:

# 爬取文章内容
driver = chrome_dirver()
driver.set_page_load_timeout(20)
# 假设文章的URL存放在article.json文件中
with open('article.json') as f:
    article = f.read()
    article = json.loads(article)
    for k, v in article.iteritems():
        try:
            article_id = k
            article_url = v
            driver.get(v)
            article_title = driver.title
            article_info = driver.find_element_by_xpath('//body').text
            # 这里已经获取到文章标题和正文   
        except Exception as e:
            print e
            continue
    driver.close()
    driver.quit()

GitHub上有牛人写了一个基于行块分布函数的通用网页正文抽取算法的Python版本。我们通过测试发现准确性是还可以的,GitHub地址https://github.com/chrislinan/cx-extractor-python

三、通过百度的自然语言算法AipNlp计算出所有文章的标签及对应权重
获取到文章的标题和正文之后,就是需要提取这篇文章的标签以及标签的权重。当然我们可以自己使用开源的分词算法,但是如果没有“词语-有效标签”的库,就是把文章的分词做好之后也很难提取有效的标签。我们这边考虑的是使用百度的自然语言算法AipNlp来帮助我们做这个事。为什么使用百度云,而不使用腾讯云或者阿里云?因为腾讯的“词语-有效标签”库偏社交,阿里的“词语-有效标签”偏电商,百度就是库是最全的。
使用百度云中的自然语言处理SDK很简单,可以直接查看他的SDK文档,有Python、Java、PHP、Node各种语言的。
例如使用Java的,先增加maven依赖:

<dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>${version}</version>
</dependency>

再就是使用,最简单的样例如下:

public class Sample {
    //设置APPID/AK/SK
    public static final String APP_ID = "你的 App ID";
    public static final String API_KEY = "你的 Api Key";
    public static final String SECRET_KEY = "你的 Secret Key";

    public static void main(String[] args) {
        // 初始化一个AipNlp
        AipNlp client = new AipNlp(APP_ID, API_KEY, SECRET_KEY);

        // 调用接口
        String title = "一面APP是一款非常有意思的社交APP";
        String content = "一面是一款基于文字、视频、图片的形式,网罗各类资讯、音乐、运动、旅行、周边生活信息、打折促销等内容的社交平台。在一面上,你可以创建各种类型的主题,和家人、恋人、朋友、同事、同学、邻居、同伴等一起订阅专属信息。真正做到关心你关心的人关心的一切,让内容共享温暖我们的社交关系。";

        JSONObject res = client.keyword(title, content);
    }
}

Body请求示例:

{
    "title":"一面APP是一款非常有意思的社交APP",
    "content": "一面是一款基于文字、视频、图片的形式,网罗各类资讯、音乐、运动、旅行、周边生活信息、打折促销等内容的社交平台。在一面上,你可以创建各种类型的主题,和家人、恋人、朋友、同事、同学、邻居、同伴等一起订阅专属信息。真正做到关心你关心的人关心的一切,让内容共享温暖我们的社交关系。"
}

返回示例:

{
    "log_id": 4457308639853058292,
    "items": [
        {
            "score": 0.997762,
            "tag": "社交"
        },
        {
            "score": 0.861775,
            "tag": "资讯"
        },
        {
            "score": 0.845657,
            "tag": "订阅"
        }
    ]
}

四、通过用户、行为类型、文章的关系,计算出每个用户的标签及权重
例如:点赞权重为0.8、评论权重为0.9、分享权重为1.0、浏览权重为0.3。那就是根据这个用户对哪些文章以何种行为进行了关联,把该文章的标签关联到这个用户上即可,具体的算法我在用户画像(一)|计划制定讲过,大致如下:

3.6、总结
综合上述分析,用户画像的数据模型,可以概括为下面的公式:
用户标识 + 时间 + 行为类型 + 接触点(网址+内容)
某用户因为在什么时间、某个地点、对某个对象,做了什么事。所以会打上XX标签。
用户标签的权重可能随时间的增加而衰减,因此定义时间为衰减因子r,行为类型、网址决定了权重,内容决定了标签,进一步转换为公式:
标签权重=衰减因子×行为权重×位置权重
当然,很多时候标签本身也是有权重的。
如:用户A,昨天在发现频道浏览“2018年必看惊悚恐怖片之一:XXX电影”的主题内容。
我们为这个内容打的标签为:恐怖 0.6,电影 0.8
时间:因为是昨天的行为,假设衰减因子为:r=0.95
行为类型:浏览行为记为权重1
地点:在发现频道为 0.6(相比在我的-我创建的主题中的0.9)
则用户偏好标签是:电影,权重是0.95*0.6 * 1=0.57,即,用户A:恐怖 0.57、电影 0.57。最后再乘以标签自己的权重。

上述模型权重值的选取只是举例参考,具体的权重值需要根据业务需求二次建模,这里强调的是如何从整体思考,去构建用户画像模型,进而能够逐步细化模型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容