gpt4 book ai didi

python - NLTK punkt 的训练数据格式

转载 作者:太空狗 更新时间:2023-10-29 17:05:52 37 4
gpt4 key购买 nike

我想运行 nltk Punkt 来拆分句子。没有训练模型所以我单独训练模型,但我不确定我使用的训练数据格式是否正确。

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

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

最佳答案

是的,Punkt tokenizer 是神奇的无监督句子边界检测。而且作者的姓氏也很酷,Kiss and Strunk (2006) .这个想法是使用NO annotation 来训练句子边界检测器,因此输入将是任何类型的明文(只要编码一致)。

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

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()

为了获得更高的精度并允许您随时停止训练并仍然为您的分词器保存适当的 pickle,请查看这段用于训练德语句子分词器的代码片段,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 存储库已被删除。

关于python - NLTK punkt 的训练数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160310/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com