热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Word2vec实战

1、对英文文本做情感分析importosimportreimportnumpyasnpimportpandasaspdfrombs4importBeautifulSoupimpor




1、对英文文本做情感分析

import os
import re
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
import nltk.data
from nltk import word_tokenize
from nltk.corpus import stopwords
from gensim.models.word2vec import Word2Vec
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
def load_dataset(name,nrows=None):
datasets={
"unlabeled_train":"unlabeledTrainData.tsv",
"labeled_train":"labeledTrainData.tsv",
"test":"testData.tsv"
}
if name not in datasets:
raise ValueError(name)
data_file=os.path.join("..","data",datasets[name])
df=pd.read_csv(data_file,sep="\t",escapechar="\\",nrows=nrows)
print("number of reviews:{}".format(len(df)))
return df
#读入无标签数据
df=load_dataset("unlabeled_train")
print(df.head())#50000
#数据预处理
stopword=list(stopwords.words("english"))
def clean_text(text,remove_stopwords=False):
text=BeautifulSoup(text,"html.parser").get_text()
text=re.sub(r"[^a-zA-Z]"," ",text)
words=text.lower().split()
if remove_stopwords:
words=[w for w in words if w not in stopword]
return words
def split_sentences(review):
raw_sentences=word_tokenize(review.strip())
sentences=[clean_text(s) for s in raw_sentences if s]
return sentences
#将dataframe文本预处理,分词。
df["clean_review"]=df.review.apply(clean_text)
sentences=sum(df.review.apply(split_sentences,[]))
#用gensim训练词嵌入模型
num_features=300
min_word_count=40
num_workes=4
cOntext=10
downsampling=1e-3
model=Word2Vec(sentences,workers=num_workes,size=num_features,min_count=min_word_count,
window=context,sample=downsampling)
model.init_sims(replace=True)
model.save(os.path.join("..","models","model_name"))
#看看训练的词向量结果如何
print(model.doesnt_match("man woman child kitchen".split()))#kitchen
model.most_similar("man")
df=load_dataset("labeled_train")
def to_review_vector(review):
words=clean_text(review,remove_stopwords=True)
array=np.array(model[w] for w in words if w in model)
return pd.Series(array.mean(axis=0))
train_data_feature=df.review.apply(to_review_vector)
print(train_data_feature.head())
#使用随机森林构建分类器
forest=RandomForestClassifier(n_estimators=100,random_state=42)
clf=forest.fit(train_data_feature,df["sentiment"])
confusion_matrix(df["sentiment",forest.predict(train_data_feature)])
del df
del train_data_feature
df=load_dataset("test")
test_data=df.review.apply(to_review_vector)
predict=forest.predict(test_data)
output=pd.DataFrame({"id":df["id"],"sentiment":predict})
#保存到csv文件

2、使用word2vec做情感分析

import os
import re
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
import nltk.data
from nltk import word_tokenize
from nltk.corpus import stopwords
from gensim.models.word2vec import Word2Vec
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
def load_dataset(name,nrows=None):
datasets={
"unlabeled_train":"unlabeledTrainData.tsv",
"labeled_train":"labeledTrainData.tsv",
"test":"testData.tsv"
}
if name not in datasets:
raise ValueError(name)
data_file=os.path.join("..","data",datasets[name])
df=pd.read_csv(data_file,sep="\t",escapechar="\\",nrows=nrows)
print("number of reviews:{}".format(len(df)))
return df
#读入无标签数据
df=load_dataset("unlabeled_train")
print(df.head())#50000
#数据预处理
stopword=list(stopwords.words("english"))
def clean_text(text,remove_stopwords=False):
text=BeautifulSoup(text,"html.parser").get_text()
text=re.sub(r"[^a-zA-Z]"," ",text)
words=text.lower().split()
if remove_stopwords:
words=[w for w in words if w not in stopword]
return words
def split_sentences(review):
raw_sentences=word_tokenize(review.strip())
sentences=[clean_text(s) for s in raw_sentences if s]
return sentences
#将dataframe文本预处理,分词。
df["clean_review"]=df.review.apply(clean_text)
sentences=sum(df.review.apply(split_sentences,[]))
#用gensim训练词嵌入模型
num_features=300
min_word_count=40
num_workes=4
cOntext=10
downsampling=1e-3
model=Word2Vec(sentences,workers=num_workes,size=num_features,min_count=min_word_count,
window=context,sample=downsampling)
model.init_sims(replace=True)
model.save(os.path.join("..","models","model_name"))
#看看训练的词向量结果如何
print(model.doesnt_match("man woman child kitchen".split()))#kitchen
model.most_similar("man")
df=load_dataset("labeled_train")
def to_review_vector(review):
words=clean_text(review,remove_stopwords=True)
array=np.array(model[w] for w in words if w in model)
return pd.Series(array.mean(axis=0))
train_data_feature=df.review.apply(to_review_vector)
print(train_data_feature.head())
#使用随机森林构建分类器
forest=RandomForestClassifier(n_estimators=100,random_state=42)
clf=forest.fit(train_data_feature,df["sentiment"])
confusion_matrix(df["sentiment",forest.predict(train_data_feature)])
del df
del train_data_feature
df=load_dataset("test")
test_data=df.review.apply(to_review_vector)
predict=forest.predict(test_data)
output=pd.DataFrame({"id":df["id"],"sentiment":predict})
#保存到csv文件


推荐阅读
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
author-avatar
寤丨惘_191
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有