首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLP -句子切分

NLP -句子切分
EN

Stack Overflow用户
提问于 2017-05-24 01:12:09
回答 2查看 1.4K关注 0票数 0

我是一个新手,正在尝试NLP中的句子切分。我知道在NLTK中也有同样的标记器可用。但我想使用机器学习算法建立自己的句子分词系统,比如决策树。但是我不能为它收集训练数据。数据应该是怎样的。既然我想首先尝试使用监督学习,那么它应该如何标记。是否有已有的样本数据?任何帮助都将是有用的。我在网上搜索了将近一个星期,现在也发了同样的信息寻求帮助。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-05-24 04:51:58

据我所知,句子拆分器通常被实现为具有一组规则(要考虑的标点符号)和一些自动学习权重(例外情况下,例如带句点的缩写,不作为句号)的混合体。权重可以在没有监督的情况下学习。

然而,用一个普通的基于ML的系统来实现这一点是一个有趣的想法。对于有监督的方案,您可以尝试使用BIO标签的基于字符的序列标签模型。例如,您的训练数据可能如下所示:

代码语言:javascript
复制
This is it! I'm leaving Dr. Smush in his box.
BIIIIIIIIIIOBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

然后,预测的输出也将是BIIIIO...,并且您必须在标记为O的字符处拆分原始文本。我不确定这是不是最好的方法,但如果你尝试过,请让我知道它是否有用。确保使用高位的n-gram (3-、4-、5-gram甚至更高),因为这些是字符,而不是单词标记。

至于训练数据,你可以使用任何语言注释的语料库,因为它们都是句子分割的(例如,看看NLTK中包含的那些)。您所要做的就是生成用于训练的BIO标签。

票数 2
EN

Stack Overflow用户

发布于 2021-01-25 23:26:11

正如Lenz所说,当前的句子拆分器通常是正则表达式或规则库方法与无监督的混合。例如,nltk的PunktSentenceTokenizer是基于无监督学习(无监督多语言句子边界检测)的,它从文本中学习缩写,并在出现缩写时避免分割。您可以为特殊语料库添加自己的缩写

BIO方法看起来更像是一个NER。事实上,这种方法是存在的,您可以找到基于这种方法或类似于BILOU的微调BERT。在DL模型中,BERT对于这项任务非常友好,因为它附带了CSL和SEP标记来指示句子的开始和结束。您也可以自己训练基于这些标记的分割拆分器,但要小心直接使用这些标记,因为SEP标记不是纯粹的句子结尾,而是一组句子的结尾。此外,对于大型语料库,这种方法可能很耗时。

更接近您所说的是使用NaiveBayes的半监督学习,您可以在这里找到:http://www.nltk.org/book/ch06.html您可以使用您的数据集训练自己的拆分器,但您需要在训练之前将数据拆分成句子。因此,标签在分割中是隐含的,半监督的。这给出了96-97的准确率,这是一个很好的结果。决策树的成本更高,结果也不会变得更好。因此,如果您希望在最后将其适应于特殊语料库,可以使用regex,也可以将缩写添加到nltk中。如果你只是想玩,你可以用不同的分类模型进行测试,这种方法可以看到结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44141113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档