NLTK之词性标注

机器学习(NLP):使用NLTK库实现文本分词和词性标注 随着自然语言处理(Natural Language Processing,简称NLP)技术的不断发展,我们可以越来越方便地与计算机交互,计算机也可以更好地理解和处理我们的自然语言。在NLP的入门级别中,我们可以使用Python语言实现一些简单的NLP算法,例如分词、词性标注、情感分析等。然后,我们定义了一个待处理的文本,使用NLTK库中的word_tokenize函数将其分词,然后去除停用词。最后,我们可以取一个吸引读者的标题:使用NLTK库实现文本分词和词性标注。为词性标注数据的长度。 阅读详情

我的原文:http://blog.hijerry.cn/p/63432.html

词性标注重要性

回想学英语的时候,老师就开始讲词性,通过分析句子中某个单词的词性,我们可以推测这个词的意思,猜测这个词在句子中的作用,这对理解句子意思有极大的帮助。小弟也还是初学,以后若发现词性有更多作用时会继续补充~

标注语料库

NLTK(3.2.5)中提供了一些已经标注好词性的文本,通过下面代码可以查看:

import nltk
nltk.corpus.brown.tagged_words()

outputs:
[(u'The', u'AT'), (u'Fulton', u'NP-TL'), ...]

这表示The 被标注为AT词性,Fulton 被标注为NP-TL 词性,似乎看不太懂?

下面可以把它们转成统一词性名称:

nltk.corpus.brown.tagged_words(tagset='universal')

outputs:
[(u'The', u'DET'), (u'Fulton', u'NOUN'), ...]

DET 是限定词,NOUN 是名词。

这是因为标注器本身所使用的符号与统一符号 不一样的原因,通过制定tagset 可以转化为统一符号,而标注转换可以在~/nltk_data/taggers/universal_tagset 中找到对应的文件。

我调查源代码发现,上述代码所使用的是en-brown.map文件,打开查看可以发现:

....
36 AT  DET
....
294 NP-TL   NOUN
...

其他标注语料库

如

nltk.corpus.sinica_treebank.tagged_words()
nltk.corpus.indian.tagged_words()
nltk.corpus.mac_morpho.tagged_words()
...

拿indian为例:

nltk.corpus.indian.tagged_words()

outputs:
[(u'\u09ae\u09b9\u09bf\u09b7\u09c7\u09b0', u'NN'), (u'\u09b8\u09a8\u09cd\u09a4\u09be\u09a8', u'NN'), ...]

似乎输出了unicode_escape编码,怎么办呢?下面可以解决:

print ', '.join([word + '/ + tag for (word, tag) in nltk.corpus.indian.tagged_words()][:100])

outputs:
মহিষের/NN, সন্তান/NN, :/SYM, তোড়া/NNP, উপজাতি/NN, ৷/SYM, বাসস্থান-ঘরগৃহস্থালি/NN, তোড়া/NNP, ভাষায়/NN, গ্রামকেও/NN, বলে/VM, `/SYM, মোদ/NN, '/SYM, ৷/SYM, মোদের/NN, আয়তন/NN, খুব/INTF, বড়ো/JJ, নয়/VM, ৷/SYM, প্রতি/QF, মোদে/NN, আছে/VM, কিছু/QF, কুঁড়েঘর/NN, ,/SYM, সাধারণ/JJ, মহিষশালা/NN, ৷/SYM, আর/CC, গ্রামের/NN, বাইরে/NST, থাকে/VM, ডেয়ারি-মন্দির/NN, ৷/SYM, আয়তনের/NN, তারতম্য/NN, অনুসারে/PSP, গ্রামগুলি/NN, দু/QC, রকমের/NN, :/SYM, এতূডমোদ/NNP, (/SYM, বড়ো/JJ, গ্রাম/NN, )/SYM, ওকিনমোদ/NNP, (/SYM, ছোট/JJ, গ্রাম/NN, )/SYM, ৷/SYM, কোন/DEM, কোন/RDP, গ্রামের/NN, আবার/CC, ধর্মীয়/JJ, বা_Cমহিষের/NN, সন্তান/NN, :/SYM, তোড়া/NNP, উপজাতি/NN, ৷/SYM, িকে/PRP, বলে/VM, `/SYM, সোতি-মোদ/NNP, '/SYM, ৷/SYM, কুঁড়েঘরগুলির/NN, আকার/NN, বাংলার/NNP, বা/CC, ভারতের/NNP, অন্য/JJ, অঞ্চলের/NN, প্রচলিত/JJ, কুঁড়ে/NN, ঘর/NN, নয়/VM, ৷/SYM, এগুলি/PRP, দেখতে/NN, শোয়ানো/JJ, পিপের/NN, মতো/PSP, ৷/SYM, এক/QC, দিকের/PSP, বাঁশের/NN, কাঠামো/NN, খিলানের/NN, মতো/PSP, বেঁকে/JJ, গিয়ে/VM, অন্যদিকের/NN, মাটিতে/NN, মিশেছে/VM

标注器

使用标注器

NLTK提供了现成的标注器,你可以直接使用:

text = nltk.word_tokenize('This beautiful future is just his imagination so far')
nltk.pos_tag(text, tagset='universal')

outputs:
[('This', u'DET'), ('beautiful', u'ADJ'), ('future', u'NOUN'), ('is', u'VERB'), ('just', u'ADV'), ('his', u'PRON'), ('imagination', u'NOUN'), ('so', u'ADV'), ('far', u'ADV')]

你觉得这个标注器的准确率怎么样呢?

似乎完成的还不错,那么我们试试另外一个句子:

text = nltk.word_tokenize('They refuse to permit us to obtain the refuse permit')
nltk.pos_tag(text, tagset='universal')

outputs:
[('They', u'PRON'), ('refuse', u'VERB'), ('to', u'PRT'), ('permit', u'VERB'), ('us', u'PRON'), ('to', u'PRT'), ('obtain', u'VERB'), ('the', u'DET'), ('refuse', u'NOUN'), ('permit', u'NOUN')]

对于文中的两个refuse,前者被标为动词,后者被标为名词,完成的还不错。

这有什么意义呢?拿第二个句子来说,其实两个refuse的读音不一样,第一个读作refUSE,第二个读作REFuse,所以语音系统为了正确的发音,需要先做词性标注才行。

自动标注器

为了更好的理解标注器的原理,我们慢慢来自建构建一个词性标注器,先载入数据:

from nltk.corpus import brown
brown_tagged_sents = brown.tagged_sents(categories='news')
brown_sents = brown.sents(categories='news')
brown_tagged_words = brown.tagged_words(categories='news')
brown_words = brown.words(categories='news')
默认标注器

这是最简单的标注器了,它给所有的标识符都分配同样的词性标记,我们先看来来哪个标记是最有可能的:

tags = [tag for (word, tag) in brown_tagged_words]
nltk.FreqDist(tags).max()

outputs:
u'NN'

说明名词是最多的,那么我们就生成一个标注器,它将所有词都标注为名词:

default_tagger = nltk.DefaultTagger('NN')
default_tagger.tag(nltk.word_tokenize('This beautiful future is just his imagination so far'))

outputs:
[('This', 'NN'), ('beautiful', 'NN'), ('future', 'NN'), ('is', 'NN'), ('just', 'NN'), ('his', 'NN'), ('imagination', 'NN'), ('so', 'NN'), ('far', 'NN')]

可以看到,已经全部标注为NN了,下面评估一下我们这个标注器:

default_tagger.evaluate(brown_tagged_sents)

outputs:
0.13089484257215028

哈哈,说明这个标注器太差了,它的标注正确率只有13.1%。

虽然如此,但碰巧的是在处理大量文本的时候,大部分新词都是名词,这意味着默认标注器可以帮助我们提高语言处理系统的稳定性。

正则表达式标注器

在英语单词中,我们可以通过后缀ness、ing、ed等来推测一个单词的词性,那么这样做是否也有效呢?试试就知道啦~

patterns = [
  (r'.*ing$', 'VBG'),
  (r'.*ed$', 'VBD'),
  (r'.*es$', 'VBZ'),
  (r'.*ould$', 'MD'),
  (r'.*\'s$', 'NN$'),
  (r'.*s$', 'NNS'),
  (r'^-?[0-9]+(.[0-9]+)?$', 'CD'),
  (r'.*', 'NN')
]

按照顺序匹配,当全部都不匹配时,最后会被标注为NN词性。

regexp_tagger = nltk.RegexpTagger(patterns)
regexp_tagger.tag(brown_sents[3])

outputs:
[(u'``', 'NN'), (u'Only', 'NN'), (u'a', 'NN'), (u'relative', 'NN'), (u'handful', 'NN'), (u'of', 'NN'), (u'such', 'NN'), (u'reports', 'NNS'), (u'was', 'NNS'), (u'received', 'VBD'), (u"''", 'NN'), (u',', 'NN'), (u'the', 'NN'), (u'jury', 'NN'), (u'said', 'NN'), (u',', 'NN'), (u'``', 'NN'), (u'considering', 'VBG'), (u'the', 'NN'), (u'widespread', 'NN'), (u'interest', 'NN'), (u'in', 'NN'), (u'the', 'NN'), (u'election', 'NN'), (u',', 'NN'), (u'the', 'NN'), (u'number', 'NN'), (u'of', 'NN'), (u'voters', 'NNS'), (u'and', 'NN'), (u'the', 'NN'), (u'size', 'NN'), (u'of', 'NN'), (u'this', 'NNS'), (u'city', 'NN'), (u"''", 'NN'), (u'.', 'NN')]

评估一下:

regexp_tagger.evaluate(brown_tagged_sents)

outputs:
0.20326391789486245

比默认标注器要好点,哈哈

查询标注器

可以发现,名词虽然出现的频率最高,但出现频率最高的词未必都是名词,所以我们可以试试取频率最大的前100个词,用他们最有可能的词性来进行标注。

fd = nltk.FreqDist(brown_words)
cfd = nltk.ConditionalFreqDist(brown_tagged_words)
most_freq_words = fd.most_common()[:100]
likely_tags = dict((word, cfd[word].max()) for (word, freq) in most_freq_words)
baseline_tagger = nltk.UnigramTagger(model=likely_tags)
baseline_tagger.evaluate(brown_tagged_sents)

outputs:
0.45578495136941344

可见,就算只取前100个词,效率也已经比之前高很多了。

我们实地看看它的工作结果:

baseline_tagger.tag(brown_sents[3])

outputs:
[(u'``', u'``'), (u'Only', None), (u'a', u'AT'), (u'relative', None), (u'handful', None), (u'of', u'IN'), (u'such', None), (u'reports', None), (u'was', u'BEDZ'), (u'received', None), (u"''", u"''"), (u',', u','), (u'the', u'AT'), (u'jury', None), (u'said', u'VBD'), (u',', u','), (u'``', u'``'), (u'considering', None), (u'the', u'AT'), (u'widespread', None), (u'interest', None), (u'in', u'IN'), (u'the', u'AT'), (u'election', None), (u',', u','), (u'the', u'AT'), (u'number', None), (u'of', u'IN'), (u'voters', None), (u'and', u'CC'), (u'the', u'AT'), (u'size', None), (u'of', u'IN'), (u'this', u'DT'), (u'city', None), (u"''", u"''"), (u'.', u'.')]

可以看到有很多是None,说明它没有出现在前100个词中,这时候我们可以把它们交给默认标注器处理,也就是标记为NN,这个转移工作叫做回退。

baseline_tagger = nltk.UnigramTagger(model=likely_tags, backoff=nltk.DefaultTagger('NN'))
baseline_tagger.evaluate(brown_tagged_sents)

outputs:
0.5817769556656125

准确率瞬间提高了10%+ 有木有!!

如果取更多的词呢?下面给出数据:

高频词数量准确率
2000.5060962269029576
8000.6335401873620145
16000.7067247449131809
32000.7813513137219802

说明随着数量增加,准确率还会提升~

N-gram标注

一元标注

它使用简单的统计算法,给每一个词分配一个最可能的标记,不会关联上下文。

unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown_tagged_sents)

outputs:
0.9349006503968017

准确率还蛮高的,学过的同学知道,这其实是过拟合啦,不信?我们试试其他十个语料库:

print "\n".join([cate + "\t" + str(unigram_tagger.evaluate(brown.tagged_sents(categories=cate))) for cate in brown.categories()[:10]])

outputs:
adventure       0.787891898128
belles_lettres  0.798707075842
editorial       0.813940653204
fiction         0.799147295877
government      0.807778427485
hobbies         0.771327949481
humor           0.793178151648
learned         0.772942690007
lore            0.798085204762
mystery         0.80790288443

准确率表现在80%左右,下降了10%多,影响还是蛮大的啦。

一般的N-gram的标注

它是根据上下文来推断词性的。比如一段句子是 wn−2wn−1wnwn+1 ,对应的词性是 tn−2tn−1tntn+1 ,三元标准器(n=3)就是考虑当前词 wn 的前两个词的标记 tn−2tn−1 ,我们来推断 tn 的词性。

下面是一个二元标注器(即只考虑前一个词)

bigram_tagger = nltk.BigramTagger(brown_tagged_sents)
bigram_tagger.evaluate(brown_tagged_sents)

outputs:
0.7860751437038805

三元标注器:

trigram_tagger = nltk.TrigramTagger(brown_tagged_sents)
trigram_tagger.evaluate(brown_tagged_sents)

outputs:
0.8223641028700996

准确率要高点。我们来试试它对其他文本的准确率怎么样

print "\n".join([cate + "\t" + str(trigram_tagger.evaluate(brown.tagged_sents(categories=cate))) for cate in brown.categories()[:10]])

outputs:
adventure       0.0947189293646
belles_lettres  0.0632885797477
editorial       0.0675930134407
fiction         0.0889498890317
government      0.0531682758817
hobbies         0.0558503855729
humor           0.0754551740032
learned         0.0566172589726
lore            0.0623759054933
mystery         0.096993125645

好吧,我怀疑我用了假标注器!

我们组合一下所建的标注器:

t0 = nltk.DefaultTagger('NN')
t1 = nltk.UnigramTagger(brown_tagged_sents, backoff=t0)
t2 = nltk.BigramTagger(brown_tagged_sents, backoff=t1)
t2.evaluate(brown_tagged_sents)

outputs:
0.9730592517453309

嗯。。。准确率还不错,下面试试:

print "\n".join([cate + "\t" + str(t2.evaluate(brown.tagged_sents(categories=cate))) for cate in brown.categories()[:10]])

outputs:
adventure       0.835626315941
belles_lettres  0.840522022462
editorial       0.849977274203
fiction         0.84151968228
government      0.844089165252
hobbies         0.825283866659
humor           0.839041253745
learned         0.836756685433
lore            0.844033037471
mystery         0.85128303801

em………还不错吧,下降也有10%,但准确率还有85%左右

NLTK词性标注和组快代码示例 import nltk from nltk.tag.util import tuple2str from nltk.corpus import treebank from nltk.tag import untag import os,os.path import nltk.data # nltk.download('universal_tagset') # # 词性标注 text1 = nl... 阅读详情

相关推荐

基于NLTK的命名实体识别(分词、词性标注) 及windows系统64位—在python3下安装nltk

1、  基于NLTK的命名实体识别(分词、词性标注)2、  windows系统64位—在python3下安装nltkwindows系统64位—在python3下安装nltk(参考链接:https://blog.youkuaiyun.com/llx1026/article/details/78034238)在网上找了各种安装教程,都没有在python3下安装nltk,于是我自己尝试着安装,算是成功了1、首先,假...

yimixgg的博客 6554

NLP5:NLTK词性标注

使用NLTK和结巴分词完成词性标注。

定期分享我的发现和想法,感谢你的陪伴和支持 4247

NLTK词性标注

通过本教程的学习,读者可以了解到词性标注作为自然语言处理中的一个重要基础步骤,不仅能够为句法分析、语义理解等复杂任务打下基础,还可以在情感分析、文本摘要等应用场景中发挥关键作用。借助NLTK库,Python用户能够轻松实现词性标注功能,进一步挖掘文本中的深层信息,为自然语言处理任务提供支持。

Mr数据杨 375

NLTK--词性标注

tag标注说明 import nltk from nltk.tag import pos_tag from nltk.tokenize import word_tokenize 1.词性标注器 text=word_tokenize('And now for something completely different') print(pos_tag(text)) out:[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),

jaffe507的博客 6998

支付逻辑漏洞的八大姿势(上篇)

学习支付漏洞,看这篇文章!!!文章来源:SecHub网络安全社区(本资料仅供学习参考,严禁使用者进行未授权渗透测试!严禁任何形式的转载!

qq_39493066的博客 1358

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

NLTK2:词性标注

目录1. 使用NLTK对英文进行词性标注1.1词性标注示例1.2 语料库的已标注数据2 标注器2.1 默认标注器2.2 正则表达式标注器2.3 查询标注器3 训练N-gram标注器3.1 一般N-gram标注3.2 组合标注器4.更进一步5.中文标注器的训练6. brown语料库相关方法 参考链接2 参考链接3 参考链接1 自然语言是人类在沟通中形成的一套规则体系。规则有强有弱,比如非正式场合使用口语,正式场合下的书面语。要处理自然语言,也要遵循这些形成的规则,否则就会得出令人无法理解的结论。下面介绍一些术

qq_33489955的博客 2612

【Claude Code】Not logged in 未登录错误解决方案 + /login 认证路径

Claude Code 启动时提示 Not logged in 表示当前会话缺少有效凭证。本文从环境变量、API Key 配置、CI 自动化凭证脚本和系统时钟四个维度,提供完整的认证排查流程与修复方案。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 894

自然语言处理学习6:nltk词性标注

1. 使用词性标注器 import nltk text = nltk.word_tokenize("They refuse to permit us to obtain the refuse permit") tagged_text = nltk.pos_tag(text) print(tagged_text) # 为避免标记的复杂化,可设置tagset为‘universal’ tagged...

zhuzuwei的博客 3413

File Load Error for Untitled.ipynb Unhandled error 解决方案

本文主要介绍了File Load Error for Untitled.ipynb Unhandled error 解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

使用 Prometheus 监控 Spring Boot 应用

本文介绍了使用SpringBoot+Prometheus+Grafana实现应用监控的方案。首先在SpringBoot项目中集成Micrometer和Actuator组件,通过配置暴露Prometheus监控端点。接着配置Prometheus采集应用指标数据,并通过Grafana可视化展示。具体步骤包括:1)SpringBoot集成Micrometer;2)配置Prometheus抓取应用指标;3)安装Grafana并导入SpringBoot监控模板;4)展示JVM和业务指标。该方案可以实现对SpringB

蔡定努 431

NLTK词性标注说明

NLTK词性标注说明: CC Coordinating conjunction 连接词 CD Cardinal number 基数词 DT Determiner 限定词(如this,that,these,those,such,不定限定词:no,some,any,each,every,enough,either,neither,all,both,half,...

sk_berry的博客 2312

WPF用户控件间属性传递的艺术

本文详细介绍了WPF中父控件向子控件传递属性的方法。针对常见的绑定失效问题,重点讲解了使用RelativeSource绑定技术,通过指定AncestorType确保正确访问父控件属性。文章通过实例演示了从ParentModel传递属性到ChildUserControl依赖属性的完整实现过程,包括模型定义、XAML结构设计和代码实现。这种方法有效解决了数据上下文混淆问题,为WPF开发中的控件交互提供了可靠解决方案,有助于提升应用的灵活性和可维护性。

2501_90323865的博客 56

nltk词性标注的涵义

这学期nlp一个实验要求使用brown语料库,在搜索其词性标注含义的时候发现nltk词性标注的缩写应该有好几种规范,可以使用ntlk.help模块进行查看,help.py中部分函数如下: def brown_tagset(tagpattern=None): _format_tagset("brown_tagset", tagpattern) def claws5_tagset(tagpa...

m0_37863723的博客 1166

机器人常用坐标系详解:原理、获取方法及实战实例

本文系统阐述了机器人四大核心坐标系(世界、基、工具、工件)的原理与标定方法。世界坐标系提供全局参考基准,基坐标系绑定机器人本体,工具坐标系定义末端执行器位置,工件坐标系则锁定作业对象位置。通过齐次变换矩阵实现各坐标系间的关联转换。重点介绍了三类标定技术:手动设定法(世界坐标系)、三点/六点法(工具TCP标定)和视觉识别法(工件标定),并以工业机械臂上下料为例演示了完整应用流程。随着技术发展,自动化标定、动态坐标系等新趋势将进一步提升机器人作业精度与效率。

start_up_go的博客 515

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python词性标注_Python NLTK学习5(词性标注)

Python NLTK学习5(词性标注)发表于:2017年1月3日阅读:12925除特别注明外,本站所有文章均为小杰Code原创本系列博客为学习《用Python进行自然语言处理》一书的学习笔记。词性标注器一个词性标注器处理一个词序列,为每个词附加一个词性标记,我们先看一个示例:import nltkwords = nltk.word_tokenize('And now for someth...

weixin_39661881的博客 901

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python里的nltk库_Python 自然语言处理——nltk库入门之词性标注

nltk 自然语言处理库源自宾夕法尼亚大学计算机与信息科学系的计算机语言学课程,在数十名优秀的贡献者的帮助下不断壮大,成为最常用的自然语言处理库之一。下面列出了nltk库中的一些重要的模块——nltk.corpus————获取语料库。——————语料库和词典的标准化接口——nltk.tokenize,nltk.stem————字符串处理——————分词,句子分解,提取主干——nltk.colloc...

weixin_36241311的博客 2358

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NLTK 词性标注与句法分析

NLTK的词性标注与句法分析功能为自然语言处理提供了强大的支持。通过这两项技术,我们可以深入理解文本的结构和含义,为后续的高级NLP任务打下坚实的基础。无论是初学者还是经验丰富的开发者,都可以从NLTK中受益。在未来的自然语言处理研究中,随着深度学习等技术的不断发展,NLTK将继续发挥重要的作用,推动该领域不断向前发展。

得塔云的博客 946

nltk词性标注

将词汇按它们的词性(parts-of-speech,POS)分类以及相应的标注它们的过程被称为词性标注(part-of-speech tagging, POS tagging)或干脆简称标注。词性也称为词类或词汇范畴。用于特定任务的标记的集合被称为一个标记集。 使用词性标注器进行英文的词性标注。 1. 打开cmd,输入python,进入python编译环境。 import nltk...

weixin_30256901的博客 540

Python NLTK学习5(词性标注)

本系列博客为学习《用Python进行自然语言处理》一书的学习笔记。 词性标注器 一个词性标注器处理一个词序列,为每个词附加一个词性标记,我们先看一个示例: import nltk words = nltk.word_tokenize('And now for something completely different') print(words) word_tag = nltk.p

人工智能 1万+

【NLP Tool -- NLTK】NLTK进行英文情感分析、分词、分句、词性标注(附代码)

NLP自然语言处理之NLTK工具的使用,进行英文情感分析、分词、分句、词性标注(附代码)

优快云已停更,感兴趣关注https://aaronzijingcai.github.io/ 1万+

NLTK(5)词性标注

#词性标准器 #已标准的

todingdong的博客 1658

nltk 词性标注详解

1. 准备工作:分词和清洗   import nltk from nltk.corpus import stopwords from nltk.corpus import brown import numpy as np #分词 text = "Sentiment analysis is a challenging subject in machine learning.\ People...

zhuzuwei的博客 1万+

NLTK词性标注POS含有哪些词性?这里总结

NLTK词性: 下面解释可以直接使用nltk.help.upenn_tagset()查看官方英文说明。 标记 含义 例子 CC 连词 and, or,but, if, while,although CD 数词 twenty-four, fourth, 1991,14:24 DT 限定词 the, a, some, most,every, no EX 存在量词 there, there’...

Mr番茄蛋的博客 3184
上一篇: NLTK之词频
下一篇: Laravel5与前端(一)快速上手
爆浆大鸡排
博客等级 码龄11年 65粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值