将预训练的词向量处理成gensim可加载的格式

在自然语言处理中,词向量已经成为了必不可少的工具。我们可以从网上下载别人已经预训练好的词向量文件加载使用。不过,使用gensim加载词向量时,词向量文件需要满足一定的格式。

一般的格式是:

词向量的总数 词向量的维度
词,对应的词向量
词,对应的词向量

不过通常别人的词向量文件中可能会缺少第一行的信息,因此我们需要加上这行的信息,也就是在下载的词向量文件的第一行添加词向量的总数 词向量的维度这个信息,词向量文件才可以被gensim加载使用。

那么下面就贴上加上这行信息的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import shutil
from sys import platform

# 需要增加开头信息的词向量文件的路径
pretrained_file = "here is your pretrained w2c file path"
# 加完开头信息后的新词向量的文件名称
gensim_file = "here is name of the new file which can be loaded by gensim"
# 词向量的维度,以便在开头添加信息,这里以300维为例
num_dim = 300

# 计算行数,就是词向量/单词数
def getFileLineNums(filename):
f = open(filename, 'r', errors='ignore')
count = 0
for line in f:
count += 1
return count

# Linux下打开词向量文件,在开头增加一行,即:词向量的总数 词向量的维度
def prepend_line(infile, outfile, line):
with open(infile, 'r', errors='ignore') as old:
with open(outfile, 'w') as new:
new.write(str(line) + "\n")
shutil.copyfileobj(old, new)

# Windows下打开词向量文件,在开头增加一行,即:词向量的总数 词向量的维度
def prepend_slow(infile, outfile, line):
with open(infile, 'r', errors='ignore') as fin:
with open(outfile, 'w') as fout:
fout.write(line + "\n")
for line in fin:
fout.write(line)

def load(filename, gensim_file, num_dim):
num_lines = getFileLineNums(filename)
gensim_file = gensim_file
gensim_first_line = "{} {}".format(num_lines, num_dim)
# Prepends the line
if platform == "linux" or platform == "linux2":
prepend_line(filename, gensim_file, gensim_first_line)
else:
prepend_slow(filename, gensim_file, gensim_first_line)

# 调用load函数,完成信息添加并保存新文件(新文件的路径和此脚本相同)
load(pretrained_file)

OK,大功告成,接下来就可以用gensim来加载词向量文件啦!

1
2
3
4
5
from gensim.models import KeyedVectors

# 词向量会有二进制格式和非二进制格式,以下是针对这两种格式的词向量加载方法
w2v_bin = KeyedVectors.load_word2vec_format(gensim_file, binary=True, unicode_errors='ignore')
w2v_nobin = KeyedVectors.load_word2vec_format(gensim_file, binary=False, unicode_errors='ignore')
-------------本文结束感谢您的阅读-------------

本文标题:将预训练的词向量处理成gensim可加载的格式

文章作者:丁鹏

发布时间:2018年09月15日 - 02:09

最后更新:2018年09月28日 - 20:09

原始链接:http://deepon.me/2018/09/15/将预训练的词向量处理成gensim可加载的格式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

给博主投币,共同实现开源世界
0%