开头叨叨
这周跑了两个model,一个很成功,一个很失败(大概)。让我体会到nlp 自然语言处理是个多么好玩的方向(top1%的fit rate不过80%,我76.06%还有点小骄傲 ?)
本文只简略展示代码骨干内容,nb文件不会公布
影评模型
Sentiment Analysis on Movie Reviews
已有的数据是 150000+条的影评数据(tsv格式,类似csv,分隔符不同)训练集
还有5条无结果的data做测试
EDA
data_train.head()
PhraseId SentenceId Phrase Sentiment
1 1 A series of escapades demonstrating the adage ... 1
2 1 A series of escapades demonstrating the adage ... 2
.....
in:data_train.describe()
out:
PhraseId SentenceId Sentiment
count 156060.000000 156060.000000 156060.000000
mean 78030.500000 4079.732744 2.063578
std 45050.785842 2502.764394 0.893832
min 1.000000 1.000000 0.000000
25% 39015.750000 1861.750000 2.000000
50% 78030.500000 4017.000000 2.000000
75% 117045.250000 6244.000000 3.000000
max 156060.000000 8544.000000 4.000000
数据是没有缺失的,每条影评都有对应标签(sentiment)对应
标签 可以理解为是展示影评对应的 电影打分
0 - negative
1 - somewhat negative
2 - neutral
3 - somewhat positive
4 - positive
构建语料库
对于nlp来说,我们需要对文本进行一些处理,将原始文本中的每一个自然语言变成计算机看得懂的语言——向量,这一过程叫做文本的特征工程,非常重要。
有很多将词变成向量的方法,比如下面将要介绍的词袋模型、TF-IDF模型,以此来构建一个语料库。
但是首先都要先提取文本内容
预备工作
# 提取训练集中的文本内容
train_sentences = data_train['Phrase']
# 提取测试集中的文本内容
test_sentences = data_test['Phrase']
# 通过pandas的concat函数将训练集和测试集的文本内容合并到一起
sentences = pd