首页 > 编程知识 正文

word2vec keras,word2vector词向量

时间:2023-05-03 12:03:11 阅读:33178 作者:3660

Word2vec训练中文单词向量

发布时间: 2018-08-16 10:55、

浏览次数: 445

、标签:

单词

威盛集团

Word2vec训练中文单词向量

将所有词汇读入列表中,将每个句子分为单词的句子作为列表的要素。 如下所示

[“I”,“am”,“a”,“girl'],[‘he”,“is”,“a”,“boy']

fromgensim.modelsimportword2vec

导入操作系统

导入系统

#以下代码是训练字矢量的代码

sentence=[]

word=[]

tag=0

withopen('data_all.txt ',encoding='utf-8 ' ) as fp: ##

打印(类型) FP ) )

for line in fp.readlines () :

#是打印(行)

line=line.strip (

if line=='':

连续

tag =1

是打印(tag )

if tag 10000:

布雷克

if tag==1:

line1=[''] line.split (

Sentence.append(line1) )

word.append (' ) )

else:

Sentence.append(line.split ) )

for each in line.split () :

if each not in word:

word.append(each )

#打印(len (sentence ) )

模型=word2vec (sentence,sg=1,size=100,window=5,min_count=1,

negative=3,sample=0.001,hs=1,工作器=4)

模型. save (dict _ data _ model ) )

模型=word2vec.load (dict _ data _ model ) #加载模型

F1=open(data_vec.txt )、) w )、encoding=(utf-8 ) ) ) ) ) ) 65

f1 .写入(str (len ) word ) ) ) str ) 100 ) (n ) ) ) ) ) 652

for each in word:

#打印(each ) ) )。

str1=' '

for e in model[each]:

if str1=='':

str1=str(e )

else:

str1=str1''str(e ) ) )

F1.write(each''str1'n ' ) ) )。

f1.close () )。

打印(len ) word ) )

打印(len (列表)集word ) )

训练语向量词汇较大时,会出现内存不足的问题,可以使用以下代码进行修正。

class sentences_generator () :

def _ _ init _ _ (自,文件名) :

self.filename=filename

def __iter__(self ) :

forlineinopen(self.filename ) :

sentence=line.rstrip (' ' )

Ield传感器

传感器=sentences _ generator (data _ all.txt )。

模型=word2vec (sentence,sg=1,size=100,window=5,min_count=1,

negative=3,sample=0.001,hs=1,工作器=4)

模型. save (dict _ data _ model ) )

模型=word2vec.load (dict _ data _ model ) #加载模型

F1=open(data_vec.txt )、) w )、encoding=(utf-8 ) ) ) ) ) ) 65

f1 .写入(str (len ) word ) ) ) str ) 100 ) (n ) ) ) ) ) 652

for each in word:

#打印(each ) ) )。

str1=' '

for e in model[each]:

if str1==

'':

str1 = str(e)

else:

str1 = str1+' '+str(e)

f1.write(each+' '+str1+'n')

f1.close()

print(len(word))

print(len(list(set(word))))

相关的博客网址:https://blog.csdn.net/thriving_fcl/article/details/51406780

第一种方法是将语料转换为一个python的list作为输入,但是语料较大时,大到报内存不够的错误时,该方法就失效了

第二种方法主要是为了解决第一种方法出现的问题,“

gensim的API并不要求sentences必须是list对象,只要输入的sentences是iterable的就行,那我们只要一次载入一个句子,训练完之后再将其丢弃,内存就不会因为语料过大而不够了。我们通过下面的代码就可以生成一个iterator。事先已经将训练语料

分词,词与词之间采用空格分开,并保存在一个文档里。

其实用一个函数也可以生成一个迭代器,只不过函数生成的迭代器迭代一轮就失效了,而这里需要迭代多轮。第一轮统计词频,用于生成哈夫曼树。后续用于训练,因此封装成一个类。

”(此段是引用上面博客中的内容)

##相关参数的解释

sg            定义训练算法,默认是sg=0,采用CBOW,否则sg=1采用skip-gram

size         是特征向量的维数,默认值为100维

window       设置当前词汇与上下文词汇的最大间距,默认值为5窗口

alpha        是最初学习速率,随着训练的进行,逐渐减少至0

seed         用于随机数生成器

min_count    设置最低有效词频,过滤掉一些低频词

max_vocab_size

设置词向量训练期间的最大RAM,如果词汇量超过这个就减掉词频最小的那个,设置None则不限制,每1000万字大概需要1Gb内存

sample        设置高频词随机下采样的阈值,默认值为1e-3,有效范围为(0,1e-5)

workers       设置几个工作线程来训练模型(有效利用多核机器)

hs            如果设置为1,将用于模型训练。如果设置为0(默认),同时negative设置为非零,将使用负采样

negative      如果> 0,将使用负采样,该数值指定应取出多少“噪声字”(通常在5-20之间)。默认值为5,如果设置为0,则不使用负采样

cbow_mean =   如果设置为0,使用上下文词向量的和。如果设为1(默认),则使用平均值,仅适用于使用cbow时。

hashfxn       散列函数,用于随机初始化权重以增加训练的可重复性。默认是Python的基本内置哈希函数

iter          语料库中的迭代次数(epochs),默认值为5

trim_rule

词汇修剪规则,指定某些词是否应保留在词汇表中,被修剪掉或使用默认值处理(如果字计数

)或接受参数(word,count,min_count)的可调用并返回utils.RULE_DISCARD,utils.RULE_KEEP或utils.RULE_DEFAULT。注意:规则(如果给出)仅在build_vocab()期间用于修剪词汇表,不会作为模型的一部分存储。

sorted_vocab  如果设为1(默认),在分配词索引之前,通过降序对词汇表进行排序。

batch_words

传递给工作线程(以及此cython例程)的示例批次的目标大小(以字为单位)。默认值为10000.(如果单个文本长度大于10000个字,则会传递更大的批次,但标准的cython代码会截断到最大值。)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。