https://github.com/yandex/faster-rnnlm

 
 

Gdb ./rnnlm

r -rnnlm model-good.faster -train thread.title.good.train.txt -valid thread.title.good.valid.txt -hidden 5- -direct-order 3 -direct 200 -bptt 4 -bptt-block 10 -threads 1

[root@cq01-forum-rstree01.cq01.baidu.com faster-rnnlm]# more thread.title.good.train.txt

唉        稳        凉菜        干货        批发        稳        左成        个        月        都

咦        丢        图        跑

毕竟        新人

我        想去旅行

昨天        玩        个        满        深渊        人马                 才        踩        了        55

这        状态        还        不如        温网

新型        投资项目

晒        早饭        就        酱

渣土        哥        真是        太        放肆        了

推荐        就是        有        这样        的

白素贞        水        漫        文水        城

我知道        那些夏天        就像        你        一样        回        不

渑池        至        洛阳        最早        的        车        几        点        哪里        坐        到        洛阳        几点

宏观        方面        大        的        流动性        格局        虽无        明显        变化        但        眼下        地方        政府        债务        限

电工        行业        竞争        大        锦力        电器        有        优势

兄弟        啊                 影技        1        班        q        群        是        多少

你们        家乡        话        叫        什么

深深        的        孤独感        与        挫败        感        感觉        个人

一起去        旅游        吧

谁知道        四会        那里        有        修        打火机        的

[root@cq01-forum-rstree01.cq01.baidu.com faster-rnnlm]# pwd

/home/users/chenghuige/other/faster-rnnlm.debug/faster-rnnlm

  1. 统计词频建立vocabulary

void Vocabulary::BuildFromCorpus(const std::string& fpath, bool show_progress)

首先添加一个 </s>

AddWord(kEOSTag);
只是编号0

 
 

然后逐个添加每行

每行处理的时候按照IsSpace切分

inline bool IsSpace(char c) {

return c == ' ' || c == '\r' || c == '\t' || c == '\n';

 
 

然后其实就是对每个词
类似 Identifer.h那样顺序编号,没出现的词
叫做oov 编号 -1

 
 

除了编号之外
同时统计频次

最后按照频次排序
从大到小
同时更新编号
也就是频次最大的
这里 </s> 编号为0

(gdb) p words_

, word = 0x6ae1c0 "</s>"}, {

freq = 258246, word = 0x6aef20 "\265\304"}, {freq = 126910, word = 0x6aeff0 "\301\313"}, {

freq = 101904, word = 0x6aedc0 "\316\322"}, {freq = 67328, word = 0x6aeee0 "\323\320"}, {

freq = 62290, word = 0x6aec10 "\270\366"}, {freq = 60866, word = 0x6afb20 "\322\273"}, {

 
 

[root@cq01-forum-rstree01.cq01.baidu.com faster-rnnlm]# wc -l thread.title.good.train.txt

thread.title.good.train.txt

 
 

gdb) p cfg

$2 = {layer_size = 5, layer_count = 1, maxent_hash_size = 199947228, maxent_order = 3, use_nce = false, nce_lnz = 9, reverse_sentence = false, layer_type = "sigmoid"}

 
 

  1. 构建网格结构

main_nnet = new NNet(vocab, cfg, use_cuda, use_cuda_memory_efficient);

构造函数调用Init 在这里

 
 

embeddings.resize(vocab.size(), cfg.layer_size);

//(word_num, hidden_size) 二维数组

 
 

rec_layer = CreateLayer(cfg.layer_type, cfg.layer_size, cfg.layer_count);

//隐层
建立一个layer 默认layer_type是sigmoid

 
 

maxent_layer.Init(cfg.maxent_hash_size);

//最大熵
@TODO

 
 

softmax_layer = HSTree::CreateHuffmanTree(vocab, cfg.layer_size);

//输出层 softmax 采用huffman树

 
 

 
 

Faster-rnnlm代码分析1 - 词表构建,Nnet成员的更多相关文章

  1. tensorflow faster rcnn 代码分析一 demo.py

    os.environ["CUDA_VISIBLE_DEVICES"]=2 # 设置使用的GPU tfconfig=tf.ConfigProto(allow_soft_placeme ...

  2. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  3. tensorflow笔记:多层LSTM代码分析

    tensorflow笔记:多层LSTM代码分析 标签(空格分隔): tensorflow笔记 tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) ten ...

  4. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  5. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  6. angular代码分析之异常日志设计

    angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...

  7. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)

    这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...

  8. wifi display代码 分析

    转自:http://blog.csdn.net/lilian0118/article/details/23168531 这一章中我们来看Wifi Display连接过程的建立,包含P2P的部分和RTS ...

  9. Device Tree(三):代码分析【转】

    转自:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html Device Tree(三):代码分析 作者:linuxer 发布于:201 ...

随机推荐

  1. [KOJ6023]合并果子·改

    [COJ6023]合并果子·改 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多把这些果子堆排成一排,然后所有的果子合成一堆.    每一次合并,多多可以 ...

  2. [转载]JavaEE学习篇之——网络传输数据中的密码学知识以及Tomcat中配置数字证书EE

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/21716557 今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一 ...

  3. Kali Linux渗透基础知识整理(三):漏洞利用

    漏洞利用阶段利用已获得的信息和各种攻击手段实施渗透.网络应用程序漏洞诊断项目的加密通信漏洞诊断是必须执行的.顾名思义,利用漏洞,达到攻击的目的. Metasploit Framework rdeskt ...

  4. centos 6.5 git 服务器的配置(入门级)

    参考:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-git-server-on-a-vps http ...

  5. django-cms安装

    ubuntu:12.04 (32bit) djangocms 0.5.1 =========================== 首先,跟着这个做: https://github.com/divio/ ...

  6. ffmpeg解码视频流

    //初始化.注册编解码器 avcodec_init(); av_register_all(); avformat_network_init(); //选取测试文件 char* FileName = & ...

  7. 【GoLang】golang中可以直接返回slice吗?YES

    结论: 可以,slice本质是结构体,返回slice时返回的是结构体的值,结构体的指针.len.cap等信息也全部返回了. 如下: type slice struct { start *uintptr ...

  8. MySQL高可用性之Keepalived+MySQL(双主热备)

    环境描述:OS:CentOS6.5_X64MASTER:192.168.0.202BACKUP:192.168.0.203VIP:192.168.0.204 1.配置两台Mysql主主同步[root@ ...

  9. SHAREPOINT - CAML列表查询

    首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表.文档库的查询,字段的定义,站点定义等处处使用的都是CAML. 简单的提一 ...

  10. delphi XE5下安卓开发技巧

    delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...