用户热搜词相似度计算
2015-11-10 17:46
260 查看
公司实习需要做用户热搜词相似度计算以为用户搜索推荐提供相关信息,主要使用了两种算法实现词相似度计算:LDA和Word2Vector(参考spark algorithm)
(目前Word2Vector算法效果更好,LDA对于词频较高的词会发生结果中出现次数过多的情况)
算法所需数据来源:
1.商品信息。
2.用户搜索历史记录。
3.标准词表,用来补充搜索历史记录以提升结果精度。
4.停止词表。
数据预处理:
由于直接对商品分词效果非常差,因此使用搜索历史、标准词表和停止词表结合的方式将商品信息转为为词向量。
对Deal_infos信息处理过程为:
通过停止表过滤搜索历史表加标准词表中的词,其它过滤条件代码如下:
private val wordTable: Set[String] = if (searchLogPath.isEmpty) {
Set.empty[String]
} else {
//根据停止表清洗搜索词表
val stopWords = sc.textFile(stopWordPath).collect()
//获取搜索关键词
val searchLog = sc.textFile(searchLogPath).map { f =>
f.split("\\|")(0)
}
//标准词
val standardWord = sc.textFile(standardWordPath)
val allWords = searchLog.++(standardWord).collect()
val result = new ArrayBuffer[String]()
for (line <- allWords) {
if (!stopWords.contains(line)
&& line.length > 1
&& !line.matches("[0-9]+[.]*[0-9]*")
&& !line.endsWith("元")) {
if (line.matches("[a-z|A-Z|0-9]+")) {
if (line.length > 3) {
result += line
}
} else {
result += line
}
}
}
result.toSet
}
然后将过滤后的词表和商品信息做匹配,使用存在于商品信息中的词作为该商品的关键词。
算法上线后模块用户点击率大幅提升(与没有推荐算法相比提升3~4倍),效果良好。
(目前Word2Vector算法效果更好,LDA对于词频较高的词会发生结果中出现次数过多的情况)
算法所需数据来源:
1.商品信息。
2.用户搜索历史记录。
3.标准词表,用来补充搜索历史记录以提升结果精度。
4.停止词表。
数据预处理:
由于直接对商品分词效果非常差,因此使用搜索历史、标准词表和停止词表结合的方式将商品信息转为为词向量。
对Deal_infos信息处理过程为:
通过停止表过滤搜索历史表加标准词表中的词,其它过滤条件代码如下:
private val wordTable: Set[String] = if (searchLogPath.isEmpty) {
Set.empty[String]
} else {
//根据停止表清洗搜索词表
val stopWords = sc.textFile(stopWordPath).collect()
//获取搜索关键词
val searchLog = sc.textFile(searchLogPath).map { f =>
f.split("\\|")(0)
}
//标准词
val standardWord = sc.textFile(standardWordPath)
val allWords = searchLog.++(standardWord).collect()
val result = new ArrayBuffer[String]()
for (line <- allWords) {
if (!stopWords.contains(line)
&& line.length > 1
&& !line.matches("[0-9]+[.]*[0-9]*")
&& !line.endsWith("元")) {
if (line.matches("[a-z|A-Z|0-9]+")) {
if (line.length > 3) {
result += line
}
} else {
result += line
}
}
}
result.toSet
}
然后将过滤后的词表和商品信息做匹配,使用存在于商品信息中的词作为该商品的关键词。
算法上线后模块用户点击率大幅提升(与没有推荐算法相比提升3~4倍),效果良好。
相关文章推荐
- PhotoView 单击退出
- node-创建模块
- Oracle自增列创建方法
- LocalBroadcastManager—创建更高效、更安全的广播
- 通过Spring配置文件中bean中的property赋值
- 02 (maven+SSH)之需求分析
- python基础-内置数据类型
- 辛星浅析rails server监听机器外部机器无法访问的问题
- LocalBroadcastManager—创建更高效、更安全的广播
- Nginx实战之让用户通过用户名密码认证访问web站点
- Linux 本地yum源搭建和网络yum源搭建
- 九度oj-1483-求最大最小数
- 【leetcode】Maximum Subarray
- 03(maven+SSH)之数据库设计(PMD)
- Java中subList的问题
- 离职谈话
- Node.js、express、mongodb 实现分页查询、条件搜索
- Javascript获取最近若干个月
- 04(maven+SSH)之maven热部署
- Spring注解详解