首页 > 解决方案 > 将段落拆分为有意义的子段落

问题描述

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

标签: nlptopic-modelingboundary

解决方案


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

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

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

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

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


推荐阅读