机器学习笔记:小白可以看懂的垃圾短信分类器(1)

阿里云2000元红包!本站用户参与享受九折优惠!

我们尝试来做一个简单的垃圾短信分类器!下面是数据地址。
junk_message.txt其中的分隔符是制表符'\t'.编码是UTF-8.
首先请确保Python处于3.7以上版本,并安装了pandasjieba还有gensim,如果没有安装,请在命令行输入。

pip install pandas gensim jieba

短信中必定蕴含了是不是垃圾的因子。而这些因子和每个词的语义有关,所以我们要构建一个基于语义的词向量。向量之间的欧氏距离应该代表语意相近度(例如|军人-士兵|<|军人-政治家|),向量之间的减法就代表关系(例如是=巴黎-法国的首都).这种关系的构建不在这篇文章的论述范围内,我们只介绍如何通过word2vec实现这一点。但在之前,我们先用jieba库把句子分词。
首先导入必要的包。

from gensim.models import word2vec
import jieba
import pandas as pd

然后开始分词:

data = pd.read_csv("./junk_message.csv",sep="\t",encoding='utf-8',header=None) #header=None代表表格没有头
sentance  = list(data[1])
st = ',。(),.-*'
def segment_sen(sen):
    sen_list = []
    try:
        sen_list = jieba.lcut(sen) #把句子变成分词后的列表
    except:
        pass
    return [i for i in sen_list if i not in st]   #去除标点符号

我们就用sens_list来进行训练:(默认情况下结果维度是100)

model = word2vec.Word2Vec(sens_list,min_count=1,iter=20)
model.save("word2vec.model")

我们来测试一下,来看看和"活动"意思最相近的词汇。

>>print(model.wv.most_similar("活动"))
[('买', 0.9998474717140198), ('大型', 0.9997648000717163), ('到', 0.9997546672821045), ('点', 0.9997122883796692), ('店', 0.9996930360794067), ('欢迎', 0.9996708035469055), ('赠送', 0.9996692538261414), ('产品', 0.9996534585952759), ('礼品', 0.9996411800384521), ('或', 0.9996049404144287)]

哈哈,买,赠送,欢迎,产品,大型这几个词有点垃圾短信的意思了。那么接下来我们如何运用这个模型呢?我们下期再说。

https://www.jianshu.com/p/d84e71b7c107

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论