将段落拆分为有意义的子段落

时间:2020-06-03 02:31:24

标签: nlp topic-modeling boundary

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 将段落拆分为句子。
  2. 将每个句子表示为某种形式上的对象(例如,来自w2v,fasttext,ELMO或BERT的一袋单词或一词单词嵌入,或来自诸如USE之类的某些神经网络的句子嵌入)。
  3. 计算每对句子之间的距离(例如,句子嵌入之间的余弦距离或单词计数,或词嵌入之间的动词距离)。
  4. 对此距离矩阵运行聚集聚类算法,但有一个附加限制:只能将相邻的聚类合并在一起。
  5. 尝试使用不同的停止条件(通常是阈值)在不同的段落上进行聚类,然后选择产生最有意义的分区的阈值。

如果该算法看起来像您想要的,我可以在Python中提供其基线实现。

更新,请按照我的基本实现方法进行深入了解:Spacy标记符+ Spacy句子向量的余弦相似度+仅基于相邻句子的幼稚聚类。 https://gist.github.com/avidale/e4450da902d36bb14c595987943120dc