短文本分类 (一): 构建词向量

短文本分类 (一): 构建词向量,第1张

我的目标是利用tenserflow得到一个可以对新闻标题进行准确分类的分类器。

首先我需要有新闻标题的原始数据,因此我从今日头条抓取了近十万条新闻标题用于接下来的训练工作。

得到原始标题数据后,我需要对其进行分词构建语料库,分词我使用 jieba 这个第三方库。

之后要通过语料库用Word2vec算法对分词进行训练,这里我使用 gensim 的 word2vec 。

梳理下准备条件:

我抓取的数据存放在MYSQL,因此我将查询出标题进皮陆行分词后写入语料文件: yuliao.txt 。

虽然 jieba 分词已经很不错了,但是对于某些热门前乎新词和人名等还是不够准确,所以有必要自定义一些词汇提供给 jieba 。

我在 user_dict.txt 中定义了一燃悔顷些 jieba 没有正确分出来的词:

然后加载到我们的程序中:

执行 load_data 方法便会生成语料文件。

导入 gensim ,加载我们的语料文件,开始训练模型:

训练好模型保存为文件,下次可以直接从文件导入,不必再进行训练。

我们看下模型的效果,运行 print_most_similar 测试方法,输出:

效果还可以,如果语料再多一点会更好。

训练好的模型相近意思的词在向量空间中的位置也是相似的,这样我们依据词向量做分类训练,本质上是将相近意思的句子归类。

当然最终我们要得到某个词的向量表示形式:

word2vec是google在2013年开源的一个获取词向量的工具包,word2vec中用到的两个重要模型为CBOW模型(Continuous Bag-of-Words Moedl)和Skip-gram模型(Continuous Skip-gram Model)。他还包含两个提速手段:分旅缓瞎层softmax和负采样

网络结构

cbow的图

网络结构包括三层:输入层、投影层和输出层

中心词 的前后共 个词的词向量 ,

是词向量的长度【这里就是词的个数,即词的one-hot向量】

将每个输入的词向量全连接为长度 的向量

然后将 个向量做求和累加,即

将 全连接为长度 的向量,最后用softmax作为激活函数,计算交叉熵损失

缺点:求softmax的时候需要对每个词、字向量都计算一遍输出概率并进行归一化,在几十万词汇量的语料上是令人头疼的

用哈夫曼树【一种带权路径长度最短的二叉树,也称为最优二叉树】按照词频组织词库中的所有词汇,每个词拆空在都在树的叶子节点上,他哪族们的权重由词频得来

word2vec(cbow+skip-gram+hierarchical softmax+Negative sampling)模型深度解析

word2vec中的数学


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12168377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存