gpt4 book ai didi

python - 一组单词中的模式并将它们分组

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:22 25 4
gpt4 key购买 nike

我需要在一组 5000 个样本中找出多个词之间的相关性。

示例:-

  1. 芒果、 Guava 、荔枝、苹果
  2. 芒果、 Guava 、荔枝、橙子
  3. 芒果、 Guava 、菠萝、葡萄
  4. 钢笔、铅笔、书本、复印件、笔记本
  5. 钢笔、铅笔、书本、复印件、刻度

我们看到 1 和 2 彼此非常接近。 3 几乎接近 1 和 2。我们还有 4 和 5 彼此非常接近。

我们可以使用什么方法和技术来检查这种相关性?

提前致谢!

修订:在分组方面也需要帮助,例如 A 组由第 1、2、3 行组成,B 组包含 4 和 5。?

最佳答案

这是解决此问题的一种方法。我使用 scikit-learn 将每个列表转换为文档术语矩阵。然后使用 scipy.spacial.distance 计算每行之间的余弦相似度矩阵。

from sklearn.feature_extraction.text import CountVectorizer
from scipy.spatial import distance

count_vect = CountVectorizer(tokenizer=lambda x: x.split(', '))

ls = ['mango, guava, litchi, apple',
'mango, guava, litchi, orange',
'mango, guava, pineapple, grape',
'pen, pencil, book, copy, notebook',
'pen, pencil, book, copy, scale']

X = count_vect.fit_transform(ls).toarray()
D = distance.cdist(X, X, metric='cosine')

输出是每行之间的距离矩阵。看起来像下面这样:

[[ 0.  ,  0.25,  0.5 ,  1.  ,  1.  ],
[ 0.25, 0. , 0.5 , 1. , 1. ],
[ 0.5 , 0.5 , 0. , 1. , 1. ],
[ 1. , 1. , 1. , 0. , 0.2 ],
[ 1. , 1. , 1. , 0.2 , 0. ]])

例如D[0, 1]表示第1行靠近第2行,因为两行之间的距离很小。此外,您可以看到 D[3, 4] 很小,这意味着第 4 行接近第 5 行。

注意 您还可以考虑使用 distance.pdist(X, metric='cosine') 仅给出矩阵的下对角线,因为下对角线和上对角线相等.

分组文档

更花哨的是,您可以使用层次聚类将每一行与计算出的距离矩阵聚类在一起。

from scipy.cluster import hierarchy

D = distance.pdist(X, metric='cosine')
Z = hierarchy.linkage(D, metric='euclidean')
partition = hcluster.fcluster(Z, t=0.8, criterion='distance') # [2, 2, 2, 1, 1]

这意味着文档 1、2、3 被分在第 2 组中,而 4、5 被分在第 1 组中。如果绘制树状图,您可以看到每一行如何聚集在一起

from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt

hierarchy.dendrogram(Z, above_threshold_color='#bcbddc',
orientation='top')

关于python - 一组单词中的模式并将它们分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44611986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com