使用文本挖掘实现站点个性化推荐

简介: 一条信息是否能够让用户感兴趣,主要取决于这条信息的内容是否是用户关注的内容。而将用户……

​​本文作者韦玮原创,转载请注明出处。

技术背景

一条信息是否能够让用户感兴趣,主要取决于这条信息的内容是否是用户关注的内容。而将用户感兴趣的信息推送给对应的用户,可以更好地发挥该信息的价值,否则,不仅对应信息的价值无法有效发挥,甚至会引起用户的情绪,因为如果用户对这条信息不感兴趣,那么这条信息对于该用户来说就相当于垃圾信息。

现在关键的问题是,如何判断出现有的信息中,哪些信息是用户感兴趣的信息,从而把这些用户可能感兴趣的信息推送给用户,这样对于用户来说,可以获取期望的内容,对于企业来说,这可以更好地获取商业利益。

比如,我们在使用今日头条的时候,你会发现推送过来的文章基本上都是我们感兴趣的文章,这些文章都是个性化推荐过来的。其实,如果我们可以将这项技术更好的利用,这可以改变更多领域。

可以想象,如果小说站点采用个性化推荐技术,那么当读者在读一本小说的时候,我们可以判断该读者的兴趣,并从小说库中选择出读者可能最感兴趣的小说,并将筛选出来的小说推荐给该读者,那么此时,对于读者和网站来说是双赢的,比如就读者而言,节省了小说筛选的成本,并且可以很方便地获得自己感兴趣的内容,就网站而言,将合适的内容推荐给合适的用户,更有利于用户的付费。除此之外,个性化推荐技术还可以应用到新闻站点、商城、视频站点等等方面。

在本篇文章中,我们将为大家讲解如何采用Python文本挖掘技术实现个性化推荐技术。

文本挖掘技术(Text Mining)简介

文本挖掘技术(Text Mining)是数据挖掘技术中的一种,简单来说,文本挖掘技术就是对现有的一些文本信息进行分析、处理等,从而提取或计算出一些有价值的信息供我们使用的一种技术。

而在这篇文章中,我们主要用到文本挖掘技术中的分词、文本相似度计算等技术,而文本相似度计算我们主要会采用TF-IDF算法,相关理论知识各位读者可以自行了解,本篇文章中主要会进行实战的讲解。

将文本挖掘技术(Text Mining)应用于个性推荐的思路

那么,我们如何将文本挖掘技术应用于个性推荐呢?

看起来这两者确实不太相关,但实际上这两者关系密切。

比如,我们可以这样实现个性推荐:

1、 首先,记录用户在网站中的行为,比如看了哪些文章、阅读了哪些小说等等行为。

2、 其次,将用户长时间观看的这些小说(以小说站点为例)数据提取出来,得到数据1(data1)。

3、 然后,将data1与站点内的所有小说数据分别进行文本相似度计算,最终筛选出相似度高的小说数据,比如取前两本相似度最高的小说,得到小说2(data2)、小说3(data3)。

4、 将data2、data3推荐给该用户。因为这两本小说用户目前长时间阅读的小说相似度最高,所以一般这两本小说与用户手头上这本小说的风格、类型会基本一致,所以,一般用户同样会对这两本小说感兴趣。

5、 对于其他用户,我们同样可以采用1-4的方式给其推荐相似度高的小说。

此时我们以小说站点为例讲解了用文本挖掘技术实现个性化推荐的思路,我们可以看到,关键点在于文本相似度的计算,其他站点的实现思路也可以参照该思路进行。

核心步骤

现在我们已经明确了个性化推荐需求的实现思路,接下来我们整理一下实现的核心步骤。

我们可以采用以下步骤进行(以小说站点为例,其他站点类似):

1、读取站点中所有小说数据

2、对要计算的多本小说数据分别进行分词

3、对要计算的多本小说数据分别整理成指定格式,方便后续进行计算

4、计算出词语的频率

5、(可选)过滤掉频率低的词语

6、通过语料库建立词典

7、读取用户当前关注的小说的数据

8、将用户当前关注的小说的数据通过doc2bow转化为稀疏向量

9、对稀疏向量进行进一步处理,得到新语料库

10、将新语料库通过tfidfmodel进行处理,得到tfidf

11、通过token2id得到特征数

12、稀疏矩阵相似度计算,从而建立索引

13、分别得到用户当前关注的小说与小说库中各小说的相似度结果

14、提取出相似度高的小说,推荐给该用户

实现过程

上面我们已经讲解了实践的核心步骤,接下来我们进行具体的实现,在此采用的开发语言是Python,需要的第三方库有:jieba、gensim,需要提前使用pip安装好,如下:

pip install jieba

pip install genism

首先我们假设一下情景(为了保证前后一致,同样以小说站点为例,其他类型站点参考即可),假如现在我们的服务器中有3本小说,分别是盗墓笔记(服务器中文件名为dmbj.html)、老九门(服务器中文件名为ljm.html)、鬼吹灯(服务器中文件名为gcd.html),现在读者正在看盗墓笔记,需要我们从老九门与鬼吹灯中(加入小说库中小说更多,计算方法也是一样的)推荐一本相似度高的小说给读者。

首先,我们需要读取站点中除读者当前正在阅读的这本小说之外的所有小说数据(当然也可以把读者正在阅读的这本小说读取一下,只不过这样的话后面的结果需要去除相似度为1的小说数据),如下所示:

 import urllib.request

 #读取老九门这本小说

d1=urllib.request.urlopen("http://127.0.0.1/ljm.html").read().decode("utf-8","ignore")

#读取鬼吹灯这本小说

d2=urllib.request.urlopen("http://127.0.0.1/gcd.html").read().decode("utf-8","ignore")

读取了小说数据之后,接下来我们需要对要计算的多本小说数据分别进行分词,在这里,我们会使用jieba库进行分词处理,如下所示:

import jieba

data1=jieba.cut(d1)

data2=jieba.cut(d2)

分词之后,我们需要对要计算的多本小说数据分别整理成指定格式,方便后续进行计算,如下所示:

data11=""

for item in data1:

    data11+=item+" "

data21=""

for item in data2:

    data21+=item+" "

docs=[data11,data21]

随后,我们需要计算出各词语的频数,如下所示:

tall=[[w1 for w1 in doc.split()]

for doc in docs]

from collections import defaultdict

frequency=defaultdict(int)

for text in tall:

for token in text:

frequency[token]+=1

统计出频数之后,我们可以过滤掉频率低的词语,当然这是在词语很多的情况下,如果本来就词语量有限,比如小说的内容非常少,那么此时我们就不需要过滤了。也就是说,是否需要过滤,主要取决于词语量的大小,若词语量大,连过滤之后分析效率会更高,若词语量过小,显然不应该再过滤,否则过滤之后的词语就更少了。具体过滤的方式如下,由于这几本小说的词语量很大,所以频数在25以下的词语我们都过滤掉了:

tall=[[token for token in text if frequency[token]>25]

for text in tall]

进行了词语的过滤之后,我们需要通过语料库建立词典,具体如下所示:

dictionary=corpora.Dictionary(tall)

接下来,我们需要读取用户当前关注的小说的数据,由于刚才我们假设的情景中,用户正在读盗墓笔记这本小说,所以此时我们需要加载盗墓笔记这本小说的数据,具体如下所示:

thisnoveldata=urllib.request.urlopen("http://127.0.0.1/dmbj.html").read().decode("utf-8","ignore")

data3=jieba.cut(thisnoveldata)

data31=""

for item in data3:

    data31+=item+" "

this_novel=data31

读取了用户当前关注的小说数据之后,我们可以将用户当前关注的小说的数据通过doc2bow转化为稀疏向量,具体如下所示:

new_vec=dictionary.doc2bow(this_novel.split())

随后,我们可以对稀疏向量进行进一步处理,得到新语料库,如下所示:

corpus=[dictionary.doc2bow(text) for text in tall]

得到新语料库之后,我们可以将新语料库通过tfidfmodel进行处理,得到tfidf:

tfidf=models.TfidfModel(corpus)

然后,可以通过token2id得到特征数,如下所示:

num=len(dictionary.token2id.keys())

得到特征数之后,通过SparseMatrixSimilarity进行稀疏矩阵相似度计算,从而建立索引:

index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=num)

接下来,我们分别得到用户当前关注的小说与小说库中各小说的相似度结果:

sim=index[tfidf[new_vec]]

此时,sim中就包含了对应的相似度计算结果,我们可以通过print(sim) 将该结果打印出来,得到的结果如下所示:

================= RESTART: D:\我的教学\Python \dmbj.py =================

Warning (from warnings module):

  File "D:\Python35\lib\site-packages\gensim\utils.py", line 840

    warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")

UserWarning: detected Windows; aliasing chunkize to chunkize_serial

Warning (from warnings module):

  File "D:\Python35\lib\site-packages\gensim\utils.py", line 1015

    warnings.warn("Pattern library is not installed, lemmatization won't be available.")

UserWarning: Pattern library is not installed, lemmatization won't be available.

Building prefix dict from the default dictionary ...

Loading model from cache C:\Users\me\AppData\Local\Temp\jieba.cache

Loading model cost 0.823 seconds.

Prefix dict has been built succesfully.

[ 0.12281458  0.36768654]

可以看到,此时盗墓笔记跟老九门的相似度为0.12,鬼吹灯的相似度为0.37。

最后,我们可以提取出相似度高的小说,推荐给该用户,显然此时我们会将鬼吹灯这本小说推送给当前的读者。

写在后面的话

在这篇文章中,我们以小说站点为例对个性化推荐进行了细致的讲解,其他类型的站点也可以参照这种方法来实现个性化推荐,比如新闻网站可以计算站点所有新闻用户当前花较长时间阅读的新闻的相似度,从而进行个性化推荐。

在电商网站或视频网站中,如果要采用这种方式实现个性化推荐,由于文本资料比较缺乏,所以此时我们可以将对应视频或者对应商品的评论信息或描述信息作为文本资料进行计算,方可解决文本资料缺乏的问题。

同时,这篇文章中只是给出了个性化推荐的其中一种解决方案,实现个性化推荐还有多种多样的方案,在此,希望能够抛砖引玉,让大家对个性化推荐问题有一个较好的思考。

作者新书推荐

58d0cd32Nddf92407.jpg


目录
相关文章
|
3月前
|
人工智能 自然语言处理 安全
最新版阿里云大模型服务平台百炼功能介绍
在人工智能技术高速迭代的当下,大模型已经从单一文本生成工具,升级为覆盖文本、图像、音频、视频的全模态智能服务载体,成为企业数字化转型、开发者创新落地的核心基础设施。百炼大模型服务平台作为一站式全链路大模型开发与服务平台,持续完成版本迭代与功能升级,依托自研全系大模型矩阵、多元化第三方模型生态、轻量化开发工具、安全可控的部署体系,为个人开发者、中小企业及大型政企机构提供低门槛、高性能、高安全的AI开发服务。2026年最新版本在模型矩阵、调用效率、评测体系、部署模式、命令行工具、知识库能力、合规安全等多个维度完成全面升级,大幅降低大模型应用的开发、调试、部署与运维成本,实现从模型调用、应用搭建、数
734 0
|
3月前
|
人工智能 监控 Java
全栈测开岗位需求暴增340%:2026秋招最硬核的“版本答案"
2026年测试行业正经历颠覆性变革:AI已覆盖80%回归测试,手工测试岗需求骤降47%。传统“黑盒测试”能力贬值,全栈测开(懂后端+AI+Agent)成新刚需,薪资溢价30%-50%。核心转变是从“验证功能”到“验证AI系统能力”,需掌握Skill封装、MCP协议与Agent验证体系。
|
4月前
|
存储 文字识别 BI
内网 RPA 私有化部署实战:数据不出域的完整落地方案
摘要: 本文从企业内网安全合规角度出发,梳理 RPA 内网私有化部署的核心诉求与选型要点,结合真实落地场景提供可复用的部署思路,帮助技术团队在不依赖外部云服务的前提下实现流程自动化。
394 0
|
5月前
|
Web App开发 人工智能 自然语言处理
2026 爆火 OpenClaw 小龙虾 AI 部署教程|Win10/11 一键搭建本地 AI 数字员工,零代码零基础即用
OpenClaw(“小龙虾”)是2026年爆火的开源本地AI智能体,GitHub星标超28万。本教程专为小白设计,Win10/11一键部署,零代码、全图形化操作,10分钟即可启用AI数字员工,自动完成文件整理、Excel生成、浏览器操作等办公任务,数据全程本地运行,隐私安全无忧。(239字)
|
4月前
|
存储 弹性计算 缓存
阿里云服务器ECS实例对比与选择:经济型、通用算力型、计算型、通用型、内存型选型指南
阿里云服务器ECS提供经济型e、通用算力型(u1/u2i/u2a)、第九代计算型/通用型/内存型(c9i/g9i/r9i、c9a/g9a/r9a)等多系列实例,覆盖入门到高性能全场景。经济型e实例99元/年,适合个人开发者与小微企业;通用算力型u1实例199元/年、续费同价,是企业级均衡之选;第九代实例搭载CIPU+英特尔至强6/AMD处理器,算力最高提升40%,支持AMX加速与TDX机密计算,适用于AI、数据库、游戏等高并发场景。
|
6月前
|
人工智能 自然语言处理 API
技术实战:基于CLI与AgentSkill 构建工业级AI影视解说自动化链路
本文介绍2026年AI影视解说新范式:基于narrator-ai-cli与Skill架构的本地优先自动化Pipeline。支持一行命令或自然语言指令,打通视频理解、文案生成、配音剪辑全流程;兼顾数据隐私(GB级素材本地处理)与云端智能(大模型文案/TTS),实现工业化、可扩展的短视频量产。
|
6月前
|
存储 数据采集 运维
企业级智能体落地那些难言之隐
2026年,企业级智能体成数字化转型热点,但安全痛点成规模化落地最大瓶颈:数据泄露、合规难适配、技术漏洞、权限失控四大隐患频发。厂商重技术轻安全、企业选型忽视安全评估,导致风险难言、损失难估。安全先行,方为破局关键。
392 0
|
人工智能
AniDoc:蚂蚁集团开源 2D 动画上色 AI 模型,基于视频扩散模型自动将草图序列转换成彩色动画,保持动画的连贯性
AniDoc 是一款基于视频扩散模型的 2D 动画上色 AI 模型,能够自动将草图序列转换为彩色动画。该模型通过对应匹配技术和背景增强策略,实现了色彩和风格的准确传递,适用于动画制作、游戏开发和数字艺术创作等多个领域。
1518 16
AniDoc:蚂蚁集团开源 2D 动画上色 AI 模型,基于视频扩散模型自动将草图序列转换成彩色动画,保持动画的连贯性
|
Cloud Native Docker 容器
免费Docker镜像服务
近期,一位博友分享了如何利用Cloudfare路由功能实现Docker镜像代理的方法。本文作者则选择了一种更为简便的方式,直接使用道客(DaoCloud)提供的Docker镜像代理服务,该服务已稳定运行半年以上,支持通过添加域名前缀或修改配置文件两种方式使用。
1061 4
|
IDE Java 开发工具
在 Vim 里为 Markdown 文档展示导航窗格
在一个很长的 Markdown 文档里要准确跳转到某标题并不容易,如果像 Word 那样有个导航窗格就好了。
556 6