自然语言处理入门(3)——Word2Vec
Word2Vec是2013年Google开源的一款用于词向量计算的工具,由于其可以在百万数量级的词典和上亿的数据集上进行高效地训练,且该工具得到的词向量,可以很好地度量词与词之间的相似性,在学术界和工业界都得到了广泛的应用。word2vec采用的是n元语法模型(n-gram model),即假设一个词只与周围n个词有关,而与文本中的其他词无关。其训练词向量有两种方式:CBOW和Skip-gram。
(1)CBOW(Continuous Bag of words,连续词袋模型):用其上下文词,来预测当前词生成的概率。
(2)Skip-Gram:用当前词去预测上下文词的生成概率。
本文就以Python中的gensim为例,介绍下Word2Vec的特性。主要可以分为电商评论数据获取、中文分词、Word2Vec测试三部分。
1.电商评论数据获取
本文的测试数据集来自于华为荣耀天猫旗舰店荣耀V10手机的评论数据(天猫页面链接:https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w13636028-15291748785.6.70ea7f34skZgjc&id=562003579553&sku_properties=10004:653780895;5919063:6536025),共计3000条。
获取天猫评论数据的方法,在链接http://blog.csdn.net/flysky1991/article/details/74586286
中有详细说明,就不再多说了。实现代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 1 18:10:52 2018@author: zch
"""import requests
import json
import time
import random
import pymysql.cursors'''
荣耀V10天猫原始链接:https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w13636028-15291748785.6.70ea7f34skZgjc&id=562003579553&sku_properties=10004:653780895;5919063:6536025
'''def crawlProductComment(url,page):#商品评论的JSON数据#url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=562003579553&spuId=101717810&spuId=101717810&sellerId=1114511827&order=3¤tPage=1&append=⊙&content=1'req = requests.get(url)jsondata = req.text[15:]data = json.loads(jsondata)#输出页面信息print("正在获取第{}页的评论数据!".format(data['paginator']['page']))j = 0k = 0#遍历评论信息列表for i in data["rateList"]:j = j + 1if page < 10:if j < 10:k = '00' + str(page) + '0' + str(j)else:k = '00' + str(page) + str(j)elif page < 100:if j < 10:k = '0' + str(page) + '0' + str(j)else:k = '0' + str(page) + str(j)else:if j < 10:k = str(page) + '0' + str(j)else:k = str(page) + str(j)#输出商品sku信息auctionSku = i['auctionSku']rateDate = i['rateDate']rateContent = i['rateContent']info = i['appendComment']if info:appendCommentTime = info['commentTime']appendCommentContent = info['content']else:appendCommentTime = ""appendCommentContent = ""print("第{}个商品的sku:{}".format(k,auctionSku))#输出评论时间和评论内容print("评论时间:{}".format(rateDate))print("评论内容:{}".format(rateContent))info = i['appendComment']#判断是否有追加评论if info:print("追评时间:{}".format(appendCommentTime))print("追评内容:{}".format(appendCommentContent))print("-------------------------------------------------")'''数据库操作'''#获取数据库链接connection = pymysql.connect(host = 'localhost',user = 'root',password = '123456',db = 'tmall',charset = 'utf8mb4')try:#获取会话指针with connection.cursor() as cursor:#创建sql语句sql = "insert into `HonorV10_Comment` (`id`,`auctionSku`,`rateDate`,`rateContent`,`appendCommentTime`,`appendCommentContent`) values (%s,%s,%s,%s,%s,%s)"#执行sql语句cursor.execute(sql,(k,auctionSku,rateDate,rateContent,appendCommentTime,appendCommentContent))#提交数据库connection.commit()finally:connection.close()for i in range(l,151):#print("正在获取第{}页评论数据!".format(i+1))#获取荣耀V10评论JSON链接,通过更改page参数的值来循环读取多页评论信息#itemId:"562003579553",sellerId:"1114511827",shopId:"101717810"url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=562003579553&spuId=101717810&spuId=101717810&sellerId=1114511827&order=3¤tPage=' + str(i) +'&append=⊙&content=1'crawlProductComment(url,i)#设置休眠时间time.sleep(random.randint(32,66))
2.中文分词
本文采用的是jieba来对评论数据进行分词操作。实现代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 7 11:23:27 2018@author: zch
"""import pandas as pd
import pymysql.cursors
import re
import jieba'''
数据库操作
'''#获取数据库链接
connection = pymysql.connect(host = 'localhost',user = 'root',password = '123456',db = 'tmall',charset = 'utf8mb4')
try:#获取会话指针with connection.cursor() as cursor:#创建sql语句sql = "select * from `HonorV10_Comment` limit 3000"#执行sql语句cursor.execute(sql)data = cursor.fetchall()#print(data[1000])#print(data[1][1])#提交数据库connection.commit()
finally:connection.close()f1 = open("tmall_review.txt",'a')
for i in range(0,3000):line = data[i][3]print(line)# 中文的编码范围是:\u4e00到\u9fa5 p2 = re.compile(r'[^\u4e00-\u9fa5]') result = " ".join(p2.split(line)).strip() #line.replace('\t','').replace('\n','').replace(' ','')cutline = jieba.cut(result,cut_all=False)f1.write(" ".join(cutline))f1.close()
3.Word2Vec测试
首先,读取经过jieba分词的评论数据,然后分别测试词语之间的相似度、某个词的相关词表和词语间的对应关系。实现代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 7 11:21:39 2018@author: zch
"""from gensim.models import word2vec
import logging
import pandas as pd# 主程序
logging.basicConfig(format='%(asctime)s:%(levelname)s: %(message)s', level=logging.INFO) # 加载语料,默认为utf-8编码
sentences =word2vec.Text8Corpus(u"D:\\data/tmall/tmall_review.txt")#训练skip-gram模型,默认window=5
model =word2vec.Word2Vec(sentences,size=200) print(model)# 计算两个词的相似度/相关程度
try: #最新版本的用法,老版本用法为y1 = model.similarity(u"苹果", u"华为"),下同。 y1 = model.wv.similarity(u"华为", u"手机")
except KeyError: y1 = 0
print (u"【华为】和【手机】的相似度为:", y1)
print("------------------------\n")#计算某个词的相关词列表(topn=10)
y2 = model.wv.most_similar(u"物流",topn=10)
print(u"和【物流】最相关的词有:\n")
for item in y2:print(item[0], item[1])
print("------------------------\n")# 寻找对应关系
print (u"上网-流畅,拍照-")
y3 =model.wv.most_similar([u'上网', u'流畅'], [u'拍照'],topn=5)
for item in y3: print(item[0], item[1])
print("------------------------\n")
自然语言处理入门(3)——Word2Vec相关推荐
- 自然语言处理入门实战1:基于机器学习的文本分类
基于机器学习的文本分类 配置文件 数据集 数据预处理 model 模型 主函数 预测 结果 参考代码 本文参考复旦大学自然语言处理入门练习,主要是实现用tensorflow实现基于logistic/s ...
- 《自然语言处理入门》不是 NLP 学习路上的万能药
<自然语言处理入门>是图灵 2019 年 10 月出版的一本 NLP 领域的入门图书,作者是何晗(网名 hankcs,HanLP 作者.「码农场」博客博主).图书上架之后得到了广大的读者的 ...
- 【实战教程】NLP-Beginner:自然语言处理入门练习
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 今天给大家分享一门很好的NLP入门学习实战仓库,话不多说,学它!!! 此项目完成了 ...
- NLP汉语自然语言处理入门基础知识介绍
NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...
- NLP-Beginner:自然语言处理入门练习-任务一
NLP-Beginner:自然语言处理入门练习 任务一:基于机器学习的文本分类 深度学习项目,在训练之前,一般均会对数据集做shuffle,打乱数据之间的顺序,让数据随机化,这样可以避免过拟合. Ba ...
- HanLP《自然语言处理入门》笔记--5.感知机模型与序列标注
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 5. 感知机分类与序列标注 第4章我们利用隐马尔可夫模型实现了第一个基于序列标注的 ...
- HanLP《自然语言处理入门》笔记--1.新手上路
文章目录 1. 新手上路 1.1 自然语言与编程语言的比较 1.2 自然语言处理的层次 1.3 自然语言处理的流派 1.4 机器学习 1.5 语料库 1.6 开源工具 1.7 总结 1.8 GitHu ...
- python自然语言处理入门教程(一)
1.NLTK自然语言处理工具包 1.1 NLTK简介 NLTK是构建Python程序与人类语言数据工作的主要平台.它提供了易于使用的界面,以超过50语料库和词汇资源,如WordNet的,连同一套文字处 ...
- 自然语言处理入门(一)
概念 (Natural Language Processing, 简称NLP)就是利用电子计算机为工具对人类特有的书面形式和口头形式的自然语言的信息进行各种类型处理和加工的技术,这种技术现在已经形成一 ...
- 《自然语言处理入门》笔记
目录 第一章 新手上路 1.1自然语言与编程语言 1.1.1词汇量 1.1.2结构化 1.1.3歧义性 1.1.4容错性 1.1.5易变性 1.1.6简略性 1.2自然语言处理的层次 1.2.1语音. ...
最新文章
- 弃Java、Swift于不顾,为何选Python?
- 【杂谈】如何在言有三本人的随时答疑下, 长期而系统地学习深度学习和计算机视觉,这是有三AI的完整计划...
- C# 制作指示灯(经典)
- C++中拷贝构造函数
- jQuery EasyUI API 中文文档 - 可调整尺寸
- maven导出项目依赖的jar包
- Linux查询用户创建的后台程序
- RecordAccumulator分析
- matlablib显示图片
- 为什么5G标准制定,非得“你死我活”?
- matlab 下的集成学习工具箱
- 2021年高考成绩查询梧州市,2021年梧州高考状元是谁分数多少分,历年梧州高考状元名单...
- flink-sql所有语法详解-1.13
- 大年初九,浅显学习之卷积
- 第15章卡方检验:拟合优度和独立性检验
- 第四周项目1---建立单链表
- 2018年deepin-wine QQ最完美解决方案
- 预测混合模式发展前景计算机,基于混合模式的网络流量分类优化-计算机技术专业论文.docx...
- 获取同花顺数据接口_简单介绍同花顺_数据获取方式(Excel VBA)
- 开源ERP系统weberp的安装与配置