【发布时间】:2017-10-23 18:41:24
【问题描述】:
我是一个新手,尝试在 NLP 中进行句子分割。 我知道在 NLTK 中也可以使用标记器。但是我想使用像决策树这样的机器学习算法来构建自己的句子分割器。但我无法为它收集训练数据。数据应该如何。应该如何标注,因为我想先尝试使用监督学习。任何样本数据已经可用?任何帮助都会很有用。我在网上搜索了近一周,现在发布相同的帮助。提前致谢。
【问题讨论】:
标签: machine-learning nlp
我是一个新手,尝试在 NLP 中进行句子分割。 我知道在 NLTK 中也可以使用标记器。但是我想使用像决策树这样的机器学习算法来构建自己的句子分割器。但我无法为它收集训练数据。数据应该如何。应该如何标注,因为我想先尝试使用监督学习。任何样本数据已经可用?任何帮助都会很有用。我在网上搜索了近一周,现在发布相同的帮助。提前致谢。
【问题讨论】:
标签: machine-learning nlp
正如 Lenz 所说,当前的句子拆分器通常是正则表达式或规则库方法与无监督的混合。例如,来自 nltk 的 PunktSentenceTokenizer 是基于无监督学习(Unsupervised Multilingual Sentence Boundary Detection),通过从文本中学习缩写并避免在出现时进行分割。您可以为特殊语料库添加自己的缩写
BIO 方法更适合 NER。事实上,这种方法是存在的,你可以找到基于这种方法或类似 BILOU 的微调 BERT。在 DL 模型中,BERT 对这项任务非常友好,因为它带有标记 CSL 和 SEP 来指示句子的开头和结尾。您也可以自己根据这些标记训练分段拆分器,但要小心直接使用这些标记,因为 SEP 标记不仅仅是句子的结尾,而是一组句子的结尾。而且对于大型语料库,这种方法可能会很耗时。
与您所说的更接近的是使用 NaiveBayes 进行的半监督学习,您可以在此处找到: http://www.nltk.org/book/ch06.html 您可以使用数据集训练自己的拆分器,但需要在训练之前将数据拆分为句子。所以标签是隐含在分裂中的,半监督的。这给出了 96-97 的准确度,这是一个很好的结果。决策树更昂贵,结果也不会好多少。因此,如果您想在最后将其调整为特殊的语料库,则可以使用正则表达式或将缩写词添加到 nltk。如果您只是想玩,您可以使用不同的分类模型测试这种方法并查看结果。
【讨论】:
据我所知,句子拆分器通常是作为混合实现的,其中包含一组规则(要考虑的标点符号)和一些自动学习的权重(对于例外情况,例如带句点的缩写,它不起作用作为句号)。无需监督即可学习权重。
然而,用一个简单的基于 ML 的系统来解决这个问题是一个有趣的想法。对于有监督的方案,您可以尝试使用带有BIO 标签的基于字符的序列标签模型。例如,您的训练数据可能如下所示:
This is it! I'm leaving Dr. Smush in his box.
BIIIIIIIIIIOBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
预测的输出也将是BIIIIO...,您必须将原始文本拆分为标记为O 的字符。
我不确定这是否是最好的方法,但是如果您尝试一下,请告诉我是否有任何好处。确保使用 n-grams 的高阶(3-、4-、5-gram 甚至更高),因为这些是字符,而不是单词标记。
至于训练数据,您可以使用任何语言注释的语料库,因为它们都是句子分割的(例如,查看 NLTK 中包含的那些)。
您所要做的就是为训练生成BIO 标签。
【讨论】: