###开篇
昨天没有更新TensorFlow系列,有点跳票的意思,最近一直在参加一些小厂的算法工程师的面试,比较尴尬的是,昨天西山居的算法部门的老大直接觉得我比较水了,觉得我们在学校里面处理的文本和公司里面的差距太大了,搞得我一度无法释怀,老实说中文的文本处理还是存在很多的问题,而我也深度反省了一下自己的实战能力,同时也更加坚定地去完成这一系列博客。
既然是NLP,那么我还是先分享一下一个大厂的面试题,试着阐述一下RNN的缺点,LSTM解决的一些问题?这边先留一个疑问,当我们去实现RNN和LSTM的时候,再去解释它们的一些优缺点。结束我的废话,下面正式开始今天的博客。
###词袋模型
词是文本最基本的元素,当然中文的话就是字啦,不过我们处理中文的时候也是喜欢把文本分成一个个词语,也就是我们的分词任务,以后如果有机会分享一些基本的NLP任务的时候,我会具体的讲分词任务,并且分析一些代码。下面正式开始介绍我们今天的主角,词袋模型。还是老样子,刻板的大堆原理我不讲,大家通过代码感受,感性的介绍一下词袋模型,首先是字面意思,把一大堆词放在一个袋子里面,那么其实就默认它们其实是没有任何顺序的,每个词给个编号作为身份,大家无序地放在袋子里面。也算是一种词向量的表示啦,具体操作看代码啦。
###任务
介绍完我们的词袋模型,看看我们今天需要完成怎么样的任务。
- 数据集:sms+spam+collection,这边我会直接通过代码去下载
- 具体任务:垃圾短信检测
- 模型:我们之前讲过的逻辑回归模型,典型的二分类任务
- 特征:one-hot+词频
###代码
- 数据集的下载
save_file_name = os.path.join('C:\\Users\\Dave','temp_spam_data.csv')#路径名
if os.path.isfile(save_file_name):
text_data = []
with open(save_file_name, 'r') as temp_output_file:
reader = csv.reader(temp_output_file)
for row in reader:
text_data.append(row)
else:
zip_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip'
r = requests.get(zip_url)
z = ZipFile(io.BytesIO(r.content))
file = z.read('SMSSpamCollection')
# Format Data
text_data = file.decode()
text_data = text_data.encode('ascii',errors&#