【问题标题】:Spliting paragraph into sub - paragraphs which have meaningfull将段落拆分为有意义的子段落
【发布时间】:2020-09-21 15:30:36
【问题描述】:

通常,一个段落包含许多子段落,每个子段落都有一定的含义。
在 NLP 中,如何将段落拆分为有意义的子段落,或者换句话说,我想检测子段落之间的边界

【问题讨论】:

  • 为什么只分成段落对您不起作用?为什么拆分成单个句子对您不起作用?您根据哪些标准来确定段落的特定拆分是好是坏?

标签: nlp topic-modeling boundary


【解决方案1】:

您所说的问题很有趣,但定义不明确,因为“意义”本身定义不明确,我们实际上不知道如何区分段落的好分区和坏分区。

但是,我们可以将问题简化为:如果它们的主题相似,即它们是关于相同或相似的对象,或者包含其他相似的词,我们希望将相邻的句子组合在一起或短语。因此我们可以正式地描述我们的算法:

  1. 将段落拆分成句子。
  2. 将每个句子表示为某个正式对象(例如,一袋词,或来自 w2v、fasttext、ELMO 或 BERT 的词嵌入袋,或来自某些神经网络(如 USE)的句子嵌入)。
  3. 计算每对句子之间的距离(例如,句子嵌入或单词计数之间的余弦距离,或单词嵌入之间的单词移动距离)。
  4. 在这个距离矩阵上运行一个凝聚聚类算法,有一个额外的限制:只有相邻的聚类可以合并在一起。
  5. 尝试使用不同的停止标准(通常是阈值)对不同段落进行聚类,并选择产生最有意义的分区的阈值。

如果这个算法看起来像你想要的,我可以在 Python 中提供它的基线实现。

更新请用我的基本实现看一下这个要点:Spacy sentenizer + Spacy 句子向量的余弦相似度 + 仅基于相邻句子的朴素聚类。 https://gist.github.com/avidale/e4450da902d36bb14c595987943120dc

【讨论】:

  • 好的,非常感谢你的分享,算法就是我想要的:)
猜你喜欢
  • 2013-05-21
  • 2013-08-13
  • 2011-01-10
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多