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