利用Python构建Wiki中文语料词向量模型

news2024/12/29 10:50:51

利用Python构建Wiki中文语料词向量模型试验

完整代码下载地址:利用Python构建Wiki中文语料词向量模型

本实例主要介绍的是选取wiki中文语料,并使用python完成Word2vec模型构建的实践过程,不包含原理部分,旨在一步一步的了解自然语言处理的基本方法和步骤。文章主要包含了开发环境准备、数据的获取、数据的预处理、模型构建和模型测试四大内容,对应的是实现模型构建的五个步骤。

一、 开发环境准备

1.1 python环境

在python官网下载计算机对应的python版本,本人使用的是Python2.7.13的版本。

1.2 gensim模块

(1)下载模块

Word2vec需要使用第三方gensim模块, gensim模块依赖numpy和scipy两个包,因此需要依次下载对应版本的numpy、scipy、gensim。下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/

(2)安装模块

下载完成后,在python安装目录下的Scripts目录中执行cmd命令进行安装。

    pip install numpy*.whl
    pip install scipy*.whl
    pip install gensim.whl
(3)验证模块是否安装成功

输入python命令进入python命令行,分别输入“import numpy; import scipy; import gensim; ”没有报错,即安装成功!

二、Wiki数据获取

2.1 Wiki中文数据的下载

到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,大小约为1.3G,里面是一个XML文件。
下载地址如下:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2

2.2 将XML的Wiki数据转换为text格式

(1)python实现

编写python程序将XML文件转换为text格式,使用到了gensim.corpora中的WikiCorpus函数来处理维基百科的数据。python代码实现如下所示,文件命名为1_process.py。

1_process.py--wiki文件转换代码

(2)运行程序文件

在代码文件夹下运行如下cmd命令行,即可得到转换后生成的文件wiki.zh.txt。

    D:\PyRoot\iDemo\wiki_zh>python 1_process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.txt
(3)得到运行结果
   2017-04-18 09:24:28,901: INFO: running 1_process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.txt
   2017-04-18 09:25:31,154: INFO: Saved 10000 articles.
   2017-04-18 09:26:21,582: INFO: Saved 20000 articles.
   2017-04-18 09:27:05,642: INFO: Saved 30000 articles.
   2017-04-18 09:27:48,917: INFO: Saved 40000 articles.
   2017-04-18 09:28:35,546: INFO: Saved 50000 articles.
   2017-04-18 09:29:21,102: INFO: Saved 60000 articles.
   2017-04-18 09:30:04,540: INFO: Saved 70000 articles.
   2017-04-18 09:30:48,022: INFO: Saved 80000 articles.
   2017-04-18 09:31:30,665: INFO: Saved 90000 articles.
   2017-04-18 09:32:17,599: INFO: Saved 100000 articles.
   2017-04-18 09:33:13,811: INFO: Saved 110000 articles.
   2017-04-18 09:34:06,316: INFO: Saved 120000 articles.
   2017-04-18 09:35:01,007: INFO: Saved 130000 articles.
   2017-04-18 09:35:52,628: INFO: Saved 140000 articles.
   2017-04-18 09:36:47,148: INFO: Saved 150000 articles.
   2017-04-18 09:37:41,137: INFO: Saved 160000 articles.
   2017-04-18 09:38:33,684: INFO: Saved 170000 articles.
   2017-04-18 09:39:37,957: INFO: Saved 180000 articles.
   2017-04-18 09:43:36,299: INFO: Saved 190000 articles.
   2017-04-18 09:45:21,509: INFO: Saved 200000 articles.
   2017-04-18 09:46:40,865: INFO: Saved 210000 articles.
   2017-04-18 09:47:55,453: INFO: Saved 220000 articles.
   2017-04-18 09:49:07,835: INFO: Saved 230000 articles.
   2017-04-18 09:50:27,562: INFO: Saved 240000 articles.
   2017-04-18 09:51:38,755: INFO: Saved 250000 articles.
   2017-04-18 09:52:50,240: INFO: Saved 260000 articles.
   2017-04-18 09:53:57,526: INFO: Saved 270000 articles.
   2017-04-18 09:55:01,720: INFO: Saved 280000 articles.
   2017-04-18 09:55:22,565: INFO: finished iterating over Wikipedia corpus of 28285 5 documents with 63427579 positions (total 2908316 articles, 75814559 positions before pruning articles shorter than 50 words)
   2017-04-18 09:55:22,568: INFO: Finished Saved 282855 articles.

由结果可知,31分钟运行完成282855篇文章,得到一个931M的txt文件。

三、Wiki数据预处理

3.1 中文繁体替换成简体

Wiki中文语料中包含了很多繁体字,需要转成简体字再进行处理,这里使用到了OpenCC工具进行转换。

(1)安装OpenCC

到以下链接地址下载对应版本的OpenCC,本人下载的版本是opencc-1.0.1-win32。
https://bintray.com/package/files/byvoid/opencc/OpenCC
另外,资料显示还有python版本的,使用pip install opencc-python进行安装,未实践不做赘述。

(2)使用OpenCC进行繁简转换

进入解压后的opencc的目录(opencc-1.0.1-win32),双击opencc.exe文件。在当前目录打开dos窗口(Shift+鼠标右键->在此处打开命令窗口),输入如下命令行:

 opencc -i wiki.zh.txt -o wiki.zh.simp.txt -c t2s.json

则会得到文件wiki.zh.simp.txt,即转成了简体的中文。

(3)结果查看

解压后的txt有900多M,用notepad++无法打开,所以采用python自带的IO进行读取。Python代码如下:

   import codecs,sys
   f = codecs.open(‘wiki.zh.simp.txt‘,‘r‘,encoding="utf8")
   line = f.readline()
   print(line)

繁体中文示例截图如下所示:

wiki原始数据

转换后的简体中文截图如下所示:

Wiki转换后简体数据

3.2 结巴分词

本例中采用结巴分词对字体简化后的wiki中文语料数据集进行分词,在执行代码前需要安装jieba模块。由于此语料已经去除了标点符号,因此在分词程序中无需进行清洗操作,可直接分词。若是自己采集的数据还需进行标点符号去除和去除停用词的操作。
Python实现代码如下:

2_jieba_participle.py--结巴分词代码

代码执行完成后得到一个1.12G大小的文档wiki.zh.simp.seg.txt。分词结果截图如下所示:

Wiki结巴分词

四、Word2Vec模型训练

(1)word2vec模型实现

分好词的文档即可进行word2vec词向量模型的训练了。文档较大,本人在4GWin7的电脑中报内存的错误,更换成8G内容的Mac后即可训练完成,且速度很快。具体Python代码实现如下所示,文件命名为3_train_word2vec_model.py。

3_train_word2vec_model.py--模型训练代码

(2)运行结果查看
   2017-05-03 21:54:14,887: INFO: training on 822697865 raw words (765330910 effective words) took 1655.2s, 462390 effective words/s
   2017-05-03 21:54:14,888: INFO: saving Word2Vec object under /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model, separately None
   2017-05-03 21:54:14,888: INFO: not storing attribute syn0norm
   2017-05-03 21:54:14,889: INFO: storing np array 'syn0' to /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model.wv.syn0.npy
   2017-05-03 21:54:16,505: INFO: storing np array 'syn1neg' to /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model.syn1neg.npy
   2017-05-03 21:54:18,123: INFO: not storing attribute cum_table
   2017-05-03 21:54:26,542: INFO: saved /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model
   2017-05-03 21:54:26,543: INFO: storing 733434x400 projection weights into /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.vector

摘取了最后几行代码运行信息,代码运行完成后得到如下四个文件,其中wiki.zh.text.model是建好的模型,wiki.zh.text.vector是词向量。

生成模型

五、模型测试

模型训练好后,来测试模型的结果。Python代码如下,文件名为4_model_match.py。

4_model_match.py--模型测试代码

运行文件得到结果,即可查看给定词的相关词。

模型匹配结果

至此,使用python对中文wiki语料的词向量建模就全部结束了,wiki.zh.text.vector中是每个词对应的词向量,可以在此基础上作文本特征的提取以及分类。

完整代码下载地址:利用Python构建Wiki中文语料词向量模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CH450/TM1637 驱动调试

CH450:支持带有中断的扫描键盘、数码显示; TM1637:键盘扫描/数码显示; CH450/TM1637 I2C的时序调试有问题,总体上注意以下几点 MSB还是LSB,这两个不一样;(TM1637从低到高传输&…

PhpStorm 使用全局搜索得不到结果

一、前言二、解决一、前言 全文搜索快捷键:ctrl shift f,如果 没有弹出搜索框。看下快捷键是不是被其他软件占用了:比如搜狗输入法现在的问题是:输入想要搜索的关键字,但是没用搜出来结果(实际上关键字在…

BurpSuite与Xray联动进行被动扫描实战

今天继续给大家介绍渗透测试相关知识,本文主要内容是BurpSuite与Xray联动进行被动扫描实战。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调&#xf…

Linux权限及其理解

文章目录:Linux权限的概念Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的设置方法权限掩码目录的权限粘滞位总结Linux权限的概念 与其它系统相比,Lin…

文件包含漏洞渗透与攻防(一)

目录 前言 什么是文件包含漏洞 文件包含漏洞类型 本地文件包含 远程文件包含 PHP相关函数和伪协议 函数 PHP伪协议 CTF题目案例 文件包含漏洞挖掘与利用 URL关键字 代码审计 利用流程 文件包含漏洞修复方案 前言 随着网站业务的需求,程序开发人员一…

【ACWING】【图的广度遍历】【848有向图的拓扑顺序】

给定一个 n个点 m条边的有向图,点的编号是 1到 n,图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。 若一个由图中所有点构成的序列 A满足:对于图中的每条边 (x,y)&#…

STM32MP157驱动开发——Linux CAN驱动

STM32MP157驱动开发——Linux CAN驱动一、简介1.电气属性2.CAN协议3.CAN速率4.CAN FD 简介二、驱动开发1.修改设备树2.FDCAN1控制器节点3.修复 m_can_platform.c4.使能 CAN 总线5.使能FDCAN外设驱动三、运行测试1.移植 iproute2 和 can-utils 工具2.测试1)收发测试&…

数据结构排序

文章目录直接插入排序直接插入排序 核心代码 void InsertSort(int arr[], int n) {for (int i 2; i < n; i) ///直接从第二个元素开始遍历{if (arr[i - 1] > arr[i]) //判断前一个元素和当前元素的大小&#xff0c;若前一个元素小于当前元素才需要插入{arr[0] …

Markdown之折叠语法以及表格内父子折叠

背景 在编写接口文档的时候发现一些特别扭的问题&#xff0c;就是一个表格来说明入参和出参的时候&#xff0c;怎么去表达嵌套的父子关系呢&#xff1f;查看了大厂的接口文档&#xff0c;比如微信支付&#xff0c;他们是有完善的接口文档页面&#xff0c;也都全部标记出了表格…

pycharm-qt5-基础篇1

pycharm-qt5-基础篇1一: QT5介绍1> 主要的特性2> pycharm 外部工具及功能1. Qt Designer2. PyUic3> PyUrcc二: pycharm QT5 环境搭建1> 虚拟环境搭建2> 安装 pyqt5、pyqt5-tools3> 将QT工具添加到环境变量4> 配置PyCharm三: QT5 demo四: pyinstaller 打包…

Java 并发编程知识总结【三】

4. CompletableFuture 4.1 Future 和 Callable 接口 Future 接口定义了操作异步任务执行一些方法&#xff0c;如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。 Callable 接口中定义了需要有返回的任务需要实现的方法。 使用途径&am…

详解Spring面试AOP

文章目录什么是 AOP&#xff1f;AOP作用AOP核心概念&#xff08;来自黑马程序课程&#xff09;AOP 解决了什么问题&#xff1f;AOP 为什么叫做切面编程&#xff1f;总结1 AOP的核心概念2 切入点表达式3 五种通知类型4 通知中获取参数AOP是面向切面编程&#xff0c;是一个设计思…

Java同学录系统同学录网站

简介 用户注册可以创建班级&#xff08;创建者即为群主&#xff09;&#xff0c;用户也可以查找班级申请加入&#xff0c;群主添加同学的联系方式等&#xff0c;可以在班级里留言&#xff0c;管理相册等&#xff0c;还可以指定其他人为群主或者解散班级群&#xff0c;群里的用…

【ROS】—— ROS快速上手(一)

文章目录前言1. ROS-melodic 安装2. ROS基本操作2.1 创建工作空间2.2 创建功能包2.3 HelloWorld(C版)2.4 HelloWorld(Python版)3. Vscode ROS 插件4. vscode 使用基本配置4.1 启动 vscode4.2 vscode 中编译 ros5. launch文件演示6. ROS文件系统7. ROS文件系统相关命令前言 &…

EMNLP22评测矩阵:FineD-Eval: Fine-grained Automatic Dialogue-Level Evaluation

总结 在选择维度时&#xff0c;有点意思。 FineD-Eval: Fine-grained Automatic Dialogue-Level Evaluation 一般对话生成任务的评测也是从多个维度出发&#xff0c;这篇文章先选择了几个相关性程度低的维度&#xff0c;然后&#xff0c;在挑选后的维度上&#xff0c;测评相…

动态规划经典题:编辑距离(hard) 详解,看了还不会你来砍我

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、最长公共子序列二、两个字符串的删除操作三、编辑距离Hard为了更好的理解&#xff0c;我们从易到难的来解决编辑距离的问题一、最长公共…

Tic-Tac-Toe可能棋局遍历的实现(python)

目录 1. 前言 2. 算法流程 3. 代码实现 4. 一个思考题&#xff1a;代码实现中的一个坑 5. 结果正确吗&#xff1f; 1. 前言 在上一篇博客中&#xff1a;Tic-Tac-Toe可能棋局搜索的实现&#xff08;python&#xff09;_笨牛慢耕的博客-CSDN博客Tic-Tac-Toe中文常译作井字棋…

基础数学(五)——数值积分

文章目录考试要求基础概念代数精度&#xff08;必考题&#xff09;代数精度的定义求代数精度的例题&#xff08;期末考试数值积分第一个大题&#xff09;数值积分公式的构造插值型求积公式&#xff08;必考题&#xff09;插值型数值积分公式定理Newton-Cotes求积公式Cotes公式代…

webpack 学习

1.拆分、合并 webpack-merge devlopment production 2.webpack-dev-serve devServer: { port contentBase progress open compress proxy:{ xxx:{ target:..., pathRewrite:{ "^/api" }, changeOrigin:true } } } 3.处理样式 css module:{ rules:[ { test:/\.sc…

qt开关控件设计(手把手从零开始)

从零开始手把手教你设计自己的qt控件1 说明1.1 显示效果1.2 控件特性1.3 设计方法2 控件需求分析2.1 必要需求2.1 顺带需求&#xff08;锦上添花&#xff09;3 功能设计3.1 设计思路&#xff08;重点内容&#xff09;3.2 自适应大小3.3 开关动画3.4 控件绘制4 总体代码1 说明 …