0%

我们就可以针对性的对一个产品搭建出一个个性化推荐模型,在这个模型中,我们需要解决两个问题:

  • 第一推荐什么。
  • 第二哪些内容应该优先推荐。

上两篇文章很好的给出了具体的算法参考,大家可以回顾。

在进入这篇文章的正题之前,我们先一起解决上篇文章遗留的问题:

  1. 依据上面的公式,最后的分值 P 是不是会变成负数?比喻 08 年北京的奥运会的某篇报道……

  2. 很多 App 上的文章都有转发、收藏、点赞等功能,那么有这些因素存在后,算法该怎么调整?

阅读全文 »

  1. CF 协同过滤推荐算法原理
    1.1 概述
    什么是协同过滤 (Collaborative Filtering, 简称 CF)?
    首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?
    大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
阅读全文 »

推荐系统整体架构图


基于内容的推荐


基于内容的推荐是基础的推荐策略。如果你浏览或购买过某种类型的内容,则给你推荐这种类型下的其他内容。

以电影推荐为例。比如你之前看过《盗梦空间》,则系统会关联数据库中盗梦空间的信息。系统会推荐克里斯托弗 · 诺兰导演的其他作品,比如《致命魔术》;系统会推荐主演里昂纳多的其他作品,比如《第十一小时》。

阅读全文 »

热度算法

前言

在产品、运营这次做社区改版的过程中,我们 AILAB 部门结合具体的业务细节,通过研究、讨论与试错,最终设计了一个基本符合需求的内容热度值算法,本文就简述其设计方法。

他山之石

有为数很少的几家外国公司开源或公开说明了自家的内容热度值算法,包括 Hacker News、Reddit、Stack Overflow/Stack Exchange、StumbleUpon 等。我们在设计自己的算法之前,参考了他们的一些理念。为了节省篇幅,就不再重复讲一遍了,直接将 reference 传送门放在下面:

阅读全文 »

main.dart

废话不多说 直接上代码 😃

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import 'package:flutter/material.dart';
import 'package:flutter_demo/provider/main_provider.dart';
import 'package:provider/provider.dart';

void main() {
runApp(MaterialApp(
title: 'demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
//定义作用区间 只绘制顶层home
home: MultiProvider(
providers: [
ChangeNotifierProvider(builder: (_) => MainProvider()),
],
child: Home(),
),
));
}

class Home extends StatefulWidget {
@override
_HomeState createState() => new _HomeState();
}

class _HomeState extends State<Home> {
// int curNum = 0;
int curNum;

@override
void initState() {
super.initState();
//TODO
}

void add() {
setState(() {
curNum += 1;
});
//TODO
}

void minus() {
setState(() {
curNum -= 1;
});
//TODO
}

@override
Widget build(BuildContext context) {
//定义provider 实例化
MainProvider provider = Provider.of<MainProvider>(context);
curNum = provider.curNum;
return new Scaffold(
appBar: new AppBar(
title: new Text('demo'),
),
body: Column(
children: <Widget>[
Add(),
// Add(
// add: add,
// ),
Container(
child: Text(
'$curNum',
style: TextStyle(fontSize: 30),
),
),
Minus(),
// Minus(
// minus: minus,
// ),
],
),
);
}
}

class Minus extends StatelessWidget {
const Minus({
Key key,
// this.minus,
}) : super(key: key);
// final int curNum;
// final VoidCallback minus;
@override
Widget build(BuildContext context) {
MainProvider provider = Provider.of<MainProvider>(context);
return Container(
child: Container(
child: FlatButton(
child: Text(
'-',
style: TextStyle(fontSize: 30),
),
onPressed: () {
provider.minus();
},
),
),
);
}
}

class Add extends StatelessWidget {
const Add({
Key key,
// this.add,
}) : super(key: key);
// final int curNum;
// final VoidCallback add;
@override
Widget build(BuildContext context) {
MainProvider provider = Provider.of<MainProvider>(context);
return Container(
child: Container(
child: FlatButton(
child: Text(
'+',
style: TextStyle(fontSize: 30),
),
onPressed: () {
provider.add();
},
),
),
);
}
}
阅读全文 »

前言 faiss 简介

三月初,Facebook AI Research(FAIR)开源了一个名为 Faiss 的库,Faiss 主要用于有效的相似性搜索(Similarity Search)和稠密矢量聚类(Clustering of dense vectors),包含了在任何大小的矢量集合里进行搜索的算法。Faiss 上矢量集合的大小甚至可以大到装不进 RAM。这个库基本上是用 C++ 实现的,带有可选的通过 CUDA 提供的 GPU 支持,以及一个可选的 Python 接口。

阅读全文 »

基于分词标签的中文短文本相似度

最近接触到了一些关于中文短文本相似度的算法,将它们总结在此:

  • 中文编辑距离
  • 基于词频的余弦相似度
  • simhash

1.0 在相似度算法之前的分词处理

在比较两个字符串 str1 和 str2 之前,我们需要对它们进行分词处理,分词后变成两组标签(我认为分词后的标签具有原子性,不可再分),基于标签,我们可以很容易地进行两组数据的相似度比较。
优点:标签的频率以及相对的位置关系确实一定程度可以表示出重要性和时序关系。
缺点:中文编辑距离(时序关系),余弦相似度(标签重要性), 他们没有直接的连接。
本项目基于 jieba 分词。

阅读全文 »

uiautomator2 是一个 python 库,用于 Android 的 UI 自动化测试,其底层基于 Google uiautomator,Google 提供的 uiautomator 库可以获取屏幕上任意一个 APP 的任意一个控件属性,并对其进行任意操作

python-uiautomator2 封装了谷歌自带的 uiautomator2 测试框架,提供便利的 python 接口。他允许测试人员直接在 PC 上编写 Python 的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。

阅读全文 »