更别致的词向量模型(六):代码、分享与结语
By 苏剑林 | 2017-11-19 | 92450位读者 |列表 #
代码 #
本文的实现位于:https://github.com/bojone/simpler_glove
源码修改自斯坦福的glove原版,笔者仅仅是小修改,因为主要的难度是在统计共现词频这里,感谢斯坦福的前辈们提供了这一个经典的、优秀的统计实现案例。事实上,笔者不熟悉C语言,因此所作的修改可能难登大雅之台,万望高手斧正。
此外,为了实现上一节的“有趣的结果”,在github中我还补充了simpler_glove.py,里边封装了一个类,可以直接读取C版的simple glove所导出的模型文件(txt格式),并且附带了一些常用函数,方便调用。
分享 #
这里有一份利用本文的模型训练好的中文词向量,预料训练自百科百科,共100万篇文章,约30w词,词向量维度为128。其中分词时做了一个特殊的处理:把所有数字和英文都拆成单个的数字和字母了。如果需要实验的朋友可以下载:
链接:http://pan.baidu.com/s/1jIb3yr8
密码:1ogw
结语 #
本文算是一次对词向量模型比较完整的探索,也算是笔者的理论强迫症的结果,幸好最后也得到了一个理论上比较好看的模型,初步治愈了我这个强迫症。而至于实验效果、应用等等,则有待日后进一步使用验证了。
本文的大多数推导,都可以模仿地去解释word2vec的skip gram模型的实验结果,读者可以尝试。事实上,word2vec的skip gram模型确实跟本文的模型有着类似的表现,包括词向量的模型性质等。
总的来说,理论与实验结合是一件很美妙的事情,当然,也是一件很辛苦的事情,因为就以上这些东西,就花了我几个月思考时间。
转载到请包括本文地址:https://kexue.fm/archives/4681
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Nov. 19, 2017). 《更别致的词向量模型(六):代码、分享与结语 》[Blog post]. Retrieved from https://kexue.fm/archives/4681
@online{kexuefm-4681,
title={更别致的词向量模型(六):代码、分享与结语},
author={苏剑林},
year={2017},
month={Nov},
url={\url{https://kexue.fm/archives/4681}},
}
November 20th, 2017
看到这儿我竟然有点想哭...
要写下逻辑缜密严谨的文章,这得花多少心血,得多努力的人啊...
谢谢支持,想不到写技术文章也能感动人,哈哈~
November 20th, 2017
我也想像剑林一样的厉害,真的特别佩服剑林(冒昧直呼其名了)。
November 22nd, 2017
很用心,获益匪浅,很赞。
November 23rd, 2017
剑林真实厉害,才24岁。
November 23rd, 2017
666
不过在推导的时候用的假设有点多,这样泛用性是不是有点差。
另外博主有把这个整理成论文吗?有机会的话想引用下。
最大的假设是朴素假设,这是早期NLP任务中常用的假设了,普适性还是蛮广的。尽管word2vec没有明显地提出这样的假设,但事实上模型也是差不多了。
暂无整理成论文的想法,如果真的引用,直接引用本文链接就非常感激了^_^。
感谢回复!
您好啊,再来打扰拉,关于朴素假设我想再问您个问题~
如果假设一个3-gram序列c1、c2、w,估计p(c1,c2|w)的话可以由朴素假设分解为p(c1|w)*p(c2|w)吧。
那朴素假设会不会导致p(c1,c2)=p(c1)*p(c2)的结论?如果是的话岂不是PPMI就无效了?
⊙﹏⊙b
November 25th, 2017
思路清晰,条理分明,很赞。。。。
感谢分享。
November 29th, 2017
还想再问下作者,这个训练出的词向量的质量是怎么样呢?就是在处理一些实际问题上的时候。
跟Word2Vec的Skip-gram模型不相上下吧
December 25th, 2017
您好,我想试验一下您的simpler glove,能否烦请问一下您的代码需要提供的corpus.txt格式是怎么样的呢,我的C语言功底不太好,所以阅读原C有些困难,没看到您的readme写。麻烦了
格式跟glove所需要的格式是一样的,分好词的文本,词与词之间用空格隔开
August 18th, 2021
simpler_glove.py 运行报错,代码第86行 `self.normalize` 不存在该函数哎。。
打错字了,已经修正哈~
感谢秒回~~
刚找到问题是啥想过来反馈。。苏神就秒回了~~