[NLP]基于维基百科中文语料库的Word2Vec模型训练

2023-10-28 06:40

本文主要是介绍[NLP]基于维基百科中文语料库的Word2Vec模型训练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:该博客代码参考于
参考博客:使用中文维基百科语料库+opencc+jieba+gensim训练一个word2vec模型
参考博客:使用中文维基百科训练word2vec模型

零、 模型训练环境
  1. Windows10-X64 、 python2.7 、 python3.6
  2. pip install jieba
  3. pip install gensim
一、下载维基百科语料库

数据下载地址
该博客使用的是 24-Nov-2019 的语料库
在这里插入图片描述

二、 利用WikiExtractor.py抽取正文

WikiExtractor.py Copy链接
直接把py文件中的源码直接复制到新的 .py 中即可。
下图是模型训练相关文件:
在这里插入图片描述
执行命令

python WiKiExtractor.py -b 500M -o zhwiki zhwiki-20191120-pages-articles-multistream.xml.bz2

我们最终会生成zhwiki文件夹
在这里插入图片描述
得到三个文本文件
./zhwiki/AA/wiki_00
./zhwiki/AA/wiki_01
./zhwiki/AA/wiki_02

三、 中文繁体转换成简体简体
直接使用开源项目转换工具opencc

转换工具下载地址
黑框框起来的是我下载的版本
在这里插入图片描述

执行文件添加到环境变量中

方法1. 解压后将该工具bin目录添加到环境变量中
方法2. 有些工具解压后灭有 bin 目录,我们首先找到opencc.exe可执行文件,将其路径添加到环境变量中
在这里插入图片描述

运行命令

我是在该路径中运行的命令,为了方便我先将之前的三个文件拷贝到该路径下,执行完后再拷贝到**./zhwiki/** 下。
在这里插入图片描述

.\opencc -i wiki_00 -o zh_wiki_00 -c  /path/to/t2s.json
.\opencc -i wiki_01 -o zh_wiki_01 -c  /path/to/t2s.json
.\opencc -i wiki_02 -o zh_wiki_02 -c  /path/to/t2s.json

在这里插入图片描述
最终我把生成的zh_wiki_00等文件拷贝到 /zhwiki/ 中

四、符号处理 ,整合文件

python 2.7 环境中运行
exec_sum.py

#!python2
import re
import sys
import codecs
def myfun(input_file):p1 = re.compile(ur'-\{.*?(zh-hans|zh-cn):([^;]*?)(;.*?)?\}-')p2 = re.compile(ur'[(\(][,;。?!\s]*[)\)]')p3 = re.compile(ur'[「『]')p4 = re.compile(ur'[」』]')outfile = codecs.open('std_zh_wiki', 'a+', 'utf-8')with codecs.open(input_file, 'r', 'utf-8') as myfile:for line in myfile:line = p1.sub(ur'\2', line)line = p2.sub(ur'', line)line = p3.sub(ur'“', line)line = p4.sub(ur'”', line)outfile.write(line)outfile.close()
if __name__ == '__main__':if len(sys.argv) != 2:print("Usage: python script.py inputfile")sys.exit()reload(sys)sys.setdefaultencoding('utf-8')input_file = sys.argv[1]myfun(input_file)

方法一:将三个文件处理后追加到一个文件中即 std_zh_wiki

python .\exec_sum.py zh_wiki_00
python .\exec_sum.py zh_wiki_01
python .\exec_sum.py zh_wiki_02

方法二:我是使用 pycharm IDE 运行了 三次该文件,每次运行修改 input_file(zh_wiki_00、zh_wiki_01、zh_wiki_02) (更改python环境更方便)
在这里插入图片描述

五、jieba 分词操作

exec_cut.py

import logging, jieba, os, redef get_stopwords():logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO)# 加载停用词表stopword_set = set()with open("stopwords.txt", 'r') as stopwords:  for stopword in stopwords:stopword_set.add(stopword.strip("\n"))return stopword_setdef parse_zhwiki(read_file_path, save_file_path):# 过滤掉<doc>regex_str = "[^<doc.*>$]|[^</doc>$]"file = open(read_file_path, "r")output = open(save_file_path, "w+")content_line = file.readline()stopwords = get_stopwords()article_contents = ""while content_line:match_obj = re.match(regex_str, content_line)content_line = content_line.strip("\n")if len(content_line) > 0:if match_obj:words = jieba.cut(content_line, cut_all=False)for word in words:if word not in stopwords:article_contents += word + " "else:if len(article_contents) > 0:output.write(article_contents.encode('utf-8','ignore')+ "\n")article_contents = ""content_line = file.readline()output.close()
parse_zhwiki('./std_zh_wiki', './cut_std_zh_wiki')
  1. 该操作也是在 python 2.7环境下操作
  2. 分词时间相对较长,请耐心等待
六、 训练Word2Vec模型
from gensim.models import word2vec
import logginglogging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.LineSentence('./cut_std_zh_wiki')
model = word2vec.Word2Vec(sentences,size=200,window=5,min_count=5,workers=4)
model.save('WikiCHModel')

训练完后,会生成三个文件
在这里插入图片描述

  1. 如果python3环境下出现编码问题,请通过某些工具将文件转换成utf-8编码
  2. 如果无法更改编码,请使用python2.7
七、 模型测试
from gensim.models import word2vec
import logging
from gensim import models
model = word2vec.Word2Vec.load('WikiCHModel')print(model.wv.similarity("儿童", '狗')) #两个词的相关性

若博客中内容存在问题,可在评论处留言,本人将及时更正相关内容

这篇关于[NLP]基于维基百科中文语料库的Word2Vec模型训练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_41595507/article/details/103398000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/291390

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下