gpt4 book ai didi

python - 为 TfidfVectorizer scikit-learn 使用自定义词汇表的问题

转载 作者:行者123 更新时间:2023-11-28 19:29:47 25 4
gpt4 key购买 nike

我正在尝试在 scikit-learn 中使用自定义词汇表来完成一些聚类任务,但我得到了非常奇怪的结果。

程序在不使用自定义词汇表时运行正常,我对集群创建感到满意。但是,我已经确定了一组我想用作自定义词汇表的单词(大约 24,000 个)。

单词存储在 SQL Server 表中。到目前为止,我已经尝试了 2 种方法,但最后我得到了相同的结果。第一个是创建列表,第二个是创建字典。创建字典的代码是这样的:

myvocab = {}
vocabulary = []

count = 0

for row in results:
skillName = re.sub(r'&#?[a-z0-9]+;', ' ', row['SkillName'])
skillName = unicode(skillName,"utf-8")
vocabulary.append(skillName) #Using a list
myvocab[str(skillName)] = count #Using a dictionary
count+=1

然后我在 TfidfVectorizer 中使用词汇表(列表版本或字典,它们最后给出相同的结果)如下:

vectorizer = TfidfVectorizer(max_df=0.8, 
stop_words='english' ,ngram_range=(1,2) ,vocabulary=myvocab)
X = vectorizer.fit_transform(dataset2)

X 的形状是 (651, 24321),因为我有 651 个实例要聚类,词汇表中有 24321 个单词。

如果我打印 X 的内容,这就是我得到的:

(14, 11462) 1.0
(20, 10218) 1.0
(34, 11462) 1.0
(40, 11462) 0.852815313278
(40, 10218) 0.52221264006
(50, 11462) 1.0
(81, 11462) 1.0
(84, 11462) 1.0
(85, 11462) 1.0
(99, 10218) 1.0
(127, 11462) 1.0
(129, 10218) 1.0
(132, 11462) 1.0
(136, 11462) 1.0
(138, 11462) 1.0
(150, 11462) 1.0
(158, 11462) 1.0
(186, 11462) 1.0
(210, 11462) 1.0

: :

可以看出,在大多数情况下,只有词汇表中的单词出现(这是错误的,因为至少有 10 个),而在很多情况下,甚至一个单词都找不到。此外,找到的词在所有实例中往往总是相同的,这没有意义。

如果我打印 feature_names 使用:

feature_names = np.asarray(vectorizer.get_feature_names())

我得到:

['.NET' '10K' '21 CFR Part 11' ..., 'Zend Studio' 'Zendesk' 'Zenworks']

我必须说,当使用的词汇是根据输入文档确定的词汇时,程序运行完美,所以我强烈怀疑问题与使用自定义词汇有关。

有人知道发生了什么事吗?

(我没有使用管道,所以这个问题与之前已经修复的错误无关)

最佳答案

让我觉得不寻常的一件事是,当您创建矢量化器时,您指定了 ngram_range=(1,2)。这意味着您无法使用标准分词器获取功能 '21 CFR Part 11'。我怀疑“缺失”的特征是 n>2 的 n-gram。您预选的词汇项目中有多少是单字母词组或双字母词组?

关于python - 为 TfidfVectorizer scikit-learn 使用自定义词汇表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986893/

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