简洁高端网站模板psd,wordpress首页调用最新文章,手机网站开发周期,公司网站怎么免费建现在电商行业势头正好#xff0c;对在线零售商来说#xff0c;他们不受库存或空间的限制#xff0c;而实体店则必须在有限的空间中存储产品。
但是#xff0c;在线购物也有它的局限之处#xff0c;最大的难题之一就是检验产品的真伪。它的质量是否如宣传所说的那么好…现在电商行业势头正好对在线零售商来说他们不受库存或空间的限制而实体店则必须在有限的空间中存储产品。
但是在线购物也有它的局限之处最大的难题之一就是检验产品的真伪。它的质量是否如宣传所说的那么好消费者留言的评价是真实的吗还是虚假宣传这是消费者决定购买的重要因素。
所以我们决定用NLP技术在这一主题中进行探索本文将帮助你了解用主题建模分析在线产品评论的重要性。
商品评论的重要性
前几天我从某网站买了一部智能手机价格符合我的预期并且评分为4.5分满分为5。
但是拿到手之后我才发现电池续航远不及平均水平。在购买时我只看了评分却没关注评论所以我知道肯定不只我一个人不满意
所以网购看评论应该是必不可少的参考可以如果评论有成百上千条根本看不过来怎么办这就需要用到自然语言处理技术了。
明确问题
我们应该如何用NLP分析大量商品评论呢首先让我们明确这一问题。
从卖家角度他们可以从评论中估计顾客对商品的反应。想从大量评论中找到关键信息这样的智能系统需要做到两点能让顾客从中迅速提取出关键主题
卖家也能通过这些主题获得用户反馈
为什么用主题建模
和这项技术的名称一样主题建模是自动确定文本目标中主题的过程同时从文本语料中展示隐藏语义。主题模型有多重用途包括文件聚合
组织大型文本数据
从未被组织的文本中进行信息检索
特征选择
一个好的主题模型如果在与股票市场相关的文本上训练时应该会生成类似“出价”、“买卖”、“分红”、“交易”等主题。下图展示了一个典型的主题模型工作的流程
在我们的案例中文本数据来自“汽车”类目下的商品评论。这里我们的目标是从评论中提取一些重要的有代表性的单词。这些关键词可以帮助我们了解某位顾客的态度。
Python实现
在这一部分我们会用到Jupyter Notebook或你在Python下使用的任意IDE。这里我们会用到“隐含狄利克雷分布LDA”的概念如果对这一概念不了解的读者可以参考这一博文http://www.cnblogs.com/huangshiyu13/p/6148217.html
首先我们要下载所需的库
import nltk
from nltk import FreqDist
nltk.download(stopwords) # run this one time
import pandas as pd
pd.set_option(display.max_colwidth, 200)
import numpy as np
import re
import spacy
import gensim
from gensim import corpora
# libraries for visualization
import pyLDAvis
import pyLDAvis.gensim
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
要导入数据首先要将数据提取到你的工作类别中然后使用pandas中的read_json( )函数在pandas的数据框架中读取。
df pd.read_json(Automotive_5.json, linesTrue)
df.head()
如你所见数据包含以下类目评论者的ID
产品ID
评论者的用户名
该评论的有用性
评论文本
产品评分
评论总结
评论执行时间
评论原始时间raw
在这篇文章中我们只使用“评论文本”这一类。
数据处理
在开始文本挖掘前数据处理和清洗是很重要的一步。在这一步中我们会删除标点、停止词等让评论的形式尽可能统一。处理好之后就可以检查数据中最常出现的词语了。所以让我们在这里定义一个函数可以通过条形图展示数据中最常见的n个词语。
# function to plot most frequent terms
def freq_words(x, terms 30):
all_words .join([text for text in x])
all_words all_words.split()
fdist FreqDist(all_words)
words_df pd.DataFrame({word:list(fdist.keys()), count:list(fdist.values())})
# selecting top 20 most frequent words
d words_df.nlargest(columnscount, n terms)
plt.figure(figsize(20,5))
ax sns.barplot(datad, x word, y count)
ax.set(ylabel Count)
plt.show()
函数定义如下。
freq_words(df[reviewText])
如图最常见的词语是“the”、“and”、“to”等等这些词对我们并没有什么帮助所以也要删除这些词语。在这之前让我们先删除标点和数字。
# remove unwanted characters, numbers and symbols
df[reviewText] df[reviewText].str.replace([^a-zA-Z#], )
接着删除停止词和少于两个字母的单词
from nltk.corpus import stopwords
stop_words stopwords.words(english)
# function to remove stopwords
def remove_stopwords(rev):
rev_new .join([i for i in rev if i not in stop_words])
return rev_new
# remove short words (length 3)
df[reviewText] df[reviewText].apply(lambda x: .join([w for w in x.split() if len(w)2]))
# remove stopwords from the text
reviews [remove_stopwords(r.split()) for r in df[reviewText]]
# make entire text lowercase
reviews [r.lower() for r in reviews]
再对常出现的词进行可视化
freq_words(reviews, 35)
我们可以看出有了变化像“电池”、“价格”、“产品”、“汽油”等与汽车较相关的词语出现了。但是仍然有一些中性词存在例如“the”、“this”、“much”、“they”等等。
为了进一步去除文本中的噪音我们可以用spaCy库中的词形还原处理。它可以将词语还原到原始形式减少单词的重复。
!python -m spacy download en # one time run
nlp spacy.load(en, disable[parser, ner])
def lemmatization(texts, tags[NOUN, ADJ]): # filter noun and adjective
output []
for sent in texts:
doc nlp( .join(sent))
output.append([token.lemma_ for token in doc if token.pos_ in tags])
return output
我们对评语进行符号化然后对其进行词形还原。
tokenized_reviews pd.Series(reviews).apply(lambda x: x.split())
print(tokenized_reviews[1])
[these, long, cables, work, fine, truck, quality, seems, little, shabby,
side, for, money, expecting, dollar, snap, jumper, cables, seem, like,
would, see, chinese, knock, shop, like, harbor, freight, bucks]
reviews_2 lemmatization(tokenized_reviews)
print(reviews_2[1]) # print lemmatized review
[long, cable, fine, truck, quality, little, shabby, side, money, dollar,
jumper, cable, chinese, shop, harbor, freight, buck]
可以看到这一过程并不仅仅还原了词形而且只留下了名词和形容词。之后我们将这次词语在变换成正常形式。
reviews_3 []
for i in range(len(reviews_2)):
reviews_3.append( .join(reviews_2[i]))
df[reviews] reviews_3
freq_words(df[reviews], 35)
这样可以看出常见词都是和汽车相关的我们可以继续搭建主题模型了。
搭建一个LDA模型
首先我们要对语料创建术语词典其中每个唯一的词语都被看做一个index
dictionary corpora.Dictionary(reviews_2)
之后我们要用创建好的词典将评论转化成文件术语矩阵。
doc_term_matrix [dictionary.doc2bow(rev) for rev in reviews_2]
# Creating the object for LDA model using gensim library
LDA gensim.models.ldamodel.LdaModel
# Build LDA model
lda_model LDA(corpusdoc_term_matrix,
id2worddictionary,
num_topics7,
random_state100,
chunksize1000,
passes50)
上述代码的执行可能需要一段时间。注意我在这一模型中用num_topics参数将主题的数量定为7你可以修改这一数字。
接着就可以生成LDA模型学习到的主题。
lda_model.print_topics()
[(0, 0.030*car 0.026*oil 0.020*filter 0.018*engine 0.016*device 0.013*code0.012*vehicle 0.011*app 0.011*change 0.008*bosch),
(1, 0.017*easy 0.014*install 0.014*door 0.013*tape 0.013*jeep 0.011*front
0.011*mat 0.010*side 0.010*headlight 0.008*fit),
(2, 0.054*blade 0.045*wiper 0.019*windshield 0.014*rain 0.012*snow
0.012*good 0.011*year 0.011*old 0.011*car 0.009*time),
(3, 0.044*car 0.024*towel 0.020*product 0.018*clean 0.017*good 0.016*wax
0.014*water 0.013*use 0.011*time 0.011*wash),
(4, 0.051*light 0.039*battery 0.021*bulb 0.019*power 0.018*car 0.014*bright0.013*unit 0.011*charger 0.010*phone 0.010*charge),
(5, 0.022*tire 0.015*hose 0.013*use 0.012*good 0.010*easy 0.010*pressure
0.009*small 0.009*trailer 0.008*nice 0.008*water),
(6, 0.048*product 0.038*good 0.027*price 0.020*great 0.020*leather
0.019*quality 0.010*work 0.010*review 0.009*amazon 0.009*worth)]
Topic 3中含有“towel”、“clean”、“wax”、“water”等词语表明这一话题和汽车清洁有关。Topic 6含有“price”、“quality”和“worth”等词语说明和产品的价格有关。
主题可视化
为了在二维空间中对我们的主题进行可视化我们用的是pyLDAvis库。
# Visualize the topics
pyLDAvis.enable_notebook()
vis pyLDAvis.gensim.prepare(lda_model, doc_term_matrix, dictionary)
vis
其他分析网站评论的方法
除了主题建模还有很多其他的NLP方法可以用来分析理解网络评论文本总结对评语进行关键点总结。
实体识别entity recognition从评论中提取出实体分析哪种产品更受欢迎。
确定流行趋势根据评论的时间可以掌握某一商品的受欢迎趋势。
语义分析对零售商来说理解评论的语义情感对改善产品和服务是非常有帮助的。
下一步工作
信息检索让我们省去了浏览大量评论的时间也让我们知道了顾客对产品说了些什么。但是它并没有展示出评论是积极的、中立的、还是消极的。这就是信息检索之后要做的工作。我们不仅要提取出话题还要分析其中的情感。在接下来的文章中我们会具体讲解请大家关注。