在机器学习中,不能直接处理文本数据,需要提前将其转换为数值向量,接下来的内容,将简要覆盖其中涉及的技术要点
文本数据在训练机器学习模型之前需要先进行清理并转化成向量,这个过程称为文本预处理
在这节中,将会介绍编码文本数据的基本数据清理步骤和技术
- 理解数据 - 数据是关于什么的,清理这样的数据需要考虑什么(标点符号,停止词等)。
- 基础清理 - 清理无用的数据时需要考虑什么参数(标点符号,停止词等) ,及其实现代码
- 编码技术 - 当前比较流行的用于编码文本的技术
-
**Bag of Words (词袋模型)**
-
**Binary Bag of Words **
-
**Bigram, Ngram (N元语法模型)**
-
**TF-IDF**( **T**erm **F**requency - **I**nverse **D**ocument **F**requency)
-
**Word2Vec**
-
**Avg-Word2Vec**
-
**TF-IDF Word2Vec**
-
导入库
import warnings
warnings.filterwarnings("ignore") #Ignoring unnecessory warnings
import numpy as np #for large and multi-dimensional arrays
import pandas as pd #for data manipulation and analysis
import nltk #Natural language processing tool-kit
from nltk.corpus import stopwords #Stopwords corpus
from nltk.stem import PorterStemmer # Stemmer
from sklearn.feature_extraction.text import CountVectorizer #For Bag of words
from sklearn.feature_extraction.text import TfidfVectorizer #For TF-IDF
from gensim.models import Word2Vec #For Word2Vec
data_path = "Reviews.csv" #文件下载链接在文本末尾
data = pd.read_csv(data_path)
data_sel = data.head(10000) #读取前10000条
数据集包含来自亚马逊到2012年10月份为止,时间跨度超过10年,50多万条的美食评论。每条评论包括产品和用户信息,评分和纯文本的评论。
# 列名
data_sel.columns
Index(['Id', 'ProductId', 'UserId', 'ProfileName', 'HelpfulnessNumerator',
'HelpfulnessDenominator', 'Score', 'Time', 'Summary', 'Text'],
dtype='object')
- 理解数据
假设此时的目标是基于评论文本内容来预测评论的正向还是负向性。
观察评分列,可以看到有1,2,3,4,5类评分。此时可以认为1,2是负向评分,4,5是正向评分,3是中性评分
预测目标为正向或负向评分,因此需要移除中性评分
data_sel['Score'].value_counts()
5 6183
4 1433
1 932
3 862
2 590
Name: Score, dtype: int64
data_score_removed = data_sel[data_sel['Score']!=3] #移除中心评分
转化评分为正负二分类
def partition(x):
if x < 3:
return 'negative'
return 'positive'
score_upd = data_score_removed['Score']
t = score_upd.map(partition)
data_score_removed[