NLP到word2vec实战班视频截图1----NLP理论基础

视频地址:https://www.bilibili.com/video/av27083004/?p=1

对于社交语言一类的,表情符之类的要通过正则匹配把它们筛出来,具体处理如下图

NLP:在feed进模型前要做大量的预处理,下面重点介绍

存在的问题(在英文中这个问题比较明显,在中文中可以忽略)

解决方法

实现

停用词(设置停用词的话可能会破坏之前的语义,所以不一定要用)

总结:文本预处理的流程

经过文本预处理后的流程:特征工程,即把文本转成向量,也就是数字表达的features

 

下面先介绍几个应用

1、情感分析

2、文本相似度

举个例子;先统计词频,然后相似度用余弦夹角衡量

 

 

 

 

3、文本分类

以TF-IDF为例

词频率和文档频率

 

 

下面讲师用一个kaggle的题目来作例子

省略文本读取和merge

 

代码如下:


# coding: utf-8

# In[1]:

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor,BaggingRegressor
from nltk.stem.snowball import SnowballStemmer


# In[2]:

df_train = pd.read_csv('../input/train.csv',encoding='ISO-8859-1')
df_test = pd.read_csv('../input/test.csv',encoding='ISO-8859-1')


# In[3]:

df_desc = pd.read_csv('../input/product_descriptions.csv',encoding='ISO-8859-1')


# In[6]:

df_all = pd.concat([df_train,df_test],axis=0,ignore_index=True)


# In[7]:

df_all.head()


# In[8]:

df_all.shape


# In[9]:

df_desc.head()


# In[10]:

df_all = pd.merge(df_all,df_desc,on='product_uid',how='left')


# In[11]:

df_all.head()


# In[13]:

#下面的文本预处理主要是看关键词是否会被包含
#其他的方式有去掉停止词、纠正拼写、去掉数字、去掉各种emoji等
stemmer = SnowballStemmer('english')
def str_stemmer(s):
    return " ".join([stemmer.stem(word) for word in s.lower().split()])


# In[14]:

def str_comm_word(str1,str2):
    return sum(int(str2.find(word)>=0) for word in str1.split())


# In[15]:

#接下来把每个column跑一遍,以清理所有的文本内容
for col in ['search_term','product_title','product_description']:
    df_all[col] = df_all[col].map(lambda x:str_stemmer(x))


# In[17]:

#自制文本特征,没有特别的规则,但要靠谱点
#关键词长度
df_all['len_query'] = df_all['search_term'].map(lambda x:len(x.split())).astype(np.int64)


# In[19]:

#描述中有多少关键词重合
df_all['common_in_title'] = df_all.apply(lambda x:str_comm_word(x['search_term'],x['product_title']),axis=1)


# In[20]:

df_all = df_all.drop(['search_term','product_title','product_description'],axis=1)


# In[21]:

#重塑训练/测试集
df_train = df_all.loc[df_train.index]
df_test = df_all.loc[df_test.index]


# In[22]:

test_ids = df_test['id']


# In[23]:

y_train = df_train['relevance'].values


# In[25]:

X_train = df_train.drop(['id','relevance'],axis=1).values
X_test = df_test.drop(['id','relevance'],axis=1).values


# In[26]:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import cross_val_score


# In[35]:

params = [1,3,5,7,9,10]
test_scores = []
for param in params:
    clf = RandomForestRegressor(n_estimators=30,max_depth=param)
    test_score = np.square(cross_val_score(clf,X_train,y_train,cv=5,scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))


# In[36]:

import matplotlib.pyplot as plt
get_ipython().magic('matplotlib inline')
plt.plot(params,test_scores)
plt.title("Params VS Cv Errors")


# In[37]:

rf = RandomForestRegressor(n_estimators=30,max_depth=5)


# In[38]:

rf.fit(X_train,y_train)


# In[39]:

y_pred = rf.predict(X_test)


# In[41]:

df = pd.DataFrame({'id':test_ids,'relevance':y_pred})


# In[42]:

df.head()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值