深度学习在自然语言处理(NLP)任务中取得了很大的成功,其中,词的分布式表示是其中很重要的一项技术。要深入了解分布式表示,就不能不深入了解word2vec。今天来读一读word2vec代码中是如何生成Huffman Tree的。
这个是word2vec中很重要的一个数据结构,用来表示词汇表中的一个词和它的Huffman编码。cn是词在训练集中出现的频率,point是编码的节点路径,word是词串,codelen是编码长度,code是编码,表示成0和1串。
下面是Huffman Tree的生成函数,光是眼睛看,脑袋想,读起来有些费劲。所以,我们还是尝试从一个例子来理解。这是常用的一种读和理解代码的方式。
纸和笔准备好了,我们的例子是一个词汇表的count是[4,3,2,1],四个词,排序好的。顺着程序的执行,step by step记录下来个个变量,以便于理解。
这么下来,生成的Huffman Tree如下。
接下来,看看如何从上面的临时数据结构转化成编码的。每个词都会赋予一个编码,频率高的编码长度短。
接着凭借纸和笔,看看整个过程是如何进行的。
至此,Huffman Tree的生成函数,通过我们的纸和笔完整的执行了一遍,也对代码有了深入的理解。学习别人的代码过程,也是自我提高的过程。下次,面试中,或是工作中,遇到类似的问题,应该不再陌生。