nlp总结
中科院nlpir和海量分词(http://www.hylanda.com/)是收费的。
hanlp:推荐基于CRF的模型的实现~~要看语料,很多常用词会被分错,所以需要词库支撑。目前最友好的开源工具包应该是HanLP,基于词典,对各种实体词汇做了HMM,也提供了CRF模型。工程实现也不错,性能不是瓶颈。代码有相对完备的注释,文档也比较全,各种算法原理实现也有对应blog,自己研究和做二次开发都比较方便。
最近写了一款分词器,调研了不少文章的开源实现。最终定的方案是 Language Model + CRF 的混合实现。CRF的字标注法是中文分词比赛上成绩最好的方案,尤其胜在新词识别上,而Language Model在词典全,词频统计正确的情况下分词效果也很好,同CRF相比,胜在分词效果稳定,易于调整,一旦发现分词错误,可以通过添加新词修正分词效果。因此我的分词器是先通过 CRF 识别新词,然后再用Language Model分词。当然,具体实现上,还涉及到怎样融合新词,分句,识别英文词,数字表达式,时间日期等。
中文分词算法大概分为两大类
a.第一类是基于字符串匹配,即扫描字符串,如果发现字符串的子串和词相同,就算匹配。这类分词通常会加入一些启发式规则,比如“正向/反向最大匹配”, “长词优先” 等策略这类算法优点是速度块,都是O(n)时间复杂度,实现简单,效果尚可。也有缺点,就是对歧义和未登录词处理不好。歧义的例子很简单"长春市/长春/药店" "长春/市长/春药/店".未登录词即词典中没有出现的词,当然也就处理不好。 ikanalyzer,paoding 等就是基于字符串匹配的分词。
b.第二类是基于统计以及机器学习的分词方式这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。 在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的序列标注模型有HMM和CRF。
这类分词算法能很好处理歧义和未登录词问题,效果比前一类效果好,但是需要大量的人工标注数据,以及较慢的分词速度。
ICTCLAS是基于HMM的分词库。
我们在重构知乎搜索的时候,权衡标注工作量和性能,以及代码实现的复杂程度,我们考虑采用基于字符串匹配的分词方法
中文分词是个基础问题,研究成果已有不少,我拣几个我自己觉得好的吧。
1。张磊 提到的mmseg是我自己最喜欢的分词方法,简单、高效、实用、效果还不错。http%3A//technology.chtsai.org/mmseg/。我给它起了个名字,叫做“3段回溯式方法”,即每次从一个完整的句子里,按照从左向右的顺序,识别出多种不同的3个词的组合;然后根据下面的4条消歧规则,确定最佳的备选词组合;选择备选词组合中的第1个词,作为1次迭代的分词结果;剩余的2个词继续进行下一轮的分词运算。采用这种办法的好处是,为传统的前向最大匹配算法加入了上下文信息,解决了其每次选词只考虑词本身,而忽视上下文相关词的问题。4条消歧规则包括,
1)备选词组合的长度之和最大。
2)备选词组合的平均词长最大;
3)备选词组合的词长变化最小;
4)备选词组合中,单字词的出现频率统计值最高。
2.CRF方法是目前公认的效果最好的分词算法。但,具体效果是否好,也依赖于你使用的训练模型nlp.stanford.edu/software/segmenter.shtml"
3. 我认识一个做搜索解决方案的朋友,他们公司提供了CRF和mmseg的开源实现 "www.coreseek.cn/opensource/"
4. 其实还可以使用专业公司的解决方案,比如海量和中科院分词的收费版本,也花不了多少钱。集中精力找到你自己产品独特的价值所在。
之前做自然语言解析的时候用了mmseg,很不错的说声。。
1. 好词典很重要不论什么样的分词方法, 优秀的词典必不可少, 越拿老掉牙的词典对越新的文本进行分词, 就越会分成一团糟. 怎样构建一个优秀的词典, 快速发现新新词汇? 可以看 @M67 前两天写的文章, 讲的非常透彻明白 : 互联网时代的社会语言学:基于SNS的文本数据挖掘 ( http://www.matrix67.com/blog/archives/5044/trackback ) 2. 算法跟着需求走建议根据不同的需求选用不同的算法, 例如, 类似知乎头部搜索的 AutoComplete 部分, 讲究的是速度快, 兴趣相关( 优先找和你账户相关, 和可能感兴趣的内容 ), 分词算法反而在其次了. 而像全文搜索这样大段大段的长文字. 我觉得则更注重的是精准, 应该选一个像CRF这样的算法.
中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。竹间智能在构建中文自然语言对话系统时,结合语言学不断优化,训练出了一套具有较好分词效果的算法模型,为机器更好地理解中文自然语言奠定了基础。在此,对于中文分词方案、当前分词器存在的问题,以及中文分词需要考虑的因素及相关资源,竹间智能 自然语言与深度学习小组 做了些整理和总结,希望能为大家提供一些参考。中文分词根据实现原理和特点,主要分为以下2个类别:
1、基于词典分词算法也称字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化,比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构,比如采用TRIE索引树、哈希索引等。
2、基于统计的机器学习算法这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法,hanlp是基于HMM+CRF,结巴是基于Viterbi+HMM。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。
Nianwen Xue在其论文《Combining Classifiers for Chinese Word Segmentation》中首次提出对每个字符进行标注,通过机器学习算法训练分类器进行分词,在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。
常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。
随着深度学习的兴起,也出现了基于神经网络的分词器,例如有人员尝试使用双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达97.5%。算法框架的思路与论文《Neural Architectures for
Named Entity Recognition》类似,利用该框架可以实现中文分词,如下图所示:首先对语料进行字符嵌入,将得到的特征输入给双向LSTM,然后加一个CRF就得到标注结果。
分词器当前存在问题:目前中文分词难点主要有三个:
1、分词标准:比如人名,在哈工大的标准中姓和名是分开的,但在Hanlp中是合在一起的。这需要根据不同的需求制定不同的分词标准。
2、歧义:对同一个待切分字符串存在多个分词结果。歧义又分为组合型歧义、交集型歧义和真歧义三种类型。
1) 组合型歧义:分词是有不同的粒度的,指某个词条中的一部分也可以切分为一个独立的词条。比如“中华人民共和国”,粗粒度的分词就是“中华人民共和国”,细粒度的分词可能是“中华/人民/共和国”
2) 交集型歧义:在“郑州天和服装厂”中,“天和”是厂名,是一个专有词,“和服”也是一个词,它们共用了“和”字。
3) 真歧义:本身的语法和语义都没有问题, 即便采用人工切分也会产生同样的歧义,只有通过上下文的语义环境才能给出正确的切分结果。例如:对于句子“美国会通过对台售武法案”,既可以切分成“美国/会/通过对台售武法案”,又可以切分成“美/国会/通过对台售武法案”。一般在搜索引擎中,构建索引时和查询时会使用不同的分词算法。常用的方案是,在索引的时候使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。
3、新词:也称未被词典收录的词,该问题的解决依赖于人们对分词技术和汉语语言结构的进一步认识。
另外,我们收集了如下部分分词工具,供参考:
中科院计算所NLPIR http://ictclas.nlpir.org/nlpir/
ansj分词器 https://github.com/NLPchina/ansj_seg
哈工大的LTP https://github.com/HIT-SCIR/ltp
清华大学THULAC https://github.com/thunlp/THULAC
斯坦福分词器 https://nlp.stanford.edu/software/segmenter.shtml
Hanlp分词器 https://github.com/hankcs/
HanLP结巴分词 https://github.com/yanyiwu/cppjieba
KCWS分词器(字嵌入+Bi-LSTM+CRF) https://github.com/koth/kcws
ZPar https://github.com/frcchang/zpar/releases
IKAnalyzer https://github.com/wks/ik-analyzer
以及部分分词器的简单说明:哈工大的分词器:主页上给过调用接口,每秒请求的次数有限制。
清华大学THULAC:目前已经有Java、Python和C++版本,并且代码开源。
斯坦福分词器:作为众多斯坦福自然语言处理中的一个包,目前最新版本3.7.0, Java实现的CRF算法。可以直接使用训练好的模型,也提供训练模型接口。
Hanlp分词:求解的是最短路径。优点:开源、有人维护、可以解答。原始模型用的训练语料是人民日报的语料,当然如果你有足够的语料也可以自己训练。
结巴分词工具:基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。
字嵌入+Bi-LSTM+CRF分词器:本质上是序列标注,这个分词器用人民日报的80万语料,据说按照字符正确率评估标准能达到97.5%的准确率,各位感兴趣可以去看看。
ZPar分词器:新加坡科技设计大学开发的中文分词器,包括分词、词性标注和Parser,支持多语言,据说效果是公开的分词器中最好的,C++语言编写。
关于速度:由于分词是基础组件,其性能也是关键的考量因素。通常,分词速度跟系统的软硬件环境有相关外,还与词典的结构设计和算法复杂度相关。比如我们之前跑过字嵌入+Bi-LSTM+CRF分词器,其速度相对较慢。
另外,开源项目 https://github.com/ysc/cws_evaluation 曾对多款分词器速度和效果进行过对比,可供大家参考。最后附上公开的分词数据集测试数据集1、SIGHAN Bakeoff 2005 MSR,560KB http://sighan.cs.uchicago.edu/bakeoff2005/2、SIGHAN Bakeoff 2005 PKU, 510KB http://sighan.cs.uchicago.edu/bakeoff2005/3、人民日报 2014, 65MB https://pan.baidu.com/s/1hq3KKXe本回答来自 竹间智能 自然语言与深度学习小组 。
最后附上公开的分词数据集测试数据集
1、SIGHAN Bakeoff 2005 MSR,560KB http://sighan.cs.uchicago.edu/bakeoff2005/
2、SIGHAN Bakeoff 2005 PKU, 510KB http://sighan.cs.uchicago.edu/bakeoff2005/
3、人民日报 2014, 65MB https://pan.baidu.com/s/1hq3KKXe
其实solr自带的跨语言自然一元分词就很好了,怎么测效果也不比国内搞的分词差,也许大多数情况下不需要国产的中文分词。下面列举原因,欢迎拍砖。1. 不可能有一种中文分词算法能完全准确地分词,完全按中文分词进行的搜索不能保证搜索的全覆盖,而按字分词的结果是可以保证的2. 中文分词带来额外的开销,比如查字典,智能算法等,而一元按字分词开销最小。有人说按字分词造成索引变大,造成开销大,其实英文单词比中文字还多,这方面不是问题3. 按中文分词搜索,首先对要搜索的内容要先分词,这就有可能造成了第一步最主要的误差,中文分词引擎分出的词很可能不能代表用户的意思,而luncene基于slop的匹配误差更小4. 随着中文分词算法的改进,有可能在索引中形成词信息孤岛,要么随它占用资源,要么付出成本去维护;而基于一元字分词的算法就没有这个问题遗憾的是让外国人搞出了这个通用算法在中文分词方面居然比我们自己做的还好。
在solr里面同时配了多种常见分词组件测试过才这么说的。关于搜“和服”,是老生常谈的分词话题了,前面说了,“1. 不可能有一种中文分词算法能完全准确地分词”,必须承认要这一点,但可以把分词做得很复杂力图准确些,solr自带的跨语言分词同样也可以做得很复杂,只不过我们是走进了一个查自带字典的死胡同,开销很大,实际上字典应该自动维护在索引中而不是不需要另外一本字典,每种分支都有得分值,取得分高的排前面大多数情况下是合理的,如果要求还要提高,就得靠分析语义,现在这些常见分词组件根本就没有语义分析功能。
建议大家多做测试再说,欢迎对我提的每一条具体反驳。
也建议大家现在在百度里搜下“和服”,看有没有这样一条结果:季莫申科拒监禁期间穿囚服和服劳役_网易新闻中心
@熊伟 我们先把话题缩小到“搜索”这个小范畴内,不然放到NLP领域,不做分词就什么都不是了。
1. 不可能有一种中文分词算法能完全准确地分词,完全按中文分词进行的搜索不能保证搜索的全覆盖,而按字分词的结果是可以保证的。
分词的准确率方面,目前基本常用的分词技术都有99%左右的准确率(准确率是指不分错,不包括未登录词)。按字切分当然不会错,但是在搜索时同样召回了大量“不相关”的结果,给做Rank带来了巨大的难度。同时还丢失了众多“词”一级的属性。
2. 中文分词带来额外的开销,比如查字典,智能算法等,而一元按字分词开销最小。有人说按字分词造成索引变大,造成开销大,其实英文单词比中文字还多,这方面不是问题
中分分词目前的主流算法,都是低开销型的。中科院那个都能达到500KB/s的分词速度,各家企业应用的分词也完全不是性能瓶颈。切词性能说是不存在的。
3. 按中文分词搜索,首先对要搜索的内容要先分词,这就有可能造成了第一步最主要的误差,中文分词引擎分出的词很可能不能代表用户的意思,而luncene基于slop的匹配误差更小
用户表述的多样性,可以通过多粒度切词来达到同样的效果,魔兽世界可以切出魔兽,也可以切出魔兽世界,这个不存在切词的劣势一说。
4. 随着中文分词算法的改进,有可能在索引中形成词信息孤岛,要么随它占用资源,要么付出成本去维护;而基于一元字分词的算法就没有这个问题
这个没什么好说的。
补充:
按字切分的一元分词,就是石器时代的东西。词一级的信息被完全丢失,最基本的idf信息都失效了,term重要性分析基本不可能进行,更不要说加入词性,做同义词变换,做句法树等等应用。这里就不继续展开了。
现代搜索技术发展了这么多年,按字切分这种甚至不如二元切分的技术,实在是不敢苟同。这不是一个技术人员应该有的视野,如果继续坚持这种原始野性的世界观,只有被淘汰没有什么其他的。
@杨宣 其实一元分词这种说法就不规范,按理解就是一个字一分。而多元的多个字连起来分,无论在任何情况下,一元分词能保证全覆盖。针对某些句子,用多元分很可能有多种分法,不结合语义不能自动确定哪个是对的,比如"登上海南公司的航班"不保证不切出"上海"、"上海南"来,这就造成多元分词的不稳定,不同软件,针对不同句子,有不同的结果,而且不能保证信息的全覆盖,有可能搜不到的情况(在mmseg4j复杂模式下,切出一个长词"海南航空公司",搜局部就可能搜不到),甚至直接切出垃圾(如前面的"上海",又占资源,有影响结果)
其次,不能说多元分词比一元分词准确,准确和词的上下文的推导算法有关,多元的可以按前后词推导,一元的照样可以按前后字推导。只不过solr自带的跨语言自然一元分词是按照基于slop的匹配,没有推导,slop是指匹配结果字直接的间距,最小的结果排最前。如果搜“中华人民共和国”七个字,每个字都匹配上了,而且他们的slop都等于0(最高优先级),这个没用字典哦。这种算法并不算多好,但至少现在在solr的一般站内搜索应用中并不比国产的差。
1. "海南航空公司"的case,广泛应用的多粒度切词已经可以解决你说的问题,即会切出长串,也会切出基本词。和你说的效果上没有差别。
2. 你说的间距,就是在信息检索时用到的offset。任何切词方法在rank时都会用到这个技术。
我给你举个例子,搜索“新浪”,你出“浪新”,是不是offset也是0........
3. 你说的“不差”,代表的也是石器时代的“不差”,这种东西没法深化,没法改进,跟时代脱节。term召回率固然重要,前提是召回的term都是从相关性上准确的,为了召回率提升0.01%换来召回结果准确率下降10%,这个是傻,不是先进。更何况上面说到的多粒度切词这类简单的做法,完全可以达到同样的召回率提升。
4. 换句话说,如果你举出任意一个中文搜索引擎用的是你说的方法,并且取得了对应较好的效果来,也算是个旁证。
5. 不客气的说,对于term召回率的问题,用最小粒度切分的方法来解决,是懒。如果在我的team里面,有任何一个人提出这样的解决方案,肯定被我劈头盖脸打回去。
空 公司 班机”, 几乎和单字一样多。
你说的多粒度切词有的用,有的不用,中科院的和mmseg4j好像就不用,用粒度越多,垃圾越多。
我们是准备在站内那里用solr, 测试结果国产的分词不一定好,不过我们要求覆盖要全,找不到就属于大问题了。
专做搜索引擎公司的内部机制肯定比我们讨论的这些开源的复杂,但我还是觉得分词还是最细分,但结果交给rank、filter等算法去就好,这也是原本Lucene设计的机制,全世界大多数语言在google上肯定也是这种机制,关于东亚语言的分词方面好像就是国内叫得比较欢,甚至韩国、日本在solr中好像没有专门自己搞的的分词插件,相比依赖国内某个老师、某个个人的东西,我更倾向于某些西方的技术,如果想搞个好的,不如在lucene上搞一个基于动态自动维护字典的的filter.
@熊伟 “相比依赖国内某个老师、某个个人的东西,我更倾向于某些西方的技术”
分词这个东西 没有什么中方西方之分
现在中文很热 搞中文分词和中文机器翻译的西方学者非常多
如果你感兴趣的话
可以看看斯坦福最近开设的免费课程,http://nlp-class.org 第二章就是讲语言的切分(虽然大多数是英文的,比如stemming)
没想到这个回答竟然有了15条评论这么多
@杨宣 话糙理不糙
很多点上说的很有道理,虽然这样的语气可能让其他人不太好接受 还是要感谢一下@杨宣
@雄伟
我基本理解你的意思了,在你的环境和可以使用到的备选技术上,一元按字切分可能是满足你的需求的。
但这个不代表是可以推广的,在不同的语料基础上,你这个方案的劣势是明显的,不算是“较好的中文分词方案”。
关于搜索这个应用场景下,分词已经不是什么前沿技术,但分词的效果远不只开源搜索框架下那几个默认的函数,毕竟这些开源搜索框架并不是专门为中文场景使用的,都是很简单的基础示范。同时,基于词库的切词算法对于词库的也有要求。杨宣说过的我就不重复了。
@杨少雄 最好实际测一下再说,搜出结果里面含风马牛不相及的内容很正常,只要不排在合理内容的前面,搜偏一点的内容很容易就能得到(各大搜索引擎都是这样)。而且搜偏的反而用一元最好。就搜“上海今天天气如何”,如果不结合语义搜的话,按照一元基于slop和优先序的算法可能效果比分词的还好。
就算按国产组件分词,也不代表不一元切了,就算用国产组件分词去创建索引,里面的javascript:;单字量照样和所用到的汉字容量差不多。“有限公司”rank可能是很高,但不代表“有”、”限”、”公”、”司”四个字的rank不高(词也是由字组成的),一元的效果并不差。
上面说的全是最近我实际中测得效果,也欢迎大家拿实例说话。
虽然我说一元的不差,但不代表分词不好,只是国内做的不好(同义词,语义分析,权重等都需要再词的基础上进行),还有我认为他们方向不对。
最近写了一款分词器,调研了不少文章的开源实现。最终定的方案是 Language Model + CRF 的混合实现。CRF的字标注法是中文分词比赛上成绩最好的方案,尤其胜在新词识别上,而Language Model在词典全,词频统计正确的情况下分词效果也很好,同CRF相比,胜在分词效果稳定,易于调整,一旦发现分词错误,可以通过添加新词修正分词效果。因此我的分词器是先通过 CRF 识别新词,然后再用Language Model分词。当然,具体实现上,还涉及到怎样融合新词,分句,识别英文词,数字表达式,时间日期等。
为什么不是nba04! 04才是经典!
我想用nltk做文献分类,没找到源代码,答主有吗
同,结巴分的不好,后来试了下ltp,不过不支持自定义好像,看到评论里有推荐thulac,打算试试
1、fxsjy/jieba结巴的标语是:做最好的 Python 中文分词组件,或许从现在来看它没做到最好,但是已经做到了使用的人最多。结巴分词网上的学习资料和使用案例比较多,上手相对比较轻松,速度也比较快。结巴的优点: 支持三种分词模式 支持繁体分词 支持自定义词典 MIT 授权协议
2、THULAC:一个高效的中文词法分析工具包前两天我在做有关于共享单车的用户反馈分类,使用jieba分词一直太过零散,分类分不好。后来江兄给我推荐了THULAC: 由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包 。THULAC的接口文档很详细,简单易上手。THULAC分词的优点:能力强。利用规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度达到1.3MB/s,速度比jieba慢。
有很多好用的中文处理包:
Jieba:可以用来做分词,词性标注,TextRank
HanLP:分词,命名实体识别,依存句法分析,还有FudanNLP,NLPIR
个人觉得都比NLTK好用~
《Python自然语言处理》
http://www.nltk.org/book/
UGC文本数据的分析,OpenNLP,搜索排序,语义理解、实体识别、新词发现、协同过滤,有深度学习背景、问答系统、对话系统,ner,属性/偏好/行为分析,运营商领域DPI数据深度解析,了解开源算法:anaconda,summa,libsvm,
用Python做自然语言处理必知的八个工具
Python以其清晰简洁的语法、易用和可扩展性以及丰富庞大的库深受广大开发者喜爱。其内置的非常强大的机器学习代码库和数学库,使Python理所当然成为自然语言处理的开发利器。那么使用Python进行自然语言处理,要是不知道这8个工具就真的Out了。
NLTK
NLTK是使用Python处理语言数据的领先平台。它为像WordNet这样的词汇资源提供了简便易用的界面。它还具有为文本分类(classification)、文本标记(tokenization)、词干提取(stemming)、词性标记(tagging)、语义分析(parsing)和语义推理(semantic reasoning)准备的文本处理库。
Pattern
Pattern具有用于词性标注(part-of-speech taggers)、n-gram搜索、情感分析和WordNet的一系列工具。它还支持矢量空间建模、聚类分析以及支持向量机。
TextBlob
TextBlob是处理文本数据的一个Python库。它为深入挖掘常规自然语言处理提供简单易用的API,例如词性标注(part-of-speech tagging)、名词短语提取(noun phrase extraction)、情感分析、文本分类、机器翻译等等。
Gensim
Gensim是一个用于主题建模、文档索引以及使用大规模语料数据的相似性检索。相比于RAM,它能处理更多的输入数据。作者称它是“根据纯文本进行非监督性建模最健壮、最有效的、最让人放心的软件”。
PyNLPl
PyNLPl:Python Natural Language Processing Library(发音为:pineapple)是一个用于自然语言处理的Python库。它由一系列的相互独立或相互松散独立的模块构成,用于处理常规或不太常规的NLP任务。PyNLPl可用于n-gram计算、频率列表和分布、语言建模。除此之外,还有更加复杂的数据模型,例如优先级队列;还有搜索引擎,例如波束搜索。
spaCy
spaCy是一个商业化开源软件,是使用Python和Cython进行工业级自然语言处理的软件。它是目前最快的、水平最高的自然语言处理工具。
Polyglot
Polyglot是一个支持海量多语言的自然语言处理工具。它支持多达165种语言的文本标记,196种语言的语言检测,40种语言的命名实体识别,16种语言的词性标注,136种语言的情感分析,137种语言的字根嵌入,135种语言的形态分析以及69种语言的音译。
MontyLingua
MontyLingua是一个免费的、常识丰富的、端对端的英语自然语言理解软件。用户只需要将原始英文文本输入MontyLingua,就能输出文本的语义解释。该软件完美适用于信息提取、需求处理以及问答。从给定的英语文本,它能提取主语/动词/形容词对象元组、名词短语和动词短语,并提取人的名字、地点、事件、日期和时间,以及其他语义信息。
对于文本数据的处理,可以分为去噪、排重、聚类、分类、观点提取、观点权重排序等环节。这里面需要大量使用到NLP(自然语言处理)的相关技术,目前这类技术开放的互联网公司也不少,比如腾讯文智、玻森实验室、微软NLP.....
去噪,顾名思义就是去除与监控主体不相关的文本信息,这里需要用到大量的机器学习语料以来做判断。比如我有款产品叫“心跳”,爬虫从上述渠道中获取了大量关于“心跳”的文本信息,但是只需要保留住产品名叫“心跳”的那些文档就好,而其他“我看到宋钟基心跳不止”一类的文档,就属于噪音。排重,没什么好说的,就是将相同文档归一。这是清洗基础数据的第二步,排重掉大量相同文档,数据量会大幅度降低。聚类,将相似文档进行归类,目的也是为了减少数据量。分类,更好的定位出筛出的数据是与我产品相关的。在产品这块可能作用不是太明显。我就不展开细说了。最后提取出每个类别下的代表观点,识别出正负面,并对观点进行排序,这样就能获取到总结好的对于产品的真实反馈全貌,哪些优点,哪些缺点。就如漏斗模型一样,数据进行一层层清洗和筛选,最终给到人工的是很全又少量的信息,大大节省了人力处理成本。上述是比较高端的用户反馈收集和处理方式,其实简单易行的,比如产品评测、用户调研的方式也是当下使用的比较多的,特别是后者。对于产品评测本人也有悉心的研究和丰富的工作经验,有空可以细说。
几分钟即可接入的中文语义分析平台
各种应用服务每天产生着大量的用户交互数据,媒体舆情、社交、客服沟通,非结构化的用户数据越来越多,这是深刻理解用户需求偏好、品牌产品意见,洞察市场和消费行为趋势的宝藏。善用这部分非结构化数据,有助于指导经营决策、用户运营以及产品设计的趋势方向把握。
语义大数据分析有一定的进入门槛,大多数企业和开发者将有限资源投入在自己的核心领域,希望语义大数据作为一个增值服务亮点功能,又受资源所限制。大多数团队并没有为大数据语义分析储备专业人才资源,也没有行业词库、知识的积累,更没有资源和精力持续做数据训练迭代。
术业有专攻,介绍几个通过API几分钟即可接入的语义分析工具,做到一定程度的开箱即用,又满足一定的二次开发支持需求。具体那款适合,大家可以去实际体验下,几个平台都提供免费体验方式。
此类工具适用用对象
产品和服务具有大量用户产生的内容
有很多非结构化数据
海量信息筛选,价值信息挖掘
用户偏好分析
用户情绪情感分析
同时,团队缺乏完全从0到1建设的能力
缺乏专业领域人才
缺乏稳定的团队组合
缺乏行业和领域的词库、知识积累
缺乏经过验证和迭代的经验基础
用第三方工具,可以去快速验证市场需求,抢在时间的前面,探查客户反馈,以判断自己是否以及在哪个方面需要自主投入专业资源进一步做深入。
玻森中文语义开放平台
一站式解决中文语义分析需求:情感分析、信息分类、实体识别、典型意见、文本聚类、关键词提取。
单文本和多文本分析
自主研发千万级中文语料库
可定制数据分析模型和解决方案
具有每日千万次API调用的商业用户服务能力
开放中文语义API,快速注册,30秒可用
官网:首页 - BosonNLP
商业服务收费模式
腾讯文智中文语义平台
一站式满足用户NLP、转码、抽取、全网数据抓取等中文语义分析需求的开放平台。
提供智能分词、实体识别、情感分析、转码抽取、文本聚类等语义API。
腾讯产品的成功应用经验和100亿级的API调用服务。
支持深入合作定制产品特色的语义分析解决方案。
官网:腾讯文智中文语义平台-首页
商业服务收费模式
哈工大讯飞语言云
哈工大和科大讯飞联合研发的云端中文自然语言处理服务平台,提供分词、词性标注、命名实体识别、依存句法分析、语义角色标注等自然语言处理服务。
应用场景如用户喜好分析、情绪情感分析、人际网络分析、关键字知识图谱
用户喜好分析:借助分词、词性标注和依存句法分析可以深挖用户上传内容以及评论反馈信息,以“词云”的形式展示用户最关注的产品特性和评价。
情绪自动识别:通过对用户的评论、留言、交流信息中的文本进行语言处理,自动识别用户的情绪。
API提供了包括PLAIN/XML/JSON/CONLL等多种格式的结果表示,返回结果容易扩展,便于进行二次开发。
为保障系统稳定,语言云API的使用频率默认限制为每个IP 200次/秒。
支持包括中小企业在内开发者的商业应用需要
提供研究性免费服务,商业服务洽谈沟通
关联阅读:
接入简单又实用的10款移动数据分析工具
这里的分享仅针对有API快速接入的语义分析平台,有些语义分析服务通过工具包、开源软件实现,这里没有举例。
我们也在寻找语义分析的合作伙伴,希望与领域内的专业平台和专家交流学习,也希望认识些朋友进一步交流,尤其是针对社群社交数据分析的技术支持,如:群绘社群数据平台。
从开源入手:StanfordNLP和HIT-LTP
《统计自然语言处理基础》这本书不错
《数学之美》是第一本要学习的书
推荐本书《Python自然语言处理》
推荐一个博客52NLP和CS224D教程
上一边Collins的nlp课,看一遍他的讲义就够了
学习NLP是一个艰苦的过程,好多东西需要学,尤其是刚入门时。
哈工大的SCIR实验室绝对是国内数一数二的顶尖NLP实验室。
百度:百度副总裁,<b>AI技术平台体系总负责人王海峰博士</b>毕业于哈工大,目前是SCIR实验室的兼职教授,王海峰博士是ACL50多年历史上唯一出任过主席的华人。据不完全统计,该实验室在百度的毕业生约为20位,其中包李彦宏的开门弟子(博士后),百度高级研究院赵世奇博士等。</p><p>
腾讯:SCIR实验室是<b>腾讯AL Lab最早的联合实验室</b>,
腾讯AI平台部NLP技术中心副总监周连强</b>就是SCIR实验室07级的硕士生,刘挺教授还是<b>腾讯AI Lab特聘学术顾问(腾讯 AI Lab - 腾讯人工智能实验室官网)。据不完全统计,该实验室在腾讯的毕业生约为25位。
阿里:自然语言处理部总监郎君</b>为SCIR实验室的06级博士生。据不完全统计,该实验室在阿里的毕业生约为10位。</p><p>
微软:微软和国内的很多高校有联合实验室 但NLP方向的联合实验室只有清华和哈工大两家,在微软亚洲研究院的门户网站上,<b>共列出研究人员11名,其中有5人是在哈工大获得博士学位。</b></p><p>(注:微软哈工大联合实验室是哈工大机器智能实验室,此实验室并非之前说的SCIR实验室,该实验室有著名的李生教授坐镇,由于鄙人不了解该实验室,恕不详细介绍,知友可自行了解。)</p><p>
科大讯飞:科大讯飞是亚太地区最大的语音上市公司,在智能语音技术的多个领域均处于业界领先地位。科大讯飞与哈工大有语言认知计算联合实验室(<a href=\"https://link.zhihu.com/?target=http%3A//ir.hit.edu.cn/1348.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">哈尔滨工业大学社会计算与信息检索研究中心 - 理解语言,认知社会 &amp;amp;quot; 科大讯飞与哈工大联合创建语言认知计算联合实验室
学术界
清华大学自然语言处理与人文计算实验室(欢迎来到清华大学自然语言处理与社会人文计算实验室):清华计算机系前院长孙茂松教授是他们的leader
北京大学计算语言学教育部重点实验室(北京大学计算语言学教育部重点实验室):是北大计算机学科比较有实力的一个研究方向之一
中科院计算所自然语言处理研究组(欢迎来到中科院计算所自然语言处理组网站):尤其专长在机器翻译领域,组长为刘群研究员,大家常使用的中文分词工具ICTCLAS就是他们参与开发的
哈尔滨工业大学:实力也很强,实验室查了一下感觉好乱,主要有:智能技术与自然语言处理研究室(ITNLP)、哈工大语言语音教育部-微软重点实验室(哈工大语言语音教育部)、(哈尔滨工业大学社会计算与信息检索研究中心)哈尔滨工业大学社会计算与信息检索研究中心;现任中文信息学会理事长李生教授就是哈工大的、下面提到的现任ACL主席王海峰先生也是哈工大毕业的;而且值得一提的是,哈工大虽然远在最东北地区,但是和工业界,像微软、百度、科大讯飞等都有着紧密的联系。
工业界
像知名搜索引擎公司在这些方面应该都有不俗的积累
搜狗公司
百度公司:现任副总裁王海峰先生是自然语言处理领域世界上影响力最大、也最具活力的国际学术组织ACL(Association for Computational Linguistics)50多年历史上唯一的华人主席。
微软亚洲研究院
科大讯飞:国内专业做中文语音、文字产品研发的企业,是目前国内最大的智能语音技术提供商。
另外,图模型,深度学习……等等内容,都是一些方向。
自然语言处理、图像识别、语音识别等等也是一些应用方向,更有大量的领域知识需要结合。
nlp总结的更多相关文章
- 【NLP】干货!Python NLTK结合stanford NLP工具包进行文本处理
干货!详述Python NLTK下如何使用stanford NLP工具包 作者:白宁超 2016年11月6日19:28:43 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的 ...
- 【NLP】十分钟快览自然语言处理学习总结
十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...
- 【NLP】前戏:一起走进条件随机场(一)
前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...
- 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)
统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...
- 【NLP】Python NLTK处理原始文本
Python NLTK 处理原始文本 作者:白宁超 2016年11月8日22:45:44 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公开 ...
- 【NLP】Python NLTK获取文本语料和词汇资源
Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...
- NLP点滴——文本相似度
[TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...
- 【NLP】Python NLTK 走进大秦帝国
Python NLTK 走进大秦帝国 作者:白宁超 2016年10月17日18:54:10 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公 ...
- 【NLP】基于自然语言处理角度谈谈CRF(二)
基于自然语言处理角度谈谈CRF 作者:白宁超 2016年8月2日21:25:35 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
- 【NLP】基于机器学习角度谈谈CRF(三)
基于机器学习角度谈谈CRF 作者:白宁超 2016年8月3日08:39:14 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都 ...
随机推荐
- 【JZOJ6433】【luoguP5664】【CSP-S2019】Emiya 家今天的饭
description analysis 首先可以知道不符合要求的食材仅有一个,于是可以容斥拿总方案数减去选不合法食材的不合法方案数 枚举选取哪一个不合法食材,设\(f[i][j]\)表示到第\(i\ ...
- Delphi DBgrid 动态点击事件
错误的写法: DBGrid1CellClick(DBGrid1.Columns[ DBGrid1.DataSource.DataSet.RecNo ]); //执行点击事件 正确的写法: DBGrid ...
- Shiro学习(13)RememberMe
Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下: 1.首先在登录页面选中Reme ...
- Http头域字段详解
HTTP(HyperTextTransferProtocol) 是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客 ...
- 简单了解malloc分配内存
直接看代码 #include <stdio.h> #include <malloc.h> int main() { * * ); printf("分配后请查看内存&q ...
- Go语言TCP Socket编程
Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectories下的 ...
- (转)区别TextBlock和Label
TextBlock和Label都是用来显示少量数据的.好多文章对Label存在的描述都是它允许使用"快速获取"."快速获取"就是允许你用Alt加上其它的按键快速 ...
- 数据挖掘Aprior算法详解及c++源码
[算法大致描述] Aprior算法主要有两个操作,扫描数据库+统计.计算每一阶频繁项集都要扫描一次数据库并且统计出满足支持度的n阶项集. [算法主要步骤] 一.频繁一项集 算法开始第一步,通过扫描数据 ...
- jQuery 对象与 Dom 对象转化
首先,我们需要知道,为什么我们需要转化两者,原因在于,两者提供的方法不能共用. 比如: $("#id").innerHTML; document.getElementById(id ...
- 【非官方方式】获取Disconf动态更新的配置文件的值
disconf可以配置reload,当更改配置时自动刷新classpath下的配置文件.然而获取最新的值官方说明是加@DisconfFileItem注解放在属性的方法上,底层通过拦截器获取的. 但是每 ...