数据预处理以及Doc2Vec过程
模型训练之前需要对数据进行预处理,毕竟文本信息很难直接用来拟合。除了简单易懂的One-Hot编码方式,业内更常用的还是Doc2Vec方案。Doc2Vec可以对文本信息进行低维稠密的分布式表达,往往更适合用于分类、拟合等处理,本文也将采用Doc2Vec的技术路线。
一、 数据清洗
数据来源是网络爬虫爬取的中文评论,在将其向量化之前,首先对其进行清洗,去除了标点符号等非建设性字符。
数月前,一位当时的好友“谴责”我发颜表情恶意卖萌的行为,而如今进行数据清洗时才明白颜表情的“污染性”。上图中正则表达式里有大量的硬编码,以用来过滤掉令人难以置信的颜表情,即使这样,数据中仍然有少量的“非建设性字符”,可以忽略。
二、 分词
英文句子中,单词与单词之间有空格间隔,往往不需要进行分词,取而代之的是“组块分析”(chunking)。而中文文本的处理则相对更麻烦,Doc2Vec中的传入数据需要中文分词之后的结果。
本例中采用结巴分词器进行分词,并开启隐马尔科夫参数使其能探索新词。
分词之后的结果用列表存储。
三、 Doc2Vec
Doc2Vec是数据预处理过程中最重要的一个阶段,目的是将文本信息进行低维稠密的分布式表达。本文中基于gensim包实现。
Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得 sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。学出来的向量可以通过计算距离来找 sentences/paragraphs/documents 之间的相似性,可以用于文本聚类,对于有标签的数据,还可以用监督学习的方法进行文本分类,例如经典的情感分析问题。
其基本原理推荐博文基于gensim的doc2vec实践 - CSDN博客。
首先利用爬取的文本训练Doc2Vec:
得到一个模型:
利用这个模型再将分好词的本文向量化:
最终生成向量(部分):
网友评论