制作百科词向量

简介: 制作百科词向量流程总结

参考大佬:https://zhuanlan.zhihu.com/p/40016964
但是可能里面的库经过更新,目前出现了一些错误,经过网上搜索后,总结一下。

分为如下步骤:

  1. 下载
  2. WikiExtractort提取
  3. 繁体文转化为简体文
  4. 分词
  5. 训练模型(获得词向量)
  6. 测试

1.下载

网址如下:https://dumps.wikimedia.org/zhwiki/,具体可见最开始的那个网站,很好的!!!

下载后得到的文件如下:
1.png

2.WikiExtractort提取

2.1 准备WikiExtractort代码

WikiExtractort.py文件复制到项目下

2.2 使用WikiExtractort.py文件

    python WikiExtractor.py -b 100M -o 输出文件存放路径 语料存放路径

    # -b 以100M为单位进行切分,有时候可能语料太大,我们可能需要切分成几个小的文件(默认)。这里我只是用到过存放到一个文件中(因为文件不大),如果需要多个文件,百度查查!!!

假设下载的文件1节中的那个,并且输出的文件名为wiki_00

python WikiExtractor.py -b 500M -o zhwiki-20220820-pages-articles-multistream1.xml-p1p187712.bz2 wiki_00

最终你翻翻文件夹,可以找到wiki_00文件(找新产生的文件夹就行,之前我删除了,忘了名字,又懒得重新提取)

最终生成的文件如下:
2.png

2.3 错误1

Wikiextractor.py运行出现.extractor不存在的问题!!!

将下面这行的内容更换:

更换前

from .extract import Extractor, ignoreTag, define_template, acceptedNamespaces

更换后

from wikiextractor.extract import Extractor,ignoreTag,define_template,acceptedNamespaces

其实就是加了一个wikiextractor

3.繁体文转化为简体文

使用的opencc

3.1 安装opencc

下载安装包后解压即可

3.2 文件结构

解压后,结构如下
3.png
其中最重要的就是红框标出来的两个内容:

1.bin:这里是opencc的启动文件。
2.share:里面是opencc语言转换的配置文件,在这个文件夹你能找到下面的这些文件。
4.png

3.3 使用

因为我们要运行opencc的exe文件,可以配置一下环境变量,但是后面写命令的时候配置文件仍然需要绝对路径。

首先,进入项目文件打开一个终端。然后,使用opencc命令

opencc -i 需要转换的文件路径 -o 转换后的文件路径 -c 配置文件路径

假设我需要转换得文件就在项目文件夹内,名为wiki_00,转换后的文件名为zhwiki_jian_zh.txt,因为我们是繁体转中文,所以配置文件名是t2s.json,我将这个文件移动到了项目下。因此,命令如下

opencc -i wiki_00 -o zhwiki_jian_zh.txt -c t2s.json
![5.png](https://ucc.alicdn.com/pic/developer-ecology/y4hik5jbsrqr6_9be7b3f89fcc498cb7a95909eec9ae81.png)
解压后文件及内容(下载的东西不一样,内容会不同)大概如下

# 4.分词
用的就是上面那个大佬文章的代码,如果缺少什么依赖库,下载就行:

import jieba.analyse
import codecs

以写的方式打开原始的简体中文语料库

f=codecs.open('zhwiki_jian_zh.txt','r',encoding="utf8")

将分完词的语料写入到wiki_jian_zh_seg-189.5.txt文件中

target = codecs.open("wiki_jian_zh_seg-189.5.txt", 'w',encoding="utf8")

print('open files')
line_num=1
line = f.readline()

循环遍历每一行,并对这一行进行分词操作

如果下一行没有内容的话,就会readline会返回-1,则while -1就会跳出循环

while line:
print('---- processing ', line_num, ' article----------------')
line_seg = " ".join(jieba.cut(line))
target.writelines(line_seg)
line_num = line_num + 1
line = f.readline()

关闭两个文件流,并退出程序

f.close()
target.close()
exit()


**修改输入文件路径和输出和文件路径就行**

**结果如下,可以与3.3节的结果图做个对比**
![6.png](https://ucc.alicdn.com/pic/developer-ecology/y4hik5jbsrqr6_c15cc04a694f4bf0ada694db52d635f4.png)
# 5.训练分词

### 5.1 `LineSentence(file_path)`

```python
from gensim.models.word2vec import LineSentence

sentences = LinSentence("file_path")

通过效果来看,作用将file_path路径下的文件内容一行行读取。

5.2 Word2Vec

from gensim.models import Word2Vec

    '''
    sentences:格式简单:一句话=一行; 单词已经过预处理并被空格分隔
    size:是每个词的向量维度
    window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词
    min-count:设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
    workers:是训练的进程数(需要更精准的解释,请指正),默认是当前运行机器的处理器核数。这些参数先记住就可以了
    sg ({0, 1}, optional) – 模型的训练算法: 1: skip-gram; 0: CBOW
    alpha (float, optional) – 初始学习率
    iter (int, optional) – 迭代次数,默认为5
    '''
model = Word2Vec(指定上述参数)

5.3 model.save

model为5.2创建的word2vec模型

作用是存储模型

model.save("output_model_path")  # 将模型保存到指定路径下

# output_file_path: 后缀名为model,如path.model

5.4 model.wv.save_word2vec_format

作用是存储词向量

model.wv.save_word2vec_format("output_voc_path", binary=False)

# output_voc_path: 后缀名为vector,如path.vector

5.5 实例

import os
import sys
import logging
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import multiprocessing


if __name__ == "__main__":
    program = os.path.basename(sys.argv[0])
    # print(program)  # word2vec_model.p
    logger = logging.getLogger(program)
    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))
    if len(sys.argv) < 4:
        print(globals()['__doc__'] % locals())
        sys.exit(1)
    inp, outp1, outp2 = sys.argv[1: 4]
    model = Word2Vec(sentences=LineSentence(inp), vector_size=500, window=5, min_count=5, workers=multiprocessing.cpu_count())
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)  # 不以C语言可以解析的形式存储词向量

就是上面大佬的代码!!!

保存的词向量如下:

7.png

6.测试

6.1 Word2Vec.load

作用是下载模型

model = Word2Vec.load('model_path')

# model_path: 后缀名为model的文件

6.2 预测函数

类似于model.wv.most_similar的函数,下面这个网站有用法https://www.jb51.net/article/164661.htm

https://www.jb51.net/article/164661.htm

这里有一定的区别,以most_similar为例,网站里的代码是这样使用的

model.most_similar(u"key", topn=20)

但是在我这里这样用会提示找不到most_similar。经过百度,most_similar函数由model中的wv模块调用,因此应该如下

model.vw.most_similar(u"key", topn=20)

https://www.jb51.net/article/164661.htm

这里有一定的区别,以most_similar为例,网站里的代码是这样使用的

model.most_similar(u"key", topn=20)

但是在我这里这样用会提示找不到most_similar。经过百度,most_similar函数由model中的wv模块调用,因此应该如下

model.vw.most_similar(u"key", topn=20)

如果其他函数有类似错误,可以加vw试试!!!

相关文章
|
机器学习/深度学习 人工智能 物联网
Facechain使用教程:3张照片就能生成个人写真,还完全免费
下面4张图片,小伙伴们有没有看出来哪些是原图,哪些是AI生成的呢?
935 0
|
7月前
|
人工智能
MidJourney以图生图的详细教程(含6种案例介绍)(下)
MidJourney以图生图的详细教程(含6种案例介绍)
|
7月前
|
人工智能
MidJourney以图生图的详细教程(含6种案例介绍)(上)
MidJourney以图生图的详细教程(含6种案例介绍)
|
安全
创建维基WIKI百科和建立百度百科有何不同?
创建维基WIKI百科和建立百度百科有何不同?
104 0
|
存储 弹性计算 固态存储
阿里云服务器租用费(图文)详细介绍和总结
阿里云服务器是一种基于云计算技术的虚拟服务器,由阿里巴巴集团的云计算服务分支部门提供。它可以帮助用户快速构建和部署应用程序,提供强大的计算、存储、网络等基础设施服务,并且具有高性能、稳定可靠、灵活可扩展和成本优势等特点。
|
安全
论文免费查重网站推荐
本文介绍一些靠谱、安全、免费的论文查重平台~
1837 1
百度百科创建个人词条的流程是怎样的?
百度百科创建个人词条的流程是怎样的?
232 0
|
存储 弹性计算 固态存储
阿里云服务器价格表新鲜出炉来看看吧!
阿里云服务器一年多少钱?阿里云服务器租用费用?阿里云服务器CPU内存怎么收费?阿里云服务器公网带宽收费标准价格表
1493 0
阿里云服务器价格表新鲜出炉来看看吧!
|
搜索推荐 安全
如何创建头条的快懂百科?头条快懂百科词条建立技巧
头条系的两大拳头产品,一个是抖音,一个是今日头条。现在头条系的运营重心向抖音倾斜,而抖音搜索里也存在一个固定的位置给快懂百科,这个位置不是像短视频一样滚动更新,做抖音搜索优化的话,小马识途营销顾问认为用快懂百科要比做短视频占位省力一些。
181 0