我想用来自棕色语料库的数据和通用标签来训练它.
这是我遇到问题时运行的代码.
import nltk,mathtagged_sentences = nltk.corpus.brown.tagged_sents(categorIEs='news',Tagset='universal')i = math.floor(len(tagged_sentences)*0.2)testing_sentences = tagged_sentences[0:i]training_sentences = tagged_sentences[i:]perceptron_tagger = nltk.tag.perceptron.PerceptronTagger(load=False)perceptron_tagger.train(training_sentences)
它无法正确训练,并提供以下堆栈跟踪.
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-10-61332d63d2c3> in <module>() 1 perceptron_tagger = nltk.tag.perceptron.PerceptronTagger(load=False)----> 2 perceptron_tagger.train(training_sentences)/home/nathan/anaconda3/lib/python3.5/site-packages/nltk/tag/perceptron.py in train(self,sentences,save_loc,nr_iter) 192 c += guess == Tags[i] 193 n += 1--> 194 random.shuffle(sentences) 195 logging.info("Iter {0}: {1}/{2}={3}".format(iter_,c,n,_pc(c,n))) 196 self.model.average_weights()/home/nathan/anaconda3/lib/python3.5/random.py in shuffle(self,x,random) 270 # pick an element in x[:i+1] with which to exchange x[i] 271 j = randbelow(i+1)--> 272 x[i],x[j] = x[j],x[i] 273 else: 274 _int = intTypeError: 'LazySubsequence' object does not support item assignment
它似乎来自随机模块中的shuffle函数,但这看起来并不合适.
还有其他可能导致问题的原因吗?
有人有这个问题吗?
我正在使用Anaconda Python 3.5在Ubuntu 16.04.1上运行它. nltk版本是3.2.1
解决方法 NLTK有很多自定义的“懒惰”类型,它们可以简化大量数据的修改,例如带注释的语料库.它们在许多方面表现得像标准列表,元组,词汇等,但避免不必要地占用太多内存.其中一个例子是LazySubsequence,它是切片表达式tagged_sentences [i:]的结果.如果tagged_sentences是正常列表,则将数据划分为测试/培训将创建数据的完整副本.相反,这个LazySubsequence是对原始序列的部分视图.
虽然这对内存的好处可能是一件好事,但这里的问题是这个视图是只读的.
显然,PerceptronTagger希望将其输入数据原位洗牌,这是不允许的 – 因此是例外.
一个快速(但可能不是最优雅)的解决方案是为标记器提供数据的副本:
perceptron_tagger.train(tuple(training_sentences))
您可能必须对测试数据执行相同的 *** 作.
总结以上是内存溢出为你收集整理的分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”全部内容,希望文章能够帮你解决分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)