nltk如何处理中文同义词、敏捷的近义词,敏捷的同义词

&blockquote&补充一些当初自己做的尝试&/blockquote&举几个我尝试过的。&br&1. 相似词
我把它比作完型填空&br&&br&2.词的特征扩充 在term
里很有用&br&&br&3.关系挖掘
看哈工大论文学习的&br&&br&4.序列点击数据的分析
效果还行&br&&blockquote&感觉自己是第一个把word2vec应用在电商上的,哈哈。现在感觉很多应用都在使用word2vec。介绍一下自己的工程实践尝试。&br&1、序列数据不能过长,过长会导致偏移现象,训练的词向量会变差。其实就是用户注意力的问题,用时髦的话说就是attention。现在attention在lstm里混得风生水起。我当时拿到用户log后,先根据session进行数据切割,如果一个session过长,我会进行限制,只允许最大一个长度。尽量保证一个序列的主题(attention)基本一致。这一块还有很多可以优化,session的切分好像也有相关算法。数据没清洗干净,后期也很恼火。&br&2、淘宝的数据特别多,用户点击数据量特别大,并且商品数也接近10亿,真是让人又爱又恨。10亿的商品如果每个都算200维的话,内存根本撑不住。淘宝的商品id特别长,占用内存多,最开始我对商品进行了重排序节约内存。但是这点优化远远不够,就开始修改源代码,只保存整数,后来发现还是不行,就切换到当时有个很初级的ps版本word2vec(我和xlab的一个同事开发),吭哧吭哧的跑了很久完成。不过效果不如原始的word2vec,有点心灰意冷,后面有其他任务,这方面老大也不是特别上心,没有支持,就停止了这方面的尝试。感觉很是遗憾。&/blockquote&5.相关词挖掘
用在品牌词和品牌相似词挖掘中&br&&blockquote&品牌词的挖掘也特别有意思。背景是淘宝打击盗版,普通商家不敢在淘宝商品详情里写品牌名。他们会进行品牌词的变种,比如Levi's会变成李家、L家,tommy 会变成汤米、汤家、T家等等来躲避打击。 我先进行文本的 统计分词, 然后用word2vec 进行模型训练、最终把这些盗版品牌找出来了。 当时觉得很有意思,但是没找到相关部门,然后就放弃了。又放弃。。。 不过我利用这些知识,买了些号称原单的商品,最终有原单,也有仿版,吃过亏,趟过坑,导致后面上淘宝眼光越来越毒,买了一些好货。后来海淘流行,我就不玩这个了。&/blockquote&6.句子vector
在gensim 中有代码,论文中效果很好。不过自己测试效果很一般,还不如bayes。。。&br&&br&7.作为其它如火如荼的cnn rnn rnn-lstm
系列的初始化输入特征&br&&br&word 2vec
算这里面最好的成果了,模型简单,效率高,易调参。
补充一些当初自己做的尝试举几个我尝试过的。 1. 相似词 我把它比作完型填空 2.词的特征扩充 在term weight 里很有用 3.关系挖掘 看哈工大论文学习的 4.序列点击数据的分析 效果还行 感觉自己是第一个把word2vec应用在电商上的,哈哈。现在感觉很多应用都在…
我来谈谈一点个人不成熟的想法。&br&&br&word2vec是word embedding(词向量)的一种浅层神经网络训练方法。word embedding的这一系列的训练方法,都有一个有趣的现象,那就是训练的主要目标居然是获得side effect的词向量,而不是神经网络的预测模型。这是一种Transfer Learning的思想。这种思想非常值得学习。&br&&br&还很有意思的是word2vec的训练过程是有监督的神经网络学习,但是得到的结果居然是无监督的clustering的效果,就是获取词向量。它是通过从无监督的语料,像维基百科中获取有监督的语料来实现的。比如获取用上下文预测下一个词的语料。&br&&br&词向量的训练可以用神经网络模型也可以用矩阵分解,但是说Word2Vec本质上是glove其实并不合适,虽然他们的目标都是获取词向量。&br&&br&重要的是理解这个工具背后的思想,原理和模型。我认为Word2vec及其背后的词向量,一定程度上提出了一个巧妙的representation的方案。其实你可以吧embedding的训练思想应用到很多其它的应用中,比如knowledge graph, image, documents.等等。从而获得其它应用的基于向量的representation.&br&&br&理解这种学术工具,重要的是搞懂它背后的道理和设计哲学。
我来谈谈一点个人不成熟的想法。 word2vec是word embedding(词向量)的一种浅层神经网络训练方法。word embedding的这一系列的训练方法,都有一个有趣的现象,那就是训练的主要目标居然是获得side effect的词向量,而不是神经网络的预测模型。这是一种Tran…
原文:&a href=&//link.zhihu.com/?target=http%3A//x-algo.cn/index.php//281/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&word2vec在工业界的应用场景&/a&&br&&blockquote&&p&这篇文章主要讲应用,不讲原理。&/p&&p&通俗的说,word2vec是一种将『词』变成向量的工具,在nlp的场景中『词』是显而易见的,但是在有些时候,什么可以看做『词』和『文档』就不那么容易了。&/p&&br&&p&文章目录&/p&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//x-algo.cn/index.php//281/%23i& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1 在社交网络中的推荐&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//x-algo.cn/index.php//281/%23i-2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2 计算商品的相似度&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//x-algo.cn/index.php//281/%23i-3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3 作为另一个模型的输入&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//x-algo.cn/index.php//281/%23i-4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&4 向量快速检索&/a&&/li&&/ul&在社交网络中的推荐&p&前东家工作的时候,有一个个性化推荐的场景,给当前用户推荐他可能关注的『大V』。对一个新用户,此题基本无解,如果在已知用户关注了几个『大V』之后,相当于知道了当前用户的一些关注偏好,根据此偏好给他推荐和他关注过大V相似的大V,就是一个很不错的推荐策略。所以,如果可以求出来任何两个V用户的相似度,上面问题就可以基本得到解决。&/p&&p&我们知道word2vec中两个词的相似度可以直接通过余弦来衡量,接下来就是如何将每个V用户变为一个词向量的问题了。巧妙的地方就是如何定义doc和word,针对上面问题,可以将doc和word定义为:&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&word -&
每一个大V就是一个词
根据每一个用户关注大V的顺序,生成一篇文章
&/code&&/pre&&/div&&br&&p&由于用户量很大(大约4亿),可以将关注word个数少的doc删掉,因为本身大V的种类是十万级别(如果我没记错的话), 选择可以覆盖绝大多数大V的文章数量就足够了。&/p&计算商品的相似度&p&在商品推荐的场景中,竞品推荐和搭配推荐的时候都有可能需要计算任何两个商品的相似度,根据浏览/收藏/下单/App下载等行为,可以将商品看做词,将每一个用户的一类行为序看做一个文档,通过word2vec将其训练为一个向量。&/p&&p&同样的,在计算广告中,根据用户的点击广告的点击序列,将每一个广告变为一个向量。变为向量后,用此向量可以生成特征融入到rank模型中。&/p&作为另一个模型的输入&p&在nlp的任务中,可以通过将词聚类后,生成一维新的特征来使用。在CRF实体识别的任务中,聚类结果类似词性,可以作为特征来使用。&/p&&p&在依存句法分析的任务中,哈工大ltp的nndepparser则是将词向量直接作为输入。&/p&&p&具体论文『A Fast and Accurate Dependency Parser using Neural Networks』&/p&向量快速检索&p&当我们将一个文档变成一个向量之后,如何根据余弦/欧氏距离快速得到其最相似的topk个文章,是工程实现上不得不考虑的问题。例如线上可以允许的时间是5ms以内,如果文章数量往往上万或者更多,O(n)的方式计算明显不可接受了。&/p&&p&如果文章更新的速度很慢,可以通过离线的方式一天或者几天计算一次,导入redis(或者别的)提供线上快速查询。 但是如果文章实时新增,并且大量流量来自新文章,这个问题就要好好考虑一下。&/p&&p&一般可以通过kd-tree、simhash、聚类等方式解决,选择不同的方式和具体的推荐场景、数据分布有关。&/p&&/blockquote&
原文: 这篇文章主要讲应用,不讲原理。通俗的说,word2vec是一种将『词』变成向量的工具,在nlp的场景中『词』是显而易见的,但是在有些时候,什么可以看做『词』和『文档』就不那么容易了。 文章目录
word2vec本质上来说就是一个矩阵分解的模型,简单地说,矩阵刻画了每个词和其上下文的词的集合的相关情况。对这个矩阵进行分解,只取每个词对应在隐含空间的向量。&br&&br&所以word2vec适合的情况就是对于一个序列的数据,在序列局部数据间存在着很强的关联。典型的就是文本的序列了,邻近的词之间关联很强,甚至可以通过一个词的上下文大概预测出中间那个词是什么。学习到的词向量代表了词的语义,可以用来做分类、聚类、也可以做词的相似度计算。此外,Word2vec本身的层次分类器或者采样方式实际上对热门item做了很大的惩罚,所以不会像一般的矩阵分解一样,最后算出来语义接近的都是热门词,这也是word2vec很好的一个特性。&br&&br&对于短文本分类,直接把文档里面所有的word对应的向量线性相加,作为文本的特征训练分类器,效果也很不错。这种方式其实在word2vec的训练过程中也有使用。另外如果换成非线性分类器,比如rbf kernel SVM,分类准确度还能再高,这个也是符合预期的。&br&&br&其他序列的数据也是可以这样做的,记得去年KDD上有一篇DeepWalk的文章,在社交网络上进行随机游走生成一组组节点的序列,然后通过word2vec训练每个节点对应的向量。但是我用这个方法在qq的社交网络上面做了一些实验,发现效果非常不理想,可能和qq社交网络的复杂性有关。&br&&br&我非常满意的一个应用是把word2vec应用在用户app下载序列上,根据用户下载app的顺序,把app看做单词,也是可以形成这样的序列数据,进而训练处每个app对应的向量。利用这个向量计算app之间的相似度,效果非常好,能够把真正内容相关的app聚合在一起,同事规避热门app的影响。类似的场景应该还有很多,而且应用也很广泛,比如说推荐系统、广告系统都可以用上。
word2vec本质上来说就是一个矩阵分解的模型,简单地说,矩阵刻画了每个词和其上下文的词的集合的相关情况。对这个矩阵进行分解,只取每个词对应在隐含空间的向量。 所以word2vec适合的情况就是对于一个序列的数据,在序列局部数据间存在着很强的关联。典型…
nltk中有同义词包,你可以查查看看
nltk中有同义词包,你可以查查看看
word2vec区分不出来同义和同位,举个栗子,『北京』和『上海』,在word2vec里可能很近。&br&我不认为无监督的东西能很好的挖出同义词,至少需要类似于『点击日志』的用户行为带来的弱标注数据,才能挖得比较好。&br&所以建议结合自己的应用场景,从用户行为里面挖。如果实在没有用户行为,那就找本近义词典、辞海、英汉词典之类的算了。
word2vec区分不出来同义和同位,举个栗子,『北京』和『上海』,在word2vec里可能很近。 我不认为无监督的东西能很好的挖出同义词,至少需要类似于『点击日志』的用户行为带来的弱标注数据,才能挖得比较好。 所以建议结合自己的应用场景,从用户行为里面挖…
word2vec学出来的模型可解释性太差;基于context统计的distributional representation,每个维度都容易理解,这是一大优势。&br&&br&此外,distributional representation的代表模型之一explicit semantic analysis(ESA),在很多任务上性能不比word2vec差,当然计算效率是ESA的主要问题。
word2vec学出来的模型可解释性太差;基于context统计的distributional representation,每个维度都容易理解,这是一大优势。 此外,distributional representation的代表模型之一explicit semantic analysis(ESA),在很多任务上性能不比word2vec差,当然…
已有帐号?
无法登录?
社交帐号登录
14928 人关注
677 条内容
3907 人关注
1431 条内容
435 人关注
153 条内容
317 人关注
17210 人关注
4333 条内容中文自然语言处理相关资料 - 快资讯
需要开启 JavaScript 才能正常打开页面&p&这是个非常有意思的问题。NLP的领域非常大,想要入门,其实弱水三千,取一瓢饮就可以。&/p&&p&笔者去年画了领域进展图,籍此,我们先来看看NLP领域的格局,如有不足,烦请指正。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-6ea02db2dc72fbeebed3c_b.jpg& data-size=&normal& data-rawwidth=&800& data-rawheight=&496& data-default-watermark-src=&https://pic4.zhimg.com/50/v2-bea7ef0d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/50/v2-6ea02db2dc72fbeebed3c_r.jpg&&&figcaption&2017 NLP领域进展&/figcaption&&/figure&&p&可以看出,包括Subject Classification、Spam Detection、NER等工作已经基本可用,只要堆积足够的数据,就可以达到人类的水准,这些也是最好入门的。&/p&&p&而Summarization、Paraphrase、QA等事情离比较靠谱的通用应用还有一些距离,建议有一定实力再碰。&/p&&p&&b&回过头来,要怎么入门NLP才会比较好?路径其实就几条:&/b&&/p&&ol&&li&&b&进入正规院校&/b&,拜入一个靠谱的老师门下,老实上课。国内外靠谱的老师很多,但现在的学生也多,竞争非常激烈。这里给出一些介绍靠谱老师的传送门:&/li&&ol&&li&国外:&a href=&//link.zhihu.com/?target=http%3A//www.sohu.com/a/7750& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&资源 | 盘点国外NLP领域40大高校及相关知名学者&/a& &/li&&li&国内:&a href=&https://www.zhihu.com/question/& class=&internal&&国内有哪些自然语言处理的牛人或团队?&/a&&/li&&li&容易看出,大部分牛人的徒弟占据了业界很多核心位置,譬如SCIR在BAT中的算法部门都颇有影响,而国外顶校大牛的徒弟就更不用说,在FLAG中也能获得不错的位置。&/li&&li&高产论文作者图见文末。&/li&&/ol&&li&&b&工作转型&/b&,在实际的工作中切入NLP领域,开始深造。这需要你有非常强的学习能力,但也是很现实的一种路径。&/li&&ol&&li&NLP在很多公司是广告、信息流、推荐的核心技术,如果能转到相应的部门,那么收益也绝不会少。&/li&&li&如何转是一个问题,最佳的方式是找到一个垂直行业的公司,如NLP+金融,开始做切入。&/li&&/ol&&li&&b&自学成才&/b&,这是一个有可能的选项,但并不容易&/li&&ol&&li&可行路径:这一条路可以通过看网课,学习各类材料,来获得提升,其他答案均已提到具体的方法,这里就不赘述。&/li&&li&问题所在:做NLP最核心的点就是要有交流的环境,工业和学术的氛围还是有很大的差别,学术一个月工业十个月,中间这九个月的各类dirty work是不可避免的。有交流环境,才会真正认识到要怎么处理这些真实世界中的事情。&/li&&ol&&li&而且,很多细节也需要交流才知道重要性,譬如CBOW和Skip-Gram的区别,为什么需要NCE/Sampled-Softmax,以及Negative Sampling的细节等等。要是只会跑个word2vec就是懂NLP了,那业界懂NLP的人就太多了。&/li&&/ol&&/ol&&/ol&&hr&&p&2017 高产论文作者附图&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-c9e028be5eee32b3930106_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&964& data-default-watermark-src=&https://pic3.zhimg.com/50/v2-85a55fccb145de544f2a046b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/50/v2-c9e028be5eee32b3930106_r.jpg&&&figcaption&2017年高产论文作者图&/figcaption&&/figure&&p&&/p&&p&&/p&
这是个非常有意思的问题。NLP的领域非常大,想要入门,其实弱水三千,取一瓢饮就可以。笔者去年画了领域进展图,籍此,我们先来看看NLP领域的格局,如有不足,烦请指正。可以看出,包括Subject Classification、Spam Detection、NER等工作已经基本可用,只…
&figure&&img src=&https://pic4.zhimg.com/v2-a1a73c063bfbd8f1ef59034b_b.jpg& data-rawwidth=&682& data-rawheight=&388& class=&origin_image zh-lightbox-thumb& width=&682& data-original=&https://pic4.zhimg.com/v2-a1a73c063bfbd8f1ef59034b_r.jpg&&&/figure&&p&&b&&i&转自我的公众号: 『数据挖掘机养成记』&/i&&/b&&/p&&p&&br&&/p&&h2&1. 引子&/h2&&p&大家好&br&我叫数据挖掘机&br&皇家布鲁斯特大学肄业&br&我喝最烈的果粒橙,钻最深的牛角尖&br&——执着如我&/p&&p&今天我要揭开&b&Word2vec&/b&的神秘面纱&br&直窥其本质&/p&&blockquote&相信我,这绝对是你看到的&br&最浅白易懂的 Word2vec 中文总结&/blockquote&&p&(蛤?你问我为啥有这个底气?&br&且看下面,我的踩坑血泪史。。。)&/p&&h2&2. Word2vec参考资料总结&/h2&&p&(&b&&i&以下都是我踩过的坑,建议先跳过本节,阅读正文部分,读完全文回头再来看&/i&&/b&)&/p&&p&先大概说下我深挖 word2vec 的过程:先是按照惯例,看了 Mikolov 关于 Word2vec 的两篇原始论文,然而发现看完依然是一头雾水,似懂非懂,主要原因是这两篇文章省略了太多理论背景和推导细节;然后翻出 Bengio 03年那篇JMLR和 Ronan 11年那篇JMLR,看完对语言模型、用CNN处理NLP任务有所了解,但依然无法完全吃透 word2vec;这时候我开始大量阅读中英文博客,其中 北漂浪子 的一篇阅读量很多的博客吸引了我的注意,里面非常系统地讲解了 Word2vec 的前因后果,最难得的是深入剖析了代码的实现细节,看完之后细节方面了解了很多,不过还是觉得有些迷雾;终于,我在 quora 上看到有人推荐 Xin Rong 的那篇英文paper,看完之后只觉醍醐灌顶,酣畅淋漓,相见恨晚,成为我首推的 Word2vec 参考资料。下面我将详细列出我阅读过的所有 Word2vec 相关的参考资料,并给出评价&/p&&ol&&li&Mikolov 两篇原论文:&/li&&ol&&li&『Distributed Representations of Sentences and Documents』&/li&&/ol&&/ol&&ul&&li&在前人基础上提出更精简的语言模型(language model)框架并用于生成词向量,这个框架就是 Word2vec&/li&&/ul&&li&『Efficient estimation of word representations in vector space』&/li&&ul&&li&专门讲训练 Word2vec 中的两个trick:hierarchical softmax 和 negative sampling&/li&&/ul&&li&优点:Word2vec 开山之作,两篇论文均值得一读&/li&&li&缺点:只见树木,不见森林和树叶,读完不得要义。这里『森林』指 word2vec 模型的理论基础——即 以神经网络形式表示的语言模型,『树叶』指具体的神经网络形式、理论推导、hierarchical softmax 的实现细节等等&/li&&p&&br&&/p&&ol&&li&北漂浪子的博客:『深度学习word2vec 笔记之基础篇』&/li&&/ol&&ul&&li&优点:非常系统,结合源码剖析,语言平实易懂&/li&&li&缺点:太啰嗦,有点抓不住精髓&/li&&/ul&&p&&br&&/p&&ol&&li&Yoav Goldberg 的论文:『word2vec Explained- Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method』&/li&&/ol&&ul&&li&优点:对 negative-sampling 的公式推导非常完备&/li&&li&缺点:不够全面,而且都是公式,没有图示,略显干枯&/li&&/ul&&p&&br&&/p&&ol&&li&Xin Rong 的论文:『word2vec Parameter Learning Explained』:&/li&&/ol&&ul&&li&&b&!重点推荐!&/b&&/li&&li&理论完备由浅入深非常好懂,且直击要害,既有 high-level 的 intuition 的解释,也有细节的推导过程&/li&&li&一定要看这篇paper!一定要看这篇paper!一定要看这篇paper!&/li&&/ul&&blockquote&&b&评论区 &a class=&member_mention& href=&https://www.zhihu.com/people/b63bf4c01d1b53a23476f5& data-hash=&b63bf4c01d1b53a23476f5& data-hovercard=&p$b$b63bf4c01d1b53a23476f5&&@huichan&/a&
告知了一条&a href=&https://link.zhihu.com/?target=http%3A//www.mlive.com/news/ann-arbor/index.ssf/2017/10/missing_um_student_declared_de.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&沉重的信息&/a&,Rong Xin 于2017年驾驶飞机失事,永远离开了我们。缅怀,R.I.P,愿他能在天堂继续开心地科研&/b&&/blockquote&&p&&br&&/p&&ol&&li&来斯惟的博士论文『基于神经网络的词和文档语义向量表示方法研究』以及他的博客(网名:licstar)&/li&&/ol&&ul&&li&可以作为更深入全面的扩展阅读,这里不仅仅有 word2vec,而是把词嵌入的所有主流方法通通梳理了一遍&/li&&/ul&&p&&br&&/p&&ol&&li&几位大牛在知乎的&a href=&https://www.zhihu.com/question/& class=&internal&&回答&/a&:『word2vec 相比之前的 Word Embedding 方法好在什么地方?』&/li&&/ol&&ul&&li&刘知远、邱锡鹏、李韶华等知名学者从不同角度发表对 Word2vec 的看法,非常值得一看&/li&&/ul&&p&&br&&/p&&ol&&li&Sebastian 的博客:『On word embeddings - Part 2: Approximating the Softmax』&/li&&/ol&&ul&&li&详细讲解了 softmax 的近似方法,Word2vec 的 hierarchical softmax 只是其中一种&/li&&/ul&&p&&br&&/p&&h2&3. 正文&/h2&&blockquote&你会在本文看到:&/blockquote&&ol&&li&提纲挈领地讲解 word2vec 的理论精髓&/li&&li&学会用gensim训练词向量,并寻找相似词&/li&&/ol&&p&你不会在本文看到&/p&&ol&&li&神经网络训练过程的推导&/li&&li&hierarchical softmax/negative sampling 等 trick 的理论和实现细节&/li&&/ol&&p&&br&&/p&&h2&3.1. 什么是 Word2vec?&/h2&&p&在聊 Word2vec 之前,先聊聊 NLP (自然语言处理)。NLP 里面,最细粒度的是 词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,首先就要拿词语开刀。&/p&&p&举个简单例子,判断一个词的词性,是动词还是名词。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的词性,我们要构建 f(x)-&y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种&/p&&p&我在前作『都是套路: 从上帝视角看透时间序列和数据挖掘』提到,大部分的有监督机器学习模型,都可以归结为:&/p&&blockquote&f(x)-&y&br&&/blockquote&&p&在 NLP 中,把 x 看做一个句子里的一个词语,y 是这个词语的上下文词语,那么这里的 f,便是 NLP 中经常出现的『语言模型』(language model),这个模型的目的,就是判断 (x,y) 这个样本,是否符合自然语言的法则,更通俗点说就是:词语x和词语y放在一起,是不是人话。&/p&&p&Word2vec 正是来源于这个思想,但它的最终目的,不是要把 f 训练得多么完美,而是只关心模型训练完后的副产物——模型参数(这里特指神经网络的权重),并将这些参数,作为输入 x 的某种向量化的表示,这个向量便叫做——词向量(这里看不懂没关系,下一节我们详细剖析)。&/p&&p&我们来看个例子,如何用 Word2vec 寻找相似词:&/p&&ul&&li&对于一句话:『她们 夸 吴彦祖 帅 到 没朋友』,如果输入 x 是『吴彦祖』,那么 y 可以是『她们』、『夸』、『帅』、『没朋友』这些词&/li&&li&现有另一句话:『她们 夸 我 帅 到 没朋友』,如果输入 x 是『我』,那么不难发现,这里的上下文 y 跟上面一句话一样&/li&&li&从而 f(吴彦祖) = f(我) = y,所以大数据告诉我们:我 = 吴彦祖(完美的结论)&/li&&/ul&&h2&3.2. Skip-gram 和 CBOW 模型&/h2&&p&上面我们提到了语言模型&/p&&ul&&li&如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』&/li&&li&而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』&/li&&/ul&&h2&3.2.1 Skip-gram 和 CBOW 的简单情形&/h2&&p&我们先来看个最简单的例子。上面说到, y 是 x 的上下文,所以 y 只取上下文里一个词语的时候,语言模型就变成:&/p&&blockquote&用当前词 x 预测它的下一个词 y&br&&/blockquote&&p&但如上面所说,一般的数学模型只接受数值型输入,这里的 x 该怎么表示呢? 显然不能用 Word2vec,因为这是我们训练完模型的产物,现在我们想要的是 x 的一个原始输入形式。&/p&&p&答案是:&b&one-hot encoder&/b&&/p&&p&所谓 one-hot encoder,其思想跟特征工程里处理类别变量的 one-hot 一样(参考我的前作『数据挖掘比赛通用框架』、『深挖One-hot和Dummy背后的玄机』)。本质上是用一个只含一个 1、其他都是 0 的向量来唯一表示词语。&/p&&p&我举个例子,假设全世界所有的词语总共有 V 个,这 V 个词语有自己的先后顺序,假设『吴彦祖』这个词是第1个词,『我』这个单词是第2个词,那么『吴彦祖』就可以表示为一个 V 维全零向量、把第1个位置的0变成1,而『我』同样表示为 V 维全零向量、把第2个位置的0变成1。这样,每个词语都可以找到属于自己的唯一表示。&/p&&p&OK,那我们接下来就可以看看 Skip-gram 的网络结构了,x 就是上面提到的 one-hot encoder 形式的输入,y 是在这 V 个词上输出的概率,我们希望跟真实的 y 的 one-hot encoder 一样。&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a1a73c063bfbd8f1ef59034b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&682& data-rawheight=&388& class=&origin_image zh-lightbox-thumb& width=&682& data-original=&https://pic4.zhimg.com/v2-a1a73c063bfbd8f1ef59034b_r.jpg&&&/figure&&p&&br&&/p&&p&首先说明一点:&b&隐层的激活函数其实是线性的&/b&,相当于没做任何处理(这也是 Word2vec 简化之前语言模型的独到之处),我们要训练这个神经网络,用&b&反向传播算法&/b&,本质上是&i&链式求导&/i&,在此不展开说明了,&br&&/p&&p&当模型训练完后,最后得到的其实是&b&神经网络的权重&/b&,比如现在输入一个 x 的 one-hot encoder: [1,0,0,…,0],对应刚说的那个词语『吴彦祖』,则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 vx 来表示x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 vx 就可以用来唯一表示 x。&/p&&p&&b&&i&注意:上面这段话说的就是 Word2vec 的精髓!!&/i&&/b&&/p&&p&此外,我们刚说了,输出 y 也是用 V 个节点表示的,对应V个词语,所以其实,我们把输出节点置成 [1,0,0,…,0],它也能表示『吴彦祖』这个单词,但是激活的是隐含层到输出层的权重,这些权重的个数,跟隐含层一样,也可以组成一个向量 vy,跟上面提到的 vx 维度一样,并且可以看做是&b&词语『吴彦祖』的另一种词向量&/b&。而这两种词向量 vx 和 vy,正是 Mikolov 在论文里所提到的,『输入向量』和『输出向量』,一般我们用『输入向量』。&/p&&p&需要提到一点的是,这个词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种&b&降维&/b&操作——把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。&/p&&h2&3.2.2. Skip-gram 更一般的情形&/h2&&p&上面讨论的是最简单情形,即 y 只有一个词,当 y 有多个词时,网络结构如下:&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ca81e19caa378cee6d4ba6d867f4fc7c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&540& data-rawheight=&617& class=&origin_image zh-lightbox-thumb& width=&540& data-original=&https://pic2.zhimg.com/v2-ca81e19caa378cee6d4ba6d867f4fc7c_r.jpg&&&/figure&&p&&br&&/p&&blockquote&可以看成是 单个x-&单个y 模型的并联,cost function 是单个 cost function 的累加(取log之后)&br&&/blockquote&&p&如果你想深入探究这些模型是如何并联、 cost function 的形式怎样,不妨仔细阅读参考资料4. 在此我们不展开。&/p&&h2&3.2.3 CBOW 更一般的情形&/h2&&p&跟 Skip-gram 相似,只不过:&/p&&blockquote&Skip-gram 是预测一个词的上下文,而 CBOW 是用上下文预测这个词&br&&/blockquote&&p&网络结构如下&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d1ca2547dfb91bf6a26c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&518& data-rawheight=&646& class=&origin_image zh-lightbox-thumb& width=&518& data-original=&https://pic3.zhimg.com/v2-d1ca2547dfb91bf6a26c_r.jpg&&&/figure&&p&&br&&/p&&p&更 Skip-gram 的模型并联不同,这里是输入变成了多个单词,所以要对输入处理下(一般是求和然后平均),输出的 cost function 不变,在此依然不展开,建议你阅读参考资料4.&/p&&h2&3.3. Word2vec 的训练trick&/h2&&p&相信很多初次踩坑的同学,会跟我一样陷入 Mikolov 那篇论文(参考资料1.)里提到的 hierarchical softmax 和 negative sampling 里不能自拔,但其实,它们并不是 Word2vec 的精髓,只是它的训练技巧,但也不是它独有的训练技巧。 Hierarchical softmax 只是 softmax 的一种近似形式(详见参考资料7.),而 negative sampling 也是从其他方法借鉴而来。&/p&&p&为什么要用训练技巧呢? 如我们刚提到的,Word2vec 本质上是一个语言模型,它的输出节点数是 V 个,对应了 V 个词语,本质上是一个多分类问题,但实际当中,词语的个数非常非常多,会给计算造成很大困难,所以需要用技巧来加速训练。&/p&&p&这里我总结了一下这两个 trick 的本质,有助于大家更好地理解,在此也不做过多展开,有兴趣的同学可以深入阅读参考资料1.~7.&/p&&ul&&li&hierarchical softmax&/li&&ul&&li&本质是把 N 分类问题变成 log(N)次二分类&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&negative sampling&/li&&ul&&li&本质是预测总体类别的一个子集&/li&&/ul&&/ul&&p&&br&&/p&&h2&3.4. 扩展&/h2&&p&很多时候,当我们面对林林总总的模型、方法时,我们总希望总结出一些本质的、共性的东西,以构建我们的知识体系,比如我在前作『分类和回归的本质』里,原创性地梳理了分类模型和回归模型的本质联系,比如在词嵌入领域,除了 Word2vec之外,还有基于共现矩阵分解的 GloVe 等等词嵌入方法。&/p&&p&深入进去我们会发现,神经网络形式表示的模型(如 Word2vec),跟共现矩阵分解模型(如 GloVe),有理论上的相通性,这里我推荐大家阅读参考资料5. ——来斯惟博士在它的博士论文附录部分,证明了 Skip-gram 模型和 GloVe 的 cost fucntion 本质上是一样的。是不是一个很有意思的结论? 所以在实际应用当中,这两者的差别并不算很大,尤其在很多 high-level 的 NLP 任务(如句子表示、命名体识别、文档表示)当中,经常把词向量作为原始输入,而到了 high-level 层面,差别就更小了。&/p&&p&鉴于词语是 NLP 里最细粒度的表达,所以词向量的应用很广泛,既可以执行词语层面的任务,也可以作为很多模型的输入,执行 high-level 如句子、文档层面的任务,包括但不限于:&/p&&ul&&li&计算相似度&/li&&ul&&li&寻找相似词&/li&&li&信息检索&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&作为 SVM/LSTM 等模型的输入&/li&&ul&&li&中文分词&/li&&li&命名体识别&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&句子表示&/li&&ul&&li&情感分析&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&文档表示&/li&&ul&&li&文档主题判别&/li&&/ul&&/ul&&p&&br&&/p&&h2&4. 实战&/h2&&p&上面讲了这么多理论细节,其实在真正应用的时候,只需要调用 Gensim (一个 Python 第三方库)的接口就可以。但对理论的探究仍然有必要,你能更好地知道参数的意义、模型结果受哪些因素影响,以及举一反三地应用到其他问题当中,甚至更改源码以实现自己定制化的需求。&/p&&p&这里我们将使用 Gensim 和 NLTK 这两个库,来完成对生物领域的相似词挖掘,将涉及:&/p&&ul&&li&解读 Gensim 里 Word2vec 模型的参数含义&/li&&li&基于相应语料训练 Word2vec 模型,并评估结果&/li&&li&对模型结果调优&/li&&/ul&&p&语料我已经放出来了,可以关注我的公众号『数据挖掘机养成记』,并回复 Sherlocked 获取语料,包含5000行生物医学领域相关文献的摘要(英文)&/p&&p&&br&&/p&&p&我将在下一篇文章里详细讲解实战步骤,敬请关注本人公众号。友情建议:请先自行安装 Gensim 和 NLTK 两个库,并建议使用 jupyter notebook 作为代码运行环境&/p&&p&&br&&/p&&p&&i&&b&欢迎各路大神猛烈拍砖,共同交流&/b&&/i&&/p&&p&&br&&/p&&p&====评论区答疑节选====&/p&&p&Q1. gensim 和 google的 word2vec 里面并没有用到onehot encoder,而是初始化的时候直接为每个词随机生成一个N维的向量,并且把这个N维向量作为模型参数学习;所以word2vec结构中不存在文章图中显示的将V维映射到N维的隐藏层。&/p&&p&A1. 其实,本质是一样的,加上 one-hot encoder 层,是为了方便理解,因为这里的 N 维随机向量,就可以理解为是 V 维 one-hot encoder 输入层到 N 维隐层的权重,或者说隐层的输出(因为隐层是线性的)。每个 one-hot encoder 里值是 1 的那个位置,对应的 V 个权重被激活,其实就是『从一个V*N的随机词向量矩阵里,抽取某一行』。学习 N 维向量的过程,也就是优化 one-hot encoder 层到隐含层权重的过程&/p&&p&Q2. hierarchical softmax 获取词向量的方式和原先的其实基本完全不一样,我初始化输入的也不是一个onehot,同时我是直接通过优化输入向量的形式来获取词向量?如果用了hierarchical 结构我应该就没有输出向量了吧?&br&&/p&&p&&br&&/p&&p&A2. 初始化输入依然可以理解为是 one-hot,同上面的回答;确实是只能优化输入向量,没有输出向量了。具体原因,我们可以梳理一下不用 hierarchical (即原始的 softmax) 的情形:&/p&&blockquote&隐含层输出一个 N 维向量 x, 每个x 被一个 N 维权重 w 连接到输出节点上,有 V 个这样的输出节点,就有 V 个权重 w,再套用 softmax 的公式,变成 V 分类问题。这里的类别就是词表里的 V 个词,所以一个词就对应了一个权重 w,从而可以用 w 作为该词的词向量,即文中的输出词向量。&br&&br&PS. 这里的 softmax 其实多了一个『自由度』,因为 V 分类只需要 V-1 个权重即可&/blockquote&&p&我们再看看 hierarchical softmax 的情形:&/p&&blockquote&隐含层输出一个 N 维向量 x, 但这里要预测的目标输出词,不再是用 one-hot 形式表示,而是用 huffman tree 的编码,所以跟上面 V 个权重同时存在的原始 softmax 不一样, 这里 x 可以理解为先接一个输出节点,即只有一个权重 w1 ,输出节点输出 1/1+exp(-w*x),变成一个二分类的 LR,输出一个概率值 P1,然后根据目标词的 huffman tree 编码,将 x 再输出到下一个 LR,对应权重 w2,输出 P2,总共遇到的 LR 个数(或者说权重个数)跟 huffman tree 编码长度一致,大概有 log(V) 个,最后将这 log(V) 个 P 相乘,得到属于目标词的概率。但注意因为只有 log(V) 个权重 w 了,所以跟 V 个词并不是一一对应关系,就不能用 w 表征某个词,从而失去了词向量的意义&br&&br&PS. 但我个人理解,这 log(V) 个权重的组合,可以表示某一个词。因为 huffman tree 寻找叶子节点的时候,可以理解成是一个不断『二分』的过程,不断二分到只剩一个词为止。而每一次二分,都有一个 LR 权重,这个权重可以表征该类词,所以这些权重拼接在一起,就表示了『二分』这个过程,以及最后分到的这个词的『输出词向量』。&br&&br&我举个例子:&br&&br&假设现在总共有 (A,B,C)三个词,huffman tree 这么构建:&br&第一次二分: (A,B), (C)&br&假如我们用的 LR 是二分类 softmax 的情形(比常见 LR 多了一个自由度),这样 LR 就有俩权重,权重 w1_1 是属于 (A,B) 这一类的,w1_2 是属于 (C) 的, 而 C 已经到最后一个了,所以 C 可以表示为 w1_2&br&&br&第二次二分: (A), (B)&br&假设权重分别对应 w2_1 和 w2_2,那么 A 就可以表示为 [w1_1, w2_1], B 可以表示为 [w1_1, w2_2]&br&&br&这样, A,B,C 每个词都有了一个唯一表示的词向量(此时他们长度不一样,不过可以用 padding 的思路,即在最后补0)&br&&br&当然了,一般没人这么干。。。开个脑洞而已&/blockquote&&p&&br&&/p&&p&&br&&/p&&p&Q3. 是否一定要用Huffman tree?&/p&&p&A3. 未必,比如用完全二叉树也能达到O(log(N))复杂度。但 Huffman tree 被证明是更高效、更节省内存的编码形式,所以相应的权重更新寻优也更快。 举个简单例子,高频词在Huffman tree中的节点深度比完全二叉树更浅,比如在Huffman tree中深度为3,完全二叉树中深度为5,则更新权重时,Huffmantree只需更新3个w,而完全二叉树要更新5个,当高频词频率很高时,算法效率高下立判&/p&
转自我的公众号: 『数据挖掘机养成记』 1. 引子大家好 我叫数据挖掘机 皇家布鲁斯特大学肄业 我喝最烈的果粒橙,钻最深的牛角尖 ——执着如我今天我要揭开Word2vec的神秘面纱 直窥其本质相信我,这绝对是你看到的 最浅白易懂的 Word2vec 中文总结(蛤?你问…
知乎不能插入表格……!?那多图慎入……&br&-----&br&最近在准备申请读博,也在收集整理这方面的信息。以后也许会持续更新吧。&br&&br&先看大方向,这个比较好统计。&br&&br&NLP研究的大方向可以参考NLP会议的领域进行划分。各方向的热度可以参考顶会各个领域的论文接收数。虽然这个方法可能不是很实时,但我认为长期(五年)看还是能反映研究热度的,毕竟如果一个领域热门,研究人员多、进展多、论文多,大会组织者就会相应的扩大论文的接收数。&br&不过会不会论文多是因为灌水多?所以我说要看长期而且是看顶会,一个会议如果长期允许这么灌水其档次肯定会下跌,市场规律嘛,这年头办个好会议也不容易。&br&&br&&a href=&//link.zhihu.com/?target=http%3A//www.aclweb.org/aclwiki/index.php%3Ftitle%3DAreas%2C_chairs%2C_and_area_submissions& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Areas, chairs, and area submissions&/a& 提供了NLP顶会ACL近五年的各个领域的论文接收数量。&br&我按照接收论文数做了个排序,结果如下(第一列领域名,第二列接收论文数,第三列占全体论文数百分比):&br&&br&&br&2010年&br&total paper: 930&br&&figure&&img src=&https://pic4.zhimg.com/50/4d8caef8277_b.jpg& data-rawwidth=&450& data-rawheight=&401& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic4.zhimg.com/50/4d8caef8277_r.jpg&&&/figure&&br&2011年&br&total paper: 1158&br&&figure&&img src=&https://pic1.zhimg.com/50/1f73d7c009b65a4eb8a1cd10da4b1b98_b.jpg& data-rawwidth=&577& data-rawheight=&401& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&https://pic1.zhimg.com/50/1f73d7c009b65a4eb8a1cd10da4b1b98_r.jpg&&&/figure&&br&2012年&br&total paper: 940&br&&figure&&img src=&https://pic2.zhimg.com/50/aebede91d04fe9b68a04f894e6dd847e_b.jpg& data-rawwidth=&577& data-rawheight=&321& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&https://pic2.zhimg.com/50/aebede91d04fe9b68a04f894e6dd847e_r.jpg&&&/figure&&br&2013年&br&total paper: 1286&br&&figure&&img src=&https://pic2.zhimg.com/50/f8bab5d34fcc9d70df0a4d_b.jpg& data-rawwidth=&577& data-rawheight=&421& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&https://pic2.zhimg.com/50/f8bab5d34fcc9d70df0a4d_r.jpg&&&/figure&&br&2014年&br&total paper: 1044&br&&figure&&img src=&https://pic4.zhimg.com/50/dd4e00e53c3561afee50dc_b.jpg& data-rawwidth=&577& data-rawheight=&421& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&https://pic4.zhimg.com/50/dd4e00e53c3561afee50dc_r.jpg&&&/figure&&br&---&br&&br&题主可以根据这些数据自行判断各个领域的热门情况与趋势。&br&我就总结一个最简单的结论,5年累计发表论文最多的5个领域:&br&&figure&&img src=&https://pic4.zhimg.com/50/56456aef9a9c8c38bbeb_b.jpg& data-rawwidth=&326& data-rawheight=&121& class=&content_image& width=&326&&&/figure&&br&这5个领域可以说是当前国际自然语言处理的研究热点吧(范围有点大……)。&br&&br&至于有哪些具体的研究热点……如果我能找到好切入点与数据支持,会继续分享的~
知乎不能插入表格……!?那多图慎入…… ----- 最近在准备申请读博,也在收集整理这方面的信息。以后也许会持续更新吧。 先看大方向,这个比较好统计。 NLP研究的大方向可以参考NLP会议的领域进行划分。各方向的热度可以参考顶会各个领域的论文接收数。虽…
&p&这里我想给大家介绍另外一种推荐系统,这种算法叫做潜在因子(Latent
Factor)算法。这种算法是在NetFlix(没错,就是用大数据捧火《纸牌屋》的那家公司)的推荐算法竞赛中获奖的算法,最早被应用于电影推荐中。这种算法在实际应用中比现在排名第一的 &a data-hash=&ac7121dce72e2424edbd552& href=&//www.zhihu.com/people/ac7121dce72e2424edbd552& class=&member_mention& data-editable=&true& data-title=&@邰原朗& data-tip=&p$b$ac7121dce72e2424edbd552& data-hovercard=&p$b$ac7121dce72e2424edbd552&&@邰原朗&/a& 所介绍的算法误差(RMSE)会小不少,效率更高。我下面仅利用基础的矩阵知识来介绍下这种算法。&/p&&p&这种算法的思想是这样:每个用户(&b&user&/b&)都有自己的偏好,比如A喜欢带有&b&小清新的&/b&、&b&吉他伴奏的&/b&、&b&王菲&/b&等元素(&b&latent factor&/b&),如果一首歌(&b&item&/b&)带有这些元素,那么就将这首歌推荐给该用户,也就是用元素去连接用户和音乐。每个人对不同的元素偏好不同,而每首歌包含的元素也不一样。我们希望能找到这样两个矩阵:&/p&&p&一,&b&用户-潜在因子矩阵Q&/b&,表示不同的用户对于不用元素的偏好程度,1代表很喜欢,0代表不喜欢。比如下面这样:&/p&&figure&&img src=&https://pic3.zhimg.com/50/6be14fdab88e_b.jpg& data-rawwidth=&543& data-rawheight=&194& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic3.zhimg.com/50/6be14fdab88e_r.jpg&&&/figure&&p&二,&b&潜在因子-音乐矩阵P&/b&,表示每种音乐含有各种元素的成分,比如下表中,音乐A是一个偏小清新的音乐,含有小清新这个Latent Factor的成分是0.9,重口味的成分是0.1,优雅的成分是0.2……&/p&&figure&&img src=&https://pic1.zhimg.com/50/b37d2aea4a35d3f45e8f25fd121c4e52_b.jpg& data-rawwidth=&543& data-rawheight=&231& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic1.zhimg.com/50/b37d2aea4a35d3f45e8f25fd121c4e52_r.jpg&&&/figure&&p&利用这两个矩阵,我们能得出张三对音乐A的喜欢程度是:张三对&b&小清新&/b&的偏好*音乐A含有&b&小清新&/b&的成分+对&b&重口味&/b&的偏好*音乐A含有&b&重口味&/b&的成分+对&b&优雅&/b&的偏好*音乐A含有&b&优雅&/b&的成分+……&/p&&figure&&img src=&https://pic4.zhimg.com/50/7a37d920fff8d307c9e8_b.jpg& data-rawwidth=&543& data-rawheight=&116& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic4.zhimg.com/50/7a37d920fff8d307c9e8_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/5cddc0bb594de2b8bd3e47_b.jpg& data-rawwidth=&543& data-rawheight=&116& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic1.zhimg.com/50/5cddc0bb594de2b8bd3e47_r.jpg&&&/figure&&p&即:0.6*0.9+0.8*0.1+0.1*0.2+0.1*0.4+0.7*0=0.69&/p&&p&每个用户对每首歌都这样计算可以得到不同用户对不同歌曲的评分矩阵&img src=&//www.zhihu.com/equation?tex=%5Ctilde%7BR%7D+& alt=&\tilde{R} & eeimg=&1&&。(注,这里的破浪线表示的是估计的评分,接下来我们还会用到不带波浪线的R表示实际的评分):&/p&&figure&&img src=&https://pic4.zhimg.com/50/a16ed64edfb9bc4e_b.jpg& data-rawwidth=&459& data-rawheight=&194& class=&origin_image zh-lightbox-thumb& width=&459& data-original=&https://pic4.zhimg.com/50/a16ed64edfb9bc4e_r.jpg&&&/figure&&p&因此我们队张三推荐四首歌中得分最高的B,对李四推荐得分最高的C,王五推荐B。&/p&&p&如果用矩阵表示即为:&/p&&img src=&//www.zhihu.com/equation?tex=%5Ctilde%7BR%7D+%3DQP%5E%7BT%7D+& alt=&\tilde{R} =QP^{T} & eeimg=&1&&&br&&br&&p&下面问题来了,&b&这个潜在因子(latent factor)&/b&&b&是怎么得到的呢?&/b&&/p&由于面对海量的让用户自己给音乐分类并告诉我们自己的偏好系数显然是不现实的,事实上我们能获得的数据只有用户行为数据。我们沿用 &a data-hash=&ac7121dce72e2424edbd552& href=&//www.zhihu.com/people/ac7121dce72e2424edbd552& class=&member_mention& data-editable=&true& data-title=&@邰原朗& data-tip=&p$b$ac7121dce72e2424edbd552& data-hovercard=&p$b$ac7121dce72e2424edbd552&&@邰原朗&/a&的量化标准:单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-2 , 拉黑=-5,在分析时能获得的实际评分矩阵&b&R&/b&,也就是输入矩阵大概是这个样子:&br&&figure&&img src=&https://pic2.zhimg.com/50/1a783eefd2beaa432faf2e2_b.jpg& data-rawwidth=&1079& data-rawheight=&298& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&https://pic2.zhimg.com/50/1a783eefd2beaa432faf2e2_r.jpg&&&/figure&事实上这是个非常非常稀疏的矩阵,因为大部分用户只听过全部音乐中很少一部分。如何利用这个矩阵去找潜在因子呢?这里主要应用到的是矩阵的UV分解。也就是将上面的评分矩阵分解为两个低维度的矩阵,用Q和P两个矩阵的乘积去估计实际的评分矩阵,而且我们希望估计的评分矩阵&img src=&//www.zhihu.com/equation?tex=%5Ctilde%7BR%7D+& alt=&\tilde{R} & eeimg=&1&&&br&&figure&&img src=&https://pic3.zhimg.com/50/59b28d6c857ececb8a08a6c_b.jpg& data-rawwidth=&1082& data-rawheight=&259& class=&origin_image zh-lightbox-thumb& width=&1082& data-original=&https://pic3.zhimg.com/50/59b28d6c857ececb8a08a6c_r.jpg&&&/figure&&br&和实际的评分矩阵不要相差太多,也就是求解下面的目标函数:&br&&img src=&//www.zhihu.com/equation?tex=min_%7BP%2CQ%7D+%5CSigma+%28r_%7Bui%7D-q_%7Bi%7Dp_%7Bu%7D%5E%7BT%7D%29%5E2& alt=&min_{P,Q} \Sigma (r_{ui}-q_{i}p_{u}^{T})^2& eeimg=&1&&&br&这里涉及到最优化理论,在实际应用中,往往还要在后面加上2范数的罚项,然后利用梯度下降法就可以求得这&b&P,Q&/b&两个矩阵的估计值。这里我们就不展开说了。例如我们上面给出的那个例子可以分解成为这样两个矩阵:&br&&figure&&img src=&https://pic3.zhimg.com/50/56d1d16d5abe403cb9371_b.jpg& data-rawwidth=&1483& data-rawheight=&298& class=&origin_image zh-lightbox-thumb& width=&1483& data-original=&https://pic3.zhimg.com/50/56d1d16d5abe403cb9371_r.jpg&&&/figure&这两个矩阵相乘就可以得到估计的得分矩阵:&br&&figure&&img src=&https://pic3.zhimg.com/50/c3e70bdd45d67b49d81e4bd_b.jpg& data-rawwidth=&1177& data-rawheight=&298& class=&origin_image zh-lightbox-thumb& width=&1177& data-original=&https://pic3.zhimg.com/50/c3e70bdd45d67b49d81e4bd_r.jpg&&&/figure&将用户已经听过的音乐剔除后,选择分数最高音乐的推荐给用户即可(红体字)。&br&&br&在这个例子里面用户7和用户8有强的相似性:&br&&figure&&img src=&https://pic1.zhimg.com/50/78188eafd238feba2063d_b.jpg& data-rawwidth=&1079& data-rawheight=&67& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&https://pic1.zhimg.com/50/78188eafd238feba2063d_r.jpg&&&/figure&从推荐的结果来看,正好推荐的是对方评分较高的音乐:&br&&figure&&img src=&https://pic3.zhimg.com/50/ae603dd2cb19d4f01f42fc_b.jpg& data-rawwidth=&1079& data-rawheight=&67& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&https://pic3.zhimg.com/50/ae603dd2cb19d4f01f42fc_r.jpg&&&/figure&
这里我想给大家介绍另外一种推荐系统,这种算法叫做潜在因子(Latent
Factor)算法。这种算法是在NetFlix(没错,就是用大数据捧火《纸牌屋》的那家公司)的推荐算法竞赛中获奖的算法,最早被应用于电影推荐中。这种算法在实际应用中比现在排名第一的 …
Michael Collins的讲义:&br&&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%257Emcollins/hmms-spring2013.pdf& target=&_blank& rel=&nofollow noreferrer&&Tagging Problems and Hidden Markov Models&/a& (22页)&br&&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/loglinear.pdf& target=&_blank& rel=&nofollow noreferrer&&Log-Linear Model&/a& (20页)&br&&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/fall2014-loglineartaggers.pdf& target=&_blank& rel=&nofollow noreferrer&&MEMMs (Log-Linear Tagging Models)&/a& (12页)&br&&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/crf.pdf& target=&_blank& rel=&nofollow noreferrer&&Log-Linear Models, MEMMs, and CRFs &/a&(11页)&br&&br&问题描述与模型实现讲的很清晰。&br&&br&至于背后的数学原理……&br&HMM模型感觉没什么数学原理吧……&br&MEMM与CRF都是Log-Linear Model的变种,关于Log-Linear模型的数学原理,我觉得讲的最好的是:&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/3294335/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Elements of Statistical Learning (豆瓣)&/a&
Michael Collins的讲义:
(12页) (11页) 问题描述与模型实现讲的很清晰。 至于背后的数学原理…
&p&尝试用高中概率知识去理解一下 Veterbi 算法。内容绝对粗浅,100% 抄袭,欢迎指正。用一个别人家的栗子来说一下。&/p&&p&&b&1.题目背景:&/b&&/p&&blockquote&从前有个村儿,村里的人的身体情况只有两种可能:健康或者发烧。&br&假设这个村儿的人没有体温计或者百度这种神奇东西,他唯一判断他身体情况的途径就是到村头我的偶像金正月的小诊所询问。&br&月儿通过询问村民的感觉,判断她的病情,再假设村民只会回答正常、头晕或冷。&br&有一天村里奥巴驴就去月儿那去询问了。&br&第一天她告诉月儿她感觉正常。&br&第二天她告诉月儿感觉有点冷。&br&第三天她告诉月儿感觉有点头晕。&br&那么问题来了,月儿如何根据阿驴的描述的情况,推断出这三天中阿驴的一个身体状态呢?&br&为此月儿上百度搜 google ,一番狂搜,发现维特比算法正好能解决这个问题。月儿乐了。&/blockquote&&p&&br&&/p&&p&&b&2.已知情况:&/b&&/p&&blockquote&隐含的身体状态 = { 健康 , 发烧 }&br&&br&可观察的感觉状态 = { 正常 , 冷 , 头晕 }&br&&br&月儿预判的阿驴身体状态的概率分布 = { 健康:0.6 , 发烧: 0.4 }&br&&br&月儿认为的阿驴身体健康状态的转换概率分布 = {&br&健康-&健康: 0.7 ,&br&健康-&发烧: 0.3 ,&br&发烧-&健康:0.4 ,&br&发烧-&发烧: 0.6&br&}&br&&br&月儿认为的在相应健康状况条件下,阿驴的感觉的概率分布 = {&br&健康,正常:0.5 ,冷 :0.4 ,头晕: 0.1 ;&br&发烧,正常:0.1 ,冷 :0.3 ,头晕: 0.6 &br&}&br&阿驴连续三天的身体感觉依次是: 正常、冷、头晕 。&/blockquote&&p&&br&&/p&&p&&b&3.题目:&/b&&/p&&blockquote&已知如上,求:阿驴这三天的身体健康状态变化的过程是怎么样的?&br&&/blockquote&&p&&br&&/p&&p&&b&4.过程:&/b&&/p&&blockquote&根据 Viterbi 理论,后一天的状态会依赖前一天的状态和当前的可观察的状态。那么只要根据第一天的正常状态依次推算找出到达第三天头晕状态的最大的概率,就可以知道这三天的身体变化情况。&br&传不了图片,悲剧了。。。&br&1.初始情况:&/blockquote&&ul&&li&P(健康) = 0.6,P(发烧)=0.4。&br&&/li&&/ul&&p&2.求第一天的身体情况:&br&计算在阿驴感觉正常的情况下最可能的身体状态。&br&&/p&&ul&&li&P(今天健康) = P(正常|健康)*P(健康|初始情况) = 0.5 * 0.6 = &b&0.3&/b& &/li&&li&P(今天发烧) = P(正常|发烧)*P(发烧|初始情况) = 0.1 * 0.4 = &b&0.04&/b& &/li&&/ul&&p&那么就可以认为第一天最可能的身体状态是:健康。&br&3.求第二天的身体状况:&br&计算在阿驴感觉冷的情况下最可能的身体状态。&br&那么第二天有四种情况,由于第一天的发烧或者健康转换到第二天的发烧或者健康。&/p&&ul&&li&P(前一天发烧,今天发烧) = P(前一天发烧)*P(发烧-&发烧)*P(冷|发烧) = 0.04 *
0.6 * 0.3 = 0.0072&/li&&li&P(前一天发烧,今天健康) = P(前一天发烧)*P(发烧-&健康)*P(冷|健康) = 0.04 * 0.4 * 0.4 = 0.0064&/li&&li&P(前一天健康,今天健康) = P(前一天健康)*P(健康-&健康)*P(冷|健康) = 0.3 * 0.7 * 0.4 =
&b&0.084&/b& &/li&&li&P(前一天健康,今天发烧) = P(前一天健康)*P(健康-&发烧)*P(冷|发烧) = 0.3 * 0.3 *.03 = &b&0.027&/b& &/li&&/ul&&p&那么可以认为,第二天最可能的状态是:健康。&br&4.求第三天的身体状态:&br&计算在阿驴感觉头晕的情况下最可能的身体状态。&br&&/p&&ul&&li&P(前一天发烧,今天发烧) = P(前一天发烧)*P(发烧-&发烧)*P(头晕|发烧) = 0.027 *
0.6 * 0.6 = &b&0.00972&/b& &/li&&li&P(前一天发烧,今天健康) = P(前一天发烧)*P(发烧-&健康)*P(头晕|健康) = 0.027 * 0.4 * 0.1 = 0.00108&/li&&li&P(前一天健康,今天健康) = P(前一天健康)*P(健康-&健康)*P(头晕|健康) = 0.084 * 0.7 * 0.1 =
0.00588&/li&&li&P(前一天健康,今天发烧) = P(前一天健康)*P(健康-&发烧)*P(头晕|发烧) = 0.084 * 0.3 *0.6 = 0.01512&/li&&/ul&&p&那么可以认为:第三天最可能的状态是发烧。&/p&&p&&b&5.结论&/b&&/p&&blockquote&根据如上计算。这样月儿断定,阿驴这三天身体变化的序列是:健康-&健康-&发烧。&/blockquote&&p&&br&&/p&&p&维基百科的这个例子的动态图:&a href=&//link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/File%3AViterbi_animated_demo.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&File:Viterbi animated demo.gif&/a&&/p&&p&&br&&/p&&p&这个算法大概就是通过已知的可以观察到的序列,和一些已知的状态转换之间的概率情况,通过综合状态之间的转移概率和前一个状态的情况计算出概率最大的状态转换路径,从而推断出隐含状态的序列的情况。&/p&
尝试用高中概率知识去理解一下 Veterbi 算法。内容绝对粗浅,100% 抄袭,欢迎指正。用一个别人家的栗子来说一下。1.题目背景:从前有个村儿,村里的人的身体情况只有两种可能:健康或者发烧。 假设这个村儿的人没有体温计或者百度这种神奇东西,他唯一判断…
在文本挖掘中,相关词的定义是比较广义的一个概念,关键还是要看你怎么去定义相关。相关词包括“同义词”、“近义词”、“反义词”等诸多方面。针对不同类型的词汇,有不同的分析手段。从方法上,针对相关词进行挖掘,有基于“语料库(文本库)”的研究和基于“词汇表”的研究。&br&1. 基于语料库的研究&br&如果不加以区分的话,只想定义两个词是否相关,一般是按照词汇共现性的范例个数作为分析指标。也就是说,你需要去统计,在一个语料库中,两个词汇同时出现的频度,基于这个统计量,也衍生出了许多具体的统计指标,如互信息度指标。&br&&figure&&img src=&https://pic4.zhimg.com/50/4e47a029eb40fe009e6b083e5c0491c4_b.jpg& data-rawwidth=&424& data-rawheight=&98& class=&origin_image zh-lightbox-thumb& width=&424& data-original=&https://pic4.zhimg.com/50/4e47a029eb40fe009e6b083e5c0491c4_r.jpg&&&/figure&其中,分子是两个词汇共同出现的概率,分母是两个词汇分别单独出现的概率。&br&&br&2. 基于词汇表的研究&br&另外,也有一些对于相关词的挖掘是基于词汇表的研究。有人专门对目前通用的词汇构建了可以被计算机所识别的词汇表,如HowNet,WordNet等。这些词汇表对词汇进行定义,也对词汇之间的相关关系作出了限定,如“从属关系”、“平行关系”等。完整的词汇关系构成一个语义网,然后基于语义网的网络拓扑结构可以设计许多有用的算法来衡量词汇之间的相似程度。下图是一个语义网的实例,如果能量化节点之间的距离,将是一个评判词汇语义相似度的很好客观依据。&br&&figure&&img src=&https://pic3.zhimg.com/50/3af8b56f77ea6c07d40c_b.jpg& data-rawwidth=&798& data-rawheight=&563& class=&origin_image zh-lightbox-thumb& width=&798& data-original=&https://pic3.zhimg.com/50/3af8b56f77ea6c07d40c_r.jpg&&&/figure&
在文本挖掘中,相关词的定义是比较广义的一个概念,关键还是要看你怎么去定义相关。相关词包括“同义词”、“近义词”、“反义词”等诸多方面。针对不同类型的词汇,有不同的分析手段。从方法上,针对相关词进行挖掘,有基于“语料库(文本库)”的研究和基…
最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我其实也还理解不深...只是nltk 提供了相应方法)。&br&&br&我感觉用nltk 处理中文是完全可用的。其重点在于中文分词和文本表达的形式。&br&中文和英文主要的不同之处是中文需要分词。因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词,直接用分词包就可以了。严重推荐结巴分词,非常好用)。&br&中文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各种方法来处理这个文本了。比如用FreqDist 统计文本词频,用bigrams 把文本变成双词组的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。&br&再之后就可以用这些来计算文本词语的信息熵、互信息等。&br&再之后可以用这些来选择机器学习的特征,构建分类器,对文本进行分类(商品评论是由多个独立评论组成的多维数组,网上有很多情感分类的实现例子用的就是nltk 中的商品评论语料库,不过是英文的。但整个思想是可以一致的)。&br&&br&另外还有一个困扰很多人的Python 中文编码问题。多次失败后我总结出一些经验。&br&Python 解决中文编码问题基本可以用以下逻辑:&br&utf8(输入) ——& unicode(处理) ——& (输出)utf8&br&Python 里面处理的字符都是都是unicode 编码,因此解决编码问题的方法是把输入的文本(无论是什么编码)解码为(decode)unicode编码,然后输出时再编码(encode)成所需编码。&br&由于处理的一般为txt 文档,所以最简单的方法,是把txt 文档另存为utf-8 编码,然后使用Python 处理的时候解码为unicode(sometexts.decode('utf8')),输出结果回txt 的时候再编码成utf8(直接用str() 函数就可以了)。&br&&br&另外这篇文章也有很详细的讲到nltk 的中文应用,很值得参考:&a href=&//link.zhihu.com/?target=http%3A//m.blog.csdn.net/blog/huyoo/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://blog.csdn.net/huyoo/article/details/&/a&
最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我其实也还理解不深...只是nltk 提供了相应方法)。 我感觉用nltk 处理中文是完全可用的。其…
题主的问题太多了,每个展开都可以讲很多~&br&作为自然语言处理(NLP)方向的研究生,我来回答一下题主关于自然语言处理如何入门的问题吧,最后再YY一下自然语言处理的前途~&br&&br&有点话我想说在前头:&br&不管学什么东西,都要跟大牛去学,真正的大牛可以把一件事解释的清清楚楚。&br&If you can't explain it simply, you don't understand it well enough.&br&跟大牛学东西,你不会觉得难,一切都觉得很自然,顺利成章的就掌握了整套的知识。&br&不过很遗憾,大牛毕竟是少数,愿意教别人的大牛更少,所以如果遇到,就不要强求语言了吧~&br&&br&开始进入正题,我将介绍如何从零基础入门到基本达到NLP前沿:&br&&br&----------NLP零基础入门----------&br&&br&首推资料以及唯一的资料:&br&&br&Columbia University, Micheal Collins教授的自然语言课程&br&链接&& &a href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Michael Collins&/a&&br&&br&Michael Collins,绝对的大牛,我心目中的偶像,这门课是我见过讲NLP最最最清楚的!尤其是他的讲义!&br&Collins的讲义,没有跳步,每一步逻辑都无比自然,所有的缩写在第一次出现时都有全拼,公式角标是我见过的最顺眼的(不像有的论文公式角标反人类啊),而且公式角标完全正确(太多论文的公式角标有这样那样的错标,这种时候真是坑死人了,读个论文跟破译密码似的),而且几乎不涉及矩阵表示……(初学者可能不习惯矩阵表示吧)。&br&最关键的是,Collins的语言措辞真是超级顺畅,没有长难句,没有装逼句,没有语法错误以及偏难怪的表示(学术圈大都是死理工科宅,语文能这么好真实太难得了)。《数学之美》的作者吴军博士在书中评价Collins的博士论文语言如小说般流畅,其写作功底可见一般。&br&&br&举两个例子,如果有时间,不妨亲自体验下,静下心来读一读,我相信即使是零基础的人也是能感受到大师的魅力的。&br&1.语言模型(Language Model)&br&&a href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/lm-spring2013.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.columbia.edu/~mcolli&/span&&span class=&invisible&&ns/lm-spring2013.pdf&/span&&span class=&ellipsis&&&/span&&/a&&br&2.隐马尔可夫模型与序列标注问题(Tagging Problems and Hidden Markov Models)&br&&a href=&//link.zhihu.com/?target=http%3A//www.cs.columbia.edu/%7Emcollins/hmms-spring2013.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.columbia.edu/~mcolli&/span&&span class=&invisible&&ns/hmms-spring2013.pdf&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&&br&现在Michael Collins在coursera上也开了公开课,视频免费看&br&链接&& &a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/course/nlangp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coursera&/a&&br&比看讲义更清晰,虽然没有字幕,但是不妨一试,因为讲的真的好清楚。&br&其在句法分析与机器翻译部分的讲解是绝对的经典。&br&&br&如果能把Collins的课跟下来,讲义看下来,那么你已经掌握了NLP的主要技术与现状了。&br&应该可以看懂部分论文了,你已经入门了。&br&&br&----------NLP进阶----------&br&&br&Collins的NLP课程虽然讲的清晰,不过有些比较重要的前沿的内容没有涉及(应该是为了突出重点做了取舍),比如语言模型的KN平滑算法等。&br&此外,Collins的课程更注重于NLP所依赖的基础算法,而对于这些算法的某些重要应用并没涉及,比如虽然讲了序列标注的算法隐马尔可夫模型,条件随机场模型,最大熵模型,但是并没有讲如何用这些算法来做命名实体识别、语义标注等。&br&&br&Stanford NLP组在coursera的这个课程很好的对Collins的课进行了补充。&br&链接&& &a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/course/nlp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coursera&/a&&br&&br&本课程偏算法的应用,算法的实现过的很快,不过上完Collins的课后再上感觉刚刚好~&br&(这两门课是Coursera上仅有的两门NLP课,不得不佩服Coursera上的课都是精品啊!)&br&&br&----------进阶前沿----------&br&&br&上完以上两个课后,NLP的主要技术与实现细节就应该都清楚了, 离前沿已经很近了,读论文已经没问题了。&br&想要继续进阶前沿,就要读论文了。&br&NLP比起其它领域的一个最大的好处,此时就显现出来了,NLP领域的所有国际会议期刊论文都是可以免费下载的!而且有专人整理维护,每篇论文的bibtex也是相当清晰详细。&br&链接&& &a href=&//link.zhihu.com/?target=http%3A//www.aclweb.org/anthology/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ACL Anthology&/a&&br&&br&关于NLP都有哪些研究方向,哪些比较热门,可以参考:&a href=&http://www.zhihu.com/question//answer/& class=&internal&&当前国内外在自然语言处理领域的研究热点&难点? - White Pillow 的回答&/a&&br&&br&NLP是会议主导,最前沿的工作都会优先发表在会议上。关于哪个会议档次比较高,可以参考谷歌给出的会议排名:&br&&a href=&//link.zhihu.com/?target=https%3A//scholar.google.ca/citations%3Fview_op%3Dtop_venues%26hl%3Den%26vq%3Deng_computationallinguistics& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Top conference页面&/a&&br&也可以参考各个会议的录稿率(一般来说越低表示会议档次越高):&br&&a href=&//link.zhihu.com/?target=http%3A//www.aclweb.org/aclwiki/index.php%3Ftitle%3DConference_acceptance_rates& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Conference acceptance rates&/a&&br&基本上大家公认的NLP最顶级的会议为ACL,可以优先看ACL的论文。&br&&br&-------------------------&br&&br&最后简单谈一下这三者哪个更有发展潜力……作为一个NLP领域的研究生,当然要说NLP领域有潜力啦!&br&&br&这里YY几个未来可能会热门的NLP的应用:&br&&b&语法纠错&/b&&br&目前文档编辑器(比如Word)只能做单词拼写错误识别,语法级别的错误还无能为力。现在学术领域最好的语法纠错系统的正确率已经可以接近50%了,部分细分错误可以做到80%以上,转化成产品的话很有吸引力吧~无论是增强文档编辑器的功能还是作为教学软件更正英语学习者的写作错误。&br&&br&&b&结构化信息抽取&/b&&br&输入一篇文章,输出的是产品名、售价,或者活动名、时间、地点等结构化的信息。NLP相关的研究很多,不过产品目前看并不多,我也不是研究这个的,不知瓶颈在哪儿。不过想象未来互联网信息大量的结构化、语义化,那时的搜索效率绝对比现在翻番啊~&br&&br&&b&语义理解&/b&&br&这个目前做的并不好,但已经有siri等一票语音助手了,也有watson这种逆天的专家系统了。继续研究下去,虽然离人工智能还相去甚远,但是离真正好用的智能助手估计也不远了。那时生活方式会再次改变。即使做不到这么玄乎,大大改进搜索体验是肯定能做到的~搜索引擎公司在这方面的投入肯定会是巨大的。&br&&br&&b&机器翻译&/b&&br&这个不多说了,目前一直在缓慢进步中~我们已经能从中获益,看越南网页,看阿拉伯网页,猜个大概意思没问题了。此外,口语级别的简单句的翻译目前的效果已经很好了,潜在的商业价值也是巨大的。&br&&br&不过……在可预见的近几年,对于各大公司发展更有帮助的估计还是机器学习与数据挖掘,以上我YY的那些目前大都还在实验室里……目前能给公司带来实际价值的更多还是推荐系统、顾客喜好分析、股票走势预测等机器学习与数据挖掘应用~
题主的问题太多了,每个展开都可以讲很多~ 作为自然语言处理(NLP)方向的研究生,我来回答一下题主关于自然语言处理如何入门的问题吧,最后再YY一下自然语言处理的前途~ 有点话我想说在前头: 不管学什么东西,都要跟大牛去学,真正的大牛可以把一件事解释…
最近正好组内做了一个文档相似度的分享。决定回答一发。&br&首先,如果不局限于NN的方法,可以用BOW+tf-idf+LSI/LDA的体系搞定,也就是俗称的01或one hot representation。&br&其次,如果楼主指定了必须用流行的NN,俗称word-embedding的方法,当然首推word2vec(虽然不算是&b&D&/b&NN)。然后得到了word2vec的词向量后,可以通过简单加权/tag加权/tf-idf加权等方式得到文档向量。这算是一种方法。当然,加权之前一般应该先干掉stop word,词聚类处理一下。&br&还有,doc2vec中的paragraph vector也属于直接得到doc向量的方法。特点就是修改了word2vec中的cbow和skip-gram模型。依据论文《Distributed Representations of Sentences and Documents》(ICML 2014)。&br&还有一种根据句法树加权的方式,是ICML2011提出的,见论文《Parsing Natural Scenes and Natural Language with Recursive Neural Networks》,后续也有多个改编的版本。&br&当然,得到词向量的方式不局限于word2vec,RNNLM和glove也能得到传说中高质量的词向量。&br&ICML2015的论文《From Word Embeddings To Document Distances, Kusner, Washington University》新提出一种计算doc相似度的方式,大致思路是将词之间的余弦距离作为ground distance,词频作为权重,在权重的约束条件下,求WMD的线性规划最优解。&br&最后,kaggle101中的一个word2vec题目的tutorial里作者如是说:他试了一下简单加权和各种加权,不管如何处理,效果还不如01,归其原因作者认为加权的方式丢失了最重要的&b&句子结构&/b&信息(也可以说是&b&词序信息&/b&),而doc2vec的方法则保存了这种信息。&br&在刚刚结束的ACL2015上,似乎很多人提到了glove的方法,其思想是挖掘词共现信息的内在含义,据说是基于全局统计的方法(LSI为代表)与基于局部预测的方法(word2vec为代表)的折衷,而且输出的词向量在词聚类任务上干掉了word2vec的结果,也可以看看。《GloVe: Global Vectors forWord Representation》
最近正好组内做了一个文档相似度的分享。决定回答一发。 首先,如果不局限于NN的方法,可以用BOW+tf-idf+LSI/LDA的体系搞定,也就是俗称的01或one hot representation。 其次,如果楼主指定了必须用流行的NN,俗称word-embedding的方法,当然首推word2vec(…
已有帐号?
无法登录?
社交帐号登录
14928 人关注
677 条内容
3907 人关注
1431 条内容
435 人关注
153 条内容
317 人关注
17210 人关注
4333 条内容

我要回帖

更多关于 同义词和近义词的区别 的文章

 

随机推荐