使用 RNN 的文本相似度

数据挖掘 机器学习 nlp 相似 rnn 文本
2021-09-24 03:25:49

数据集包含短文本的记录,通常是一个句子。目标是找到重复的记录和相似的记录。目前,我已经尝试过 R 包 'text2vec'、手套词向量和包提供的相似度 API。

该数据中有一个较小的子集已被标记为重复。目前,我还没有将其作为模型训练的一部分。此外,使用 text2vec 包,这个测试集的结果不是很好。所以现在我正在考虑已知在文本相似性方面表现良好的 RNN。

现在,我在特征工程和准备输入层方面需要帮助。需要比较的句子 S1 和 S2 的长度不同(单词表示的维度不同)。如何标准化这种差异?我应该考虑词袋还是手套词向量(词向量是更好的表示形式)?这方面的任何投入都会有所帮助。

2个回答

Doc2Vec,Mikolov 的论文将解决您的问题。这是你可以在这里找到一个 gensim 实现在使用 RNN 时,即使您的序列长度相同,使用 GLOVE 或 Googl Word2Vec 也总是有用的。要解决可变序列问题,您可以填充句子并使用分桶或只是填充到一个统一的长度,截断较长的句子并填充较短的句子。

除非你有大量数据,否则我怀疑训练 RNN 的相似性是否会给你带来显着的改进。

作为基线,我会先采用传统方式,为每对文本设计一些特征,例如:

  • 两个文本中的常用词的数量(词应该是词干)
  • 每个句子中的单词数
  • TF-IDF 向量上的余弦相似度(unigrams、word n-grams、character n-grams
  • 手套相似度(您可以尝试来自维基百科的预训练向量)
  • 最长公共子序列 (LCS)

现在,您可以在标记对数据集上训练二元分类器。例如,从逻辑回归或随机森林开始。也许您已经可以达到您正在寻找的性能。

为了进一步参考,搜索相关性分类是一个非常相似的问题。你可以查看来自 Kaggle 竞赛 Homedepot 和 Crowdflower 的解决方案,以获得更多特征工程的灵感。