基于10个类别假新闻1000篇文章数据训练中文word2vec模型

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38523904/article/details/80306107

爬取语料库

利用爬虫爬取百度网页每个类别假新闻10页,共1000篇文章。爬取的类别如下:

 

数据预处理

汇总

把爬取到的10个txt文件都放在同一个文件夹下,利用程序将这10个txt文件合并在一起。

把汇总的txt文件命名为result.txt。

程序如下:

 file: FileMerage.py
# os模块中包含很多操作文件和目录的函数
import os
# 获取目标文件夹的路径
meragefiledir = os.getcwd() + '\\MerageFiles'
# 获取当前文件夹中的文件名称列表
filenames = os.listdir(meragefiledir)
# 打开当前目录下的result.txt文件,如果没有则创建
file = open('result.txt', 'w')

# 先遍历文件名
for filename in filenames:
    filepath = meragefiledir + '\\' + filename
    # 遍历单个文件,读取行数
    for line in open(filepath):
        file.writelines(line)
    file.write('\n')
# 关闭文件
file.close()

汇总完后的数据如下:

 

分词去停

利用jieba分词将得到的result.txt文件进行分词去停。这里使用的停词表是哈工大停词表。

import jieba
stopwords={}.fromkeys([line.rstrip()for line in open('stopword.txt','r',encoding='UTF-8')]) #创建并返回一个新字典,
jieba.add_word('原标题',1)
a=open("result.txt",'r').read()
segs=jieba.cut(a, cut_all=False)
final=''
for seg in segs:
    #seg=seg.encode('utf-8')
    if seg not in stopwords:
        final+=' '+seg
print(final)
fpath='F:/word2vec.txt'
with open(fpath, 'a') as f:  # 写入到文本文件中
    f.write(str(final) + '\n')

转换完后的数据如下:

 

训练word2vec

我们用gensim中的word2vec工具训练,在pycharm控制台运行如下命令:

Python train_word2vec_model.py corpus_seg.txt corpus.model corpus.vector

#  train_word2vec_model.py用于训练模型
import logging
import os.path
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__=='__main__':
    program = os.path.basename(sys.argv[0]) #os.path.basename表示返回path最后的文件名;sys.argv[0]表示传递命令行参数,参数train_word2vec_model.py为argv[0]
    logger = logging.getLogger(program)
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO) ##
    logging.info("running %s" % ' '.join(sys.argv)) #info表示打印,Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
    if len(sys.argv) < 4:
        print (globals()['__doc__'] % locals()) #全局变量,局部变量
        sys.exit(1)
    inp,outp,outp2 = sys.argv[1:4] #依次表示切割后的文本,模型,向量
    model = Word2Vec(LineSentence(inp),size=400,window=5,min_count=5,workers=multiprocessing.cpu_count()) #.window是句子中当前词与目标词之间的最大距离
    model.save(outp) #训练后的模型保存;# 以二进制格式存储
    model.wv.save_word2vec_format(outp2,binary=False) # 以文本格式存储, 一行是一个词的vector

测试效果

pycharm中输入python命令。

接着依次输入:

import gensim

model = gensim.models.Word2Vec.load('corpus.model')

result = model.most_similar(u'老人')

for word in result:  print (word[0],word[1])

输出如下:

 

 

 

 

展开阅读全文

基于word2vec的LSTM模型

08-23

<p>rn <span> </span> rn</p>rn<p>rn <p>rn 20周年限定:唐宇迪老师一卡通!<span style="color:#337FE5;">可学唐宇迪博士全部课程</span>,仅售799元(原价10374元),<span style="color:#E53333;">还送漫威授权机械键盘+CSDN 20周年限量版T恤+智能编程助手!</span>rn </p>rn <p>rn 点此链接购买:rn </p>rn <table>rn <tbody>rn <tr>rn <td>rn <a href="https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy" target="_blank"><span style="color:#337FE5;">https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy</span></a>rn </td>rn </tr>rn </tbody>rn </table>rn</p>rn购买课程后,可扫码进入学习群<span style="font-family:&quot;">,获取唐宇迪老师答疑</span> rn<p>rn <br />rn</p>rn<p>rn <img src="https://img-bss.csdn.net/201908070609118488.jpg" alt="" /> rn</p>rn<p>rn 系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。rn</p>

没有更多推荐了,返回首页