获取Word2vec训练得到的所有词与词向量

尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作!

       

 

 

        以前在做自然语言处理任务时,都是用别人训练好的词向量字典,感觉这一块依赖性太强了,怕会影响到后期的业务需求,所以最近没事就自己亲手做了一个属于自己的词向量字典。

1、如果需要本文源码请自行转向“https://download.csdn.net/download/vensmallzeng/11211311”。

2、笔者准备了两个语料库,一个是“倚天屠龙记.txt”还有一个是“English Corpora”,后者的数据量会远大于前者,所以为了方便实验,笔者选择了数据量少一点的前者即-倚天屠龙记.txt,它们的具体格式分别如下图所示:

倚天屠龙记.txt(笔者选用):

English Corpora:

3、在对语料数据进行训练之前,先要将语料中的句子进行分词并做数据清洗,因此这里写了一个cut_txt函数用于实现上述目的,其中主要功能代码如下:

句子分词部分:

数据清洗部分:

4、接下来就是用分好词的语料进行模型训练并生成词向量,因此这里写了一个model_train函数用于实现上述目的,其中主要功能代码如下:

5、最后就是写一个主函数,用于调用cut_txt函数实现分词,调用model_train函数产生词向量,并将获得的词及其对应的词向量按字典的格式写入文本文件中,另外还可以实现计算一些词之间的相似度以及获取其近义词功能。

词与词向量在文本文件中存储效果如下:

 

6、至此本文该写的就写完了。对于word2vec这个函数,更多的只是调用,所以在给这个函数传参数时,需要注意一下参数的含义,为此下面特意给出了各参数的含义以供参考。

    1.sentences:可以是一个List,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
    2.sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
    3.size:是指输出的词的向量维数,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
    4.window:为训练的窗口大小,8表示每个词考虑前8个词与后8个词(实际代码中还有一个随机选窗口的过程,窗口大小<=5),默认值为5。
    5.alpha: 是学习速率
    6.seed:用于随机数发生器。与初始化词向量有关。
    7.min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5。
    8.max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
    9.sample: 表示 采样的阈值,如果一个词在训练样本中出现的频率越大,那么就越会被采样。默认为1e-3,范围是(0,1e-5)
    10.workers:参数控制训练的并行数。
    11.hs: 是否使用HS方法,0表示: Negative Sampling,1表示:Hierarchical Softmax 。默认为0
    12.negative: 如果>0,则会采用negative samping,用于设置多少个noise words
    13.cbow_mean: 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
    14.hashfxn: hash函数来初始化权重。默认使用python的hash函数
    15.iter: 迭代次数,默认为5。
    16.trim_rule: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
    17.sorted_vocab: 如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
    18.batch_words:每一批的传递给线程的单词的数量,默认为10000

注:如果在建立自己的词向量库时报如下错误:

RuntimeError:you must first build vocabulary before training the model 

一般是因为所给的训练语料不满足最低要求,说白了就是词太少了, 没有达到默认的最少计数 mincount

解决方法:

① 扩大语料规模或寻找一个合适大小的语料

② 修改min_count以适应自己的语料库规模

 

 

 

日积月累,与君共进,增增小结,未完待续。

  • 20
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值