文本相似性:使用哪些 nlp 方法?

数据挖掘 nlp 文本挖掘 word2vec 相似 类似文件
2022-02-13 13:43:26

我有数据,其中每个用户 A 访问企业 B 都有文本。我想使用他们的文本找到每个用户之间的相似性。

问题 1:我应该从哪种 NLP 方法开始?

我尝试过余弦相似度,我知道它是一种很好的方法,但计算相似度的速度很慢。

我考虑过从文本中提取重要信息(例如:术语提取,我不想使用 LDA)并计算该信息之间的相似性。

问题2:有什么建议吗?

这就是文本数据的样子

1个回答

有很多方法可以查看文本的相似性,但这取决于您的用例。

语义

如今,词嵌入越来越流行。就像评论中建议的那样,您可以使用Doc2Vec将您的句子转换为向量并计算每个句子的余弦距离。

这些学习嵌入的想法是,您可以通过查看单词在上下文中的使用方式来对句子的含义进行编码。因此,如果单词在上下文中以相同的方式使用,句子将是相似的。

但是,这可能难以解释。

例如:

Good tattoo shop. Clean space.
Good pizza restaurant. Large space.
Terrible tattoo shop. Dirty space.

其中哪些在语义上是接近的?这在很大程度上取决于您的培训和您自己的判断,以确定结果是否对您有用。

情绪

如果句子的情绪是积极的或消极的(或在其他尺度上),也许你有兴趣说句子是相似的。

例如:

假设你可以有一个规模的情绪[1,1], 在哪里1是负数,0是中性的并且1是积极的。

Good tattoo shop. Clean space.
    Sentiment = 0.7

Good pizza restaurant. Large space.
    Sentiment = 0.75

Terrible tattoo shop. Dirty space.
    Sentiment = -0.9

网上有很多关于如何做到这一点的资源。是带有一些链接的答案。

词袋是一种非常简单的方法,但取决于你在做什么,它可以解决问题。假设你想说句子是相似的,如果它们是关于同一行业的企业的。

您可以为每个行业制作一个简单的字典:

word_per_industry = {
    'restaurants' = ['restaurant', 'food', 'chef', 'dish', 'salad', 'lunch'],
    'tatto_shop' = ['clean', 'dirty', 'art', 'sterlized']
    .
    .
    .
}

然后,每个句子,您可以计算句子中哪个企业的单词更多,如果句子来自同一行业,它们是相似的。当然,你也可以根据另一个特征来做列表,不一定是行业。