GithubHelp home page GithubHelp logo

lhglll / word2vec-sgns Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jugyang/word2vec-sgns

0.0 0.0 0.0 24 KB

基于Skip-Gram with Negative Sampling的汉语词向量学习和评估

Home Page: https://weibo.com/ttarticle/p/show?id=2309404444295250706450

Python 100.00%

word2vec-sgns's Introduction

基于Skip-Gram with Negative Sampling(SGNS)的汉语词向量学习和评估

1. 实验要求

1.1 词向量学习

超参数:前后两窗口,维数:100 训练语料:https://dumps.wikimedia.org/backup-index.html 汉语数据

1.2 词向量评估

采用所学得的词向量,计算pku_sim_test.txt文件中每行两个词间的余弦距离作为两词相似度,并输出到文件中。输出要求如下,因为是机器判定,请一定按如下格式输出,否者可能得到不好的判定结果:
1)输出文件的编码: utf-8
2)输出格式:词之间以及词和相似度之间使用一个tab符分开,如下例: 没戏 没辙 4.3
3)不要打乱pku_sim_test.txt中原来的行序,当pku_sim_test.txt中的某个词没有词向量时,对应的该行的词间相似度标识为OOV,即,如果没有“没辙”这个词的词向量,则对应的行输出为: 没戏 没辙 OOV
4)输出文件以自己的学号命名

2. 实验环境

  • Python3.7
  • jieba、gensim、opencc

3. 实验步骤

3.1 中文语料

本次实验采用维基百科的中文语料库训练word2vec模型

3.2 parse_zhwiki_corpus.py 将zhwiki.xml转化成zhwiki.txt格式

使用gensim包的WikiCorpus方法将zhwiki*.xml.bz2文件转化为corpus.zhwiki.txt
使用命令

python3 parse_zhwiki_corpus.py -i input_file -o output_file

3.3 traditional2simplified.py 将zhwiki.txt中的繁体字转化为简体字

将zh_wiki*.xml.bz2 转化为 corpus_zhwiki.txt 后发现,语料中带有大量的繁体字,所以使用opencc库将繁体字转化为简体字
使用命令

python3 traditional2simplified.py -i input_file -o output_file

3.4 zhWiki_seg.py 清洗数据并分词

进入清洗数据阶段,数据预处理过程详情请点击:https://weibo.com/ttarticle/p/show?id=2309404444679423787160

因为word2vec是通过上下文来训练,所以不需要去停用词,这里使用正则表达式去掉一些特殊字符,并使用jieba进行分词

使用命令

python3 zhWiki_seg.py -i input_file -o output_file

3.5 word2vec_train.py 训练word2vec模型

这里使用gensim的word2vec方法进行训练,这里提供了一些参数供训练,列出一些重要的参数

  • size:词向量的维度
  • window:词向量上下文最大距离
  • sg:word2vec两个模型的选择(0:CBOW,1:Skip-Gram)(default=0)
  • hs:word2vec两个解法的选择(0:Negative Sampling,1:Hierarchical Softmax *若置1,则negative需要大于0)(default=0)
  • min_count:需要计算词向量的最小词频(default=5)

使用命令

python3 word2vec_train.py -i input_file -m out_model -v out_vector

3.6 word2vec_test.py 测试word2vec模型

在测试环节中,我们使用pku_sim_test.txt进行测试,进行两个词词向量的余弦距离计算
这里使用word2vec_model.wv.similarity方法
*发现当词没有词向量时,使用word2vec_model.wv.similarity会报错,这里使用一个技巧,生成一个字典,首先检测词是否出现在字典中,然后当该词没有词向量的使用,就会输出OOV,程序就不会报错了(消耗了时间,但是暂时没想到其他方法)

使用命令

python3 word2vec_test.py -i input_file -o output_file

3.7 后期调参

后期具体调参详情,可点击链接: https://weibo.com/ttarticle/p/show?id=2309404444296089567296

4. 参考与致谢

  1. https://www.jianshu.com/p/6a34929c165e
  2. https://www.cnblogs.com/pinard/p/7160330.html

再次感谢各位大佬!

word2vec-sgns's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.