前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【推荐系统】基于文本挖掘的推荐模型【含基于CNN的文本挖掘、python代码】

【推荐系统】基于文本挖掘的推荐模型【含基于CNN的文本挖掘、python代码】

作者头像
司六米希
发布于 2022-11-15 11:12:20
发布于 2022-11-15 11:12:20
1.4K00
代码可运行
举报
文章被收录于专栏:司六米希司六米希
运行总次数:0
代码可运行

【推荐系统】基于文本挖掘的推荐模型【含基于CNN的文本挖掘】

基于文本挖掘的推荐模型 – 了解基于文本评论的推荐模型,实现评分预测

一、实现的主要原理及思路

1. 深度神经网络

关于神经网络更详细介绍可以看此篇【深度学习】含神经网络、CNN、RNN推理

1.1神经网络原理

1.2神经网络的表示

1.3示例

1.4深度神经网络(Deep Neural Networks,DNN)

DNN则是指包含多个隐层的神经网络

2. 卷积网络(Convolutional Neural Networks, CNN)处理文本评价的方式

2.1图像 应用 卷积网络

二维卷积网络是通过将卷积核在二维矩阵中,分别从width和height两个方向进行滑动窗口操作,且对应位置进行相乘求和。而图像则正是拥有二维特征像素图,所以图像应用卷积网络是二维卷积网络。

2.2文本挖掘 应用 卷积神经网络

当文本由一系列单词组成,eg:hello world, I like you.是一个一维的单词序列,卷不起来。所以此时应将卷积网络的思想运用到文本挖掘中,则需要考虑到单词的表征。如下图👇cat延申出是否是动词,是否是人类等等一系列表征,便变成二维进行卷积。但需要注意的是,将卷积核在二维矩阵中,只能从width和height两个方向进行滑动窗口操作(即卷积要包括一个单词的所有表征),且对应位置进行相乘求和。放在下图中也就是只能上下进行卷积。

3. 基于CNN的评论文本挖掘

3.1数据预处理

原始数据👇【由于原数据集2125056万条过大,为方便调试后续代码,实现整个过程,所以数据集仅选取其中一部分,训练集大小为425001*1】

提取出我们所需要的评分以及评论文本,并将两者组成列表👇

利用jieba包,构建分词函数,从而得到分好词的评论。👇【下图为拿一个评论进行分词尝试,并存为列表】

有了词以后我们需要针对单词进行向量化,也就是上面 2.2文本挖掘 应用 卷积神经网络中的图的数据获取,而这里使用了包word2vec(word2vec是一种将单词转换为向量形式的工具。用于将文本的处理的问题简化为向量空间中的向量运算,通过计算向量空间上的距离来表示文本语义上的相似度),而word2vec实现原理是它将词表中所有的词进行统一编码,每个词在向量中占为1(让向量中只有一个维度为1),eg:“开心”=0000001000000……,然后根据每个词的上下文进行训练,从而判断两个词之间的相似性👇

为了统一卷积的输入,计算每条评论的最长单词数,然后将所有评论单词数量进行扩充至最长单词数👇

数据预处理部分函数👇

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
import jieba
import gensim
import tqdm
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import models
import random
from gensim.models import Word2Vec
def data_processing():
    array = pd.read_csv("  ", header=None)
    np_array = np.array(array)
    mid=round(len(np_array)/1000)
    print(mid)
    print(999 * (mid + 1))
    test_star=np_array[1:mid,7]
    train_star=np_array[999*(mid+1):,7]
    train_star = keras.utils.to_categorical( train_star, num_classes=10)
    test_star = keras.utils.to_categorical( test_star, num_classes=10)
    test_comment=np_array[1:mid,8]
    train_comment=np_array[999*(mid+1):,8]
    return test_comment,test_star,train_comment,train_star
#分词
def get_separate_words(data):
    seqlist=jieba.cut(data,cut_all  = False)
    seqlist=list(seqlist)
    seqlist= seqlist + [0] * (177 - len(seqlist))
    # print(list(seqlist))
    # print(','.join(seqlist))
    return seqlist
#创建分词向量
def create_segmentation_vector(data):
    separate_words_list = []
    words_vector_list=[]
    # max=0
    for k in range(len(data)):
        separate_words_list.append(get_separate_words(data[k]))
        # if len(get_separate_words(data[k]))>max:
        #     max=len(get_separate_words(data[k]))
        # print(separate_words_list)
    word=Word2Vec(separate_words_list, min_count=1, vector_size=8)
    for j in range(len(separate_words_list)):
            k=word.wv[separate_words_list[j]]
            op=[]
            for t1 in k:
                tem=[]
                for t2 in t1:
                    tem.append(float(t2))
                op.append((tem.copy()))
            word_vector=op
            words_vector_list.append([word_vector])
        # print(words_vector_list)
    return words_vector_list,max

3.2CNN

利用tensorflow的keras进行构建模型,模型细则👇

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 模型
def cnn(X_train,Y_train,X_test,Y_test):
    X_train = np.array(X_train)
    X_train = X_train.reshape(X_train.shape[0], 177, 8, 1)
    Y_train = np.array(Y_train)
    Y_test= np.array(Y_test)
    X_test = np.array(X_test)
    X_test= X_test.reshape(X_test.shape[0], 177, 8, 1)
    print('开始卷积')
    # 定义模型Sequential 序贯模型。序贯模型是线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠
    model = models.Sequential()
    # # 向模型中添加层
    # 【Conv2D】
    # 构建卷积层。用于从输入的高维数组中提取特征。卷积层的每个过滤器就是一个特征映射,用于提取某一个特征,
    # 过滤器的数量决定了卷积层输出特征个数,或者输出深度。
    # 因此,图片等高维数据每经过一个卷积层,深度都会增加,并且等于过滤器的数量
    model.add(layers.Conv2D(1, kernel_size=(8,8),  # 添加卷积层,深度1,过滤器大小8*8
                            activation='relu',  # 使用relu激活函数
                            input_shape=(177,8,1)))   # 输入的尺寸
    model.add(layers.MaxPooling2D(pool_size=(170, 1)))    # 添加池化层,过滤器大小是170*1
    model.add(layers.Conv2D(64, (1,1), activation='relu'))  # 添加卷积层
    model.add(layers.MaxPooling2D(pool_size=(1, 1)))    # 添加池化层
    model.add(layers.Flatten())     # 将池化层的输出拉直,然后作为全连接层的输入
    model.add(layers.Dense(500, activation='relu'))     # 添加有500个结点的全连接层,激活函数用relu
    model.add(layers.Dense(10, activation='softmax'))   # 输出最终结果,有10个,激活函数用softmax
    # 定义损失函数、优化函数、评测方法
    #  model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准
    #  model.compile(optimizer = 优化器,loss = 损失函数,metrics = ["准确率”])

    # 多分类损失函数categorical_crossentropy
    # 优化器采用SGD随机梯度下降算法
    model.compile(loss=keras.losses.categorical_crossentropy,

                  optimizer=keras.optimizers.SGD(),
                  metrics=['accuracy'])


    # 自动完成模型的训练过程
    # model.fit()方法用于执行训练过程
    # model.fit( 训练集的输入特征,训练集的标签,
    #             batch_size,  #每一个batch的大小
    #             epochs,   #迭代次数
    #             validation_data = (测试集的输入特征,测试集的标签),
    #             validation_split = 从测试集中划分多少比例给训练集,
    #             validation_freq = 测试的epoch间隔数)
    model.fit(X_train, Y_train,   # 训练集
              batch_size=128,   # batchsize
              epochs=3,    # 训练轮数
              validation_data=(X_test, Y_test))   # 验证集
    score = model.evaluate(X_test, Y_test)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1])

    customization_good = np.array(['这是一个非常好电影'])
    k=create_segmentation_vector(customization_good)
    k = np.array(k[0])
    k = k.reshape(k.shape[0], 177, 8, 1)
    predict1 = model.predict(k)
    # print(predict1)
    print('评论:这是一个非常好电影\n评分为')
    print(np.argmax(predict1))

    customization_bad=['这是差劲烂片']
    k = create_segmentation_vector(customization_bad)
    k = np.array(k[0])
    k = k.reshape(k.shape[0], 177, 8, 1)
    predict2 = model.predict(k)
    print('评论:这是差劲烂片\n评分为')
    print(np.argmax(predict2))

损失函数采用多分类损失函数categorical_crossentropy

优化器采用SGD随机梯度下降算法

注意:为了符合上述模型数据类型要求,需要在数据预处理处进行严格的类型转换

关于CNN的其它实例练习可见此篇基于MNIST手写体数字识别–含可直接使用代码【Python+Tensorflow+CNN+Keras】

4.基于文本挖掘的推荐模型

将自定义单条评论进行单词分量,预测,取预测结果元素最大值所对应的索引即为预测评分

二、 结果与分析

1. 基于CNN的评论文本挖掘

结果👇

【20316份训练集,2125份测试集,训练迭代3次,测试loss约为2.246,测试准确率为0.08】

【21108份训练集,21251份测试集,训练迭代10次,测试loss约为1.96,测试准确率为0.108】👇

当我的测试集以及训练迭代次数增加时,测试的loss减少,准确率提高

【212466份训练集,42501份测试集,报错过大】

2. 基于文本挖掘的推荐模型-评分预测

三、总结

其实如果增大数据集训练量,准确率应该会更为理想,但是,当我尝试将训练集增到21万左右时,我的电脑跑了一晚上也没跑出来直接卡住。所以还是以学习整个流程,学会实现为主,不强求/(ㄒoㄒ)/~~柳暗花明又一村,不抛弃不放弃,它会跑起来的,要有坚定的信念感,去吧,皮卡丘

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用神经网络为图像生成标题
我们都知道,神经网络可以在执行某些任务时复制人脑的功能。神经网络在计算机视觉和自然语言生成方面的应用已经非常引人注目。
deephub
2020/07/30
1.1K0
使用神经网络为图像生成标题
[Deep-Learning-with-Python] 文本序列中的深度学习
深度学习模型可以处理文本序列、时间序列、一般性序列数据等等。处理序列数据的两个基本深度学习算法是循环神经网络和1D卷积(2D卷积的一维模式)。
公众号-不为谁写的歌
2020/07/23
4K0
Keras文本分类实战(下)
在上一节Keras文本分类实战(上),讲述了关于NLP的基本知识。这部分,将学会以不同方式将单词表示为向量。
用户3578099
2019/08/15
1.2K0
Python做文本挖掘的情感极性分析
「情感极性分析」是对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程。按照处理文本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。其中,前者多用于舆情监控和信息预测,后者可帮助用户了解某一产品在大众心目中的口碑。 目前常见的情感极性分析方法主要是两种:基于情感词典的方法和基于机器学习的方法。 1. 基于情感词典的文本情感极性分析 笔者是通过情感打分的方式进行文本情感极性判断,score > 0判断为正向,score < 0判断为负向。 1.1 数据准备 1.1.1 情感词典及对应分
机器学习AI算法工程
2018/03/14
5.3K0
Python做文本挖掘的情感极性分析
基于机器学习的文本情感极性分析
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 我们会再接再厉 成为全网优质的技术类公众号 数据准备 2.1.1 停用词 具体请看Python做文本挖掘的情感极性分析(基于情感词典的方法)(同1.1.4) 2.1.2 正负向语料库 来源于有关中文情感挖掘的酒店评论语料, http://www.datatang.com/data/11936 其中正向7000条,负向3000条,当然也可以参考情感分析资源使用其他语料作为训练集。 2.1
昱良
2018/04/08
2.1K0
基于机器学习的文本情感极性分析
搭建LSTM(深度学习模型)做文本情感分类的代码
传统的文本情感分类思路简单易懂,而且稳定性也比较强,然而存在着两个难以克服的局限性: 一、精度问题,传统思路差强人意,当然一般的应用已经足够了,但是要进一步提高精度,却缺乏比较好的方法; 二、背景知识问题,传统思路需要事先提取好情感词典,而这一步骤,往往需要人工操作才能保证准确率,换句话说,做这个事情的人,不仅仅要是数据挖掘专家,还需要语言学家,这个背景知识依赖性问题会阻碍着自然语言处理的进步。 庆幸的是,深度学习解决了这个问题(至少很大程度上解决了),它允许我们在几乎“零背景”的前提下,为某个领域的实际问
机器学习AI算法工程
2018/03/15
2.3K0
【机器学习】机器学习重要方法——深度学习:理论、算法与实践
深度学习(Deep Learning)作为机器学习的一个重要分支,通过构建和训练多层神经网络,自动提取和学习数据的多层次特征,近年来在多个领域取得了突破性的进展。本文将深入探讨深度学习的基本原理、核心算法及其在实际中的应用,并提供代码示例以帮助读者更好地理解和掌握这一技术。
E绵绵
2025/05/25
1970
【机器学习】机器学习重要方法——深度学习:理论、算法与实践
Deep learning with Python 学习笔记(1)
Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据处理模块,它从输入数据中提取表示,紧接着的一个例子中,将含有两个Dense 层,它们是密集连接(也叫全连接)的神经层,最后是一个10路的softmax层,它将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率 损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进 优化器(optimizer):基于训练数据和损失函数来更新网络的机制
范中豪
2019/09/10
1.5K0
Deep learning with Python 学习笔记(1)
开发 | 小白学CNN以及Keras的速成
AI 科技评论按:本文作者Sherlock,原文载于其知乎专栏深度炼丹,AI 科技评论已获得其授权发布。 一、为何要用Keras 如今在深度学习大火的时候,第三方工具也层出不穷,比较出名的有Tensorflow,Caffe,Theano,MXNet,在如此多的第三方框架中频繁的更换无疑是很低效的,只要你能够好好掌握其中一个框架,熟悉其原理,那么之后因为各种要求你想要更换框架也是很容易的。 那么sherlock用的是哪个框架呢?sherlock使用的是Google的开源框架Tensorflow,因为Googl
AI科技评论
2018/03/13
1K0
开发 | 小白学CNN以及Keras的速成
Keras与经典卷积——50行代码实现minst图片分类
本文将简要介绍经典卷积神经网络的基本原理,并以minst图片分类为例展示用Keras实现经典卷积神经网络的方法。
lyhue1991
2020/07/20
9660
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
本人在大三期间做了一个关于“疫苗接种”主题的舆情分析,主要涉及的技术有:爬虫(微博和知乎评论)、数据清洗、文本特征提取、建立模型(SVM、BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention)、文本摘要等。
全栈程序员站长
2022/09/13
1.3K1
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现RNN和LSTM的文本分类算法,并与传统的机器学习分类算法进行对比实验。这篇文章我们将继续巩固文本分类知识,主要讲解CNN实现中文文本分类的过程,并与贝叶斯、决策树、逻辑回归、随机森林、KNN、SVM等分类算法进行对比。注意,本文以代码为主,文本分类叙述及算法原理推荐阅读前面的文章。基础性文章,希望对您喜欢~
Eastmount
2023/02/28
3.4K0
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
一个超强算法模型,CNN !!
大概介绍下:MNIST数字分类项目旨在使用机器学习技术来构建一个模型,能够自动识别手写数字的图像。这个项目是一个经典的图像分类任务,常用于入门级机器学习和深度学习示例。我们会使用MNIST数据集,这个数据集包含了一系列28x28像素的手写数字图像,从0到9。项目的目标是训练一个模型,能够准确地将这些手写数字图像分类到正确的数字标签。
Python编程爱好者
2023/12/05
4290
一个超强算法模型,CNN !!
轻松搞懂【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention实现】英文长文本分类[通俗易懂]
项目来源:https://www.kaggle.com/c/word2vec-nlp-tutorial/
全栈程序员站长
2022/09/13
8190
轻松搞懂【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention实现】英文长文本分类[通俗易懂]
用keras对国产剧评论文本的情感进行预测
RNN即循环神经网络,其主要用途是处理和预测序列数据。在CNN中,神经网络层间采用全连接的方式连接,但层内节点之间却无连接。RNN为了处理序列数据,层内节点的输出还会重新输入本层,以实现学习历史,预测未来。 RNN的两个主要改进是LSTM(长短时记忆网络)和GRU(门控循环单元),二者为基本神经单元增加了额外的功能门,从而更好的实现长时记忆的处理。 在此基础上,通过两层或者多个RNN层的堆叠,可以实现双向循环神经网络(bidirectionalRNN)及深层循环神经网络(deepRNN)。 Ker
机器学习AI算法工程
2018/03/15
1.2K0
教你使用Keras一步步构建深度神经网络:以情感分析任务为例
【导读】Keras是深度学习领域一个非常流行的库,通过它可以使用简单的代码构建强大的神经网络。本文介绍基于Keras构建神经网络的基本过程,包括加载数据、分析数据、构建模型,配置模型等。并通过imdb
WZEARW
2018/04/25
2K0
教你使用Keras一步步构建深度神经网络:以情感分析任务为例
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
本文是我之前写过的一篇基于推特数据进行情感分析的文章(https://ahmedbesbes.com/sentiment-analysis-on-twitter-using-word2vec-and-keras.html)的延伸内容。那时我建立了一个简单的模型:基于 keras 训练的两层前馈神经网络。用组成推文的词嵌入的加权平均值作为文档向量来表示输入推文。
机器之心
2018/07/26
1.8K0
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
未来已来:全方位掌握【人工智能】的系统学习路线
人工智能(Artificial Intelligence, AI)是当前科技发展的前沿领域,广泛应用于各行各业。学习AI需要系统的知识体系和丰富的实践经验。本文将详细介绍AI的学习路线,分点讲解各个部分的具体实例,帮助学习者全面掌握AI技术。
小李很执着
2024/08/09
5810
未来已来:全方位掌握【人工智能】的系统学习路线
如何用 Python 和循环神经网络(RNN)做中文文本分类?
本文为你展示,如何使用 fasttext 词嵌入预训练模型和循环神经网络(RNN), 在 Keras 深度学习框架上对中文评论信息进行情感分类。
王树义
2018/12/17
1.9K0
如何用 Python 和循环神经网络(RNN)做中文文本分类?
Keras文本数据预处理范例——IMDB影评情感分类
本文将以IMDB电影评论数据集为范例,介绍Keras对文本数据预处理并喂入神经网络模型的方法。
lyhue1991
2020/07/20
1.3K0
推荐阅读
相关推荐
使用神经网络为图像生成标题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验