当前位置: 首页 > 面试题库 >

NLTK punkt的训练数据格式

邵亦
2023-03-14
问题内容

我想跑nltk Punkt分句。没有训练模型,因此我将单独训练模型,但是我不确定我使用的训练数据格式是否正确。

我的训练数据是每行一句话。我找不到与此有关的任何文档,只有此线程(https://groups.google.com/forum/#!topic/nltk-
users/bxIEnmgeCSM
)揭示了一些有关训练数据格式的信息。

NLTK Punkt句子标记器的正确训练数据格式是什么?


问题答案:

嗯,是的,Punkt令牌生成器是神奇的无监督语句边界检测。作者的姓氏也很酷,Kiss and
Strunk(2006)
。这个想法是使用
NO注释 来训练句子边界检测器,因此输入将是 任何种类的纯文本 (只要编码是一致的)。

要训​​练新模型,只需使用:

import nltk.tokenize.punkt
import pickle
import codecs
tokenizer = nltk.tokenize.punkt.PunktSentenceTokenizer()
text = codecs.open("someplain.txt","r","utf8").read()
tokenizer.train(text)
out = open("someplain.pk","wb")
pickle.dump(tokenizer, out)
out.close()

为了获得更高的精度并允许您随时停止培训,并且仍然为标记生成器保留适当的泡菜,请查看以下用于训练德语句子标记生成器的代码段:https://github.com/alvations/DLTK/blob/
master / dltk / tokenize /
tokenizer.py:

def train_punktsent(trainfile, modelfile):
  """ Trains an unsupervised NLTK punkt sentence tokenizer. """
  punkt = PunktTrainer()
  try:
    with codecs.open(trainfile, 'r','utf8') as fin:
      punkt.train(fin.read(), finalize=False, verbose=False)
  except KeyboardInterrupt:
    print 'KeyboardInterrupt: Stopping the reading of the dump early!'
  ##HACK: Adds abbreviations from rb_tokenizer.
  abbrv_sent = " ".join([i.strip() for i in \
                         codecs.open('abbrev.lex','r','utf8').readlines()])
  abbrv_sent = "Start"+abbrv_sent+"End."
  punkt.train(abbrv_sent,finalize=False, verbose=False)
  # Finalize and outputs trained model.
  punkt.finalize_training(verbose=True)
  model = PunktSentenceTokenizer(punkt.get_params())
  with open(modelfile, mode='wb') as fout:
    pickle.dump(model, fout, protocol=pickle.HIGHEST_PROTOCOL)
  return model

但是请注意,周期检测 对拉丁句号,问号和感叹号非常敏感
。如果您要为不使用拉丁语拼字法的其他语言训练punkt令牌生成器,则需要以某种方式修改代码以使用适当的句子边界标点符号。如果您使用的是NLTK的punkt实现,请编辑sent_end_chars变量。

除了使用的“默认”英语令牌生成器外,还有其他可用的预训练模型nltk.tokenize.sent_tokenize()。它们在这里:https
:
//github.com/evandrix/nltk_data/tree/master/tokenizers/punkt

请注意,由于nltk_data上面列出的github存储库已被删除,因此预训练模型当前不可用。



 类似资料:
  • 问题内容: 我像这样使用scikit-learn的SVM: 我的问题是,当我使用分类器预测训练集成员的班级时,即使在scikit- learns实现中,分类器也可能是错误的。(例如) 问题答案: 是的,可以运行以下代码,例如: 分数是0.61,因此将近40%的训练数据被错误分类。部分原因是,即使默认内核是(理论上也应该能够对任何训练数据集进行完美分类,只要您没有两个带有不同标签的相同训练点),也可

  • 为了评估我们的监督模型的泛化能力,我们可以将数据分成训练和测试集: from sklearn.datasets import load_iris iris = load_iris() X, y = iris.data, iris.target 考虑如何正常执行机器学习,训练/测试分割的想法是有道理的。真实世界系统根据他们拥有的数据进行训练,当其他数据进入时(来自客户,传感器或其他来源),经过训

  • 问题内容: 因此,我一直遵循Google的官方tensorflow指南,并尝试使用Keras构建一个简单的神经网络。但是,在训练模型时,它不使用整个数据集(具有60000个条目),而是仅使用1875个条目进行训练。有可能解决吗? 输出: 这是我一直在为此工作的原始Google colab笔记本:https ://colab.research.google.com/drive/1NdtzXHEpiN

  • 我有文件及其非常大的文件说100MB文件。我想执行NER以提取组织名称。我使用OpenNLP进行了培训。 示例代码: 但是我得到了一个错误:。 有没有办法使用openNLP for NER来训练大型数据集?你能发布示例代码吗? 当我谷歌时,我发现Class GIS和DataIndexer界面可用于训练大型数据集,但我知道如何训练?你能发布示例代码吗?

  • 我正在使用OpenNLP进行数据分类。我在这里找不到疾病的TokenNameFindModel。我知道我可以创建自己的模型,但我想知道是否有针对疾病的大样本训练数据?

  • 问题内容: 我的训练数据的格式为(?,15)其中?是可变长度。 创建模型时,请指定以下内容: 我的训练数据的形状为(35730,?,15)。 在python中检查这个我得到: 输出:(35730,) 输出:(513,15) 当我尝试根据训练数据拟合模型时,出现ValueError: 我只能在单个样本上使用model.train_on_batch()来训练模型。 我该如何解决?似乎keras认为我的