美文网首页
(二)浅谈语言模型与词向量——实战

(二)浅谈语言模型与词向量——实战

作者: 天生smile | 来源:发表于2018-12-03 16:33 被阅读0次

    实战主要分为两个部分语言模型和Wordvec,具体参见我的github代码

    语言模型

    这个部分主要实现的是NNLM2003的论文,代码中分别给出了英文和中文的数据,数据集很小,这里主要说下代码思路。

    1.那中文语料举例,这里使用的是一份已经分好词的中文语料,如下:

    总共6800多行,并不是很大。

    2.创建语料库,根据分好词的语料建立一个word2id的词典,记录所有的词和词的编号,注意这里加上<START>,<UNK>,<END>,如下:

    3.创建训练数据,在这里我们会设置一个上下文的长度win_size,这也就是我们输入的一个范围大小的设置,应为序列如果太长模型会吃不消,最后的输入和对应的标签的如下:

    输入数据 输入标签

    4.模型部分如下,也很简单:

    这里我主要实现了hidden和output的这两个函数,完全是对照上篇文章中的图实现的,output的结果就是对词典中的每个词都有一个概率值。NNLM得代码就介绍到这里,比较简单,如果有一定的DP和tensorflow基础一定能看得懂。

    Word2vec实践

            github上关于Word2vec的实践特别多,这里我主要利用gensim在Python3的环境下进行词向量的训练做一些说明(代码),后续我们会利用相同的中文语料进行bert的训练。在这里推荐一个比较好的开源项目,上面是一些训练好的开源模型

    第一步:语料准备

            这里我准备了两份语料,一份是维基百科的中文语料,另一份是搜狗的新闻语料,这些网上都可以找到。这里说一下对这两份语料的处理进行说明:

    1.对于维基百科的中文,抽取文本文件,可以使用wiki官方的工具WikipediaExtractor,或者运行tool目录下的process_wiki.py

    执行命令:

        python process_wiki.pyzhwiki-latest-pages-articles.xml.bz2 output.txt

        繁体字转换成简体,利用目录下的tradition2simpy.py工具进行转化,用到了两个库用到了两个库,分别是zh_wiki.py和langconv.py ,目录下都有,得到simpleword.txt

    2.对于搜狗语料,转换命令如下:

                    dat文件解析命令:

                    cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>"  > corpus.txt

                    vim下去掉content标签:

                            :%s/<content>//g

                            :%s/<\/content>//g

    第二步:分词

                   代码中用的是结巴分词,关于分词我们会单独做一个介绍,后续我还会介绍海量分词的使用。

    第三步:模型训练

    模型训练的代码主要注意gensim.models.Word2Vec函数,参数如下:

    这里说明几个比较重要的参数,min_count指词典中频率低于min_count的词会被忽略,window指上下文大小,workers指进程数。

    第四步:模型解析,代码里有,这里不详细介绍

    实验效果(见test.py):

        

    相关文章

      网友评论

          本文标题:(二)浅谈语言模型与词向量——实战

          本文链接:https://www.haomeiwen.com/subject/puvycqtx.html