哪种分词器更适合与NLTK一起使用?

7
我已经开始学习nltk并且正在跟随这个教程:这里。首先我们使用内置的分词器,通过使用sent_tokenize,然后我们使用PunktSentenceTokenizer。教程提到PunktSentenceTokenizer能够进行无监督机器学习。
那么这是不是意味着它比默认的更好呢?或者各种分词器之间有什么标准可以进行比较吗?
2个回答

10
查看sent_tokenize()源代码,发现该方法目前使用预训练的punkt分词器,因此它相当于PunktSentenceTokenizer。您是否需要重新训练自己的分词器取决于您正在处理的文本的性质。如果它不是太奇特,例如报纸文章,则通常会发现预训练的分词器足够使用。分词归结为分类任务,因此可以通过对标记数据使用典型的度量标准(如精确度、召回率、F1值等)来比较不同的分词器。 punkt分词器基于以下论文发布的工作:http://www.mitpressjournals.org/doi/abs/10.1162/coli.2006.32.4.485#.V2ouLXUrLeQ。它基本上是一种启发式方法,旨在从缩写中消除模糊的句子边界——句子分词的难点。称其为启发式方法并不是贬低它。我以前使用过内置的分句器,并且对我所做的事情起到了良好的作用,当然,我的任务并不真正依赖于准确的句子分词。或者说,我能够将足够的数据投入其中,以至于这并不重要。
以下是一个在SO上的问题示例,其中用户发现预训练的分词器不足,并需要训练一个新的分词器:如何调整NLTK句子分词器。相关文本是Moby Dick,奇怪的句子结构使分词器失效。您可能需要训练自己的分词器的一些示例包括社交媒体(例如Twitter)或具有许多预训练分词器未遇到的奇怪缩写的技术文献。

这个回答比我的好多了,我太匆忙了。是的,如果您处理嘈杂的数据(例如推文),其中句子可能或可能不正确或结构不完整,则对于分词器来说训练非常重要。如果您有倾向,可以执行分词器性能比较操作。但是不要期望在 良好构建 的句子上分词器会有太大差异。 - Ic3fr0g

2
句子和单词通常是手动分词的。存在各种语料库,根据句子上下文对单词进行POS标记。当您的数据(句子和单词)需要训练以实现对单词在上下文中如何标记的统一理解时,将使用 PunktSentenceTokenizer。数据科学家可能会手动注释整个句子的单词标记,然后告诉机器学习它们(监督学习)。但是,PunktSentenceTokenizer采用ML算法自行学习这些标记(无监督学习)。您只需选择它要训练的数据。
根据您正在处理的数据,sent_tokenize和因此word_tokenize的结果可能与PunktSentenceTokenizer并没有太大区别。选择分词器由数据科学家决定,但标准始终与手动注释标记进行比较(因为它们是最正确的标记)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接