Python scikit学习说话者从句子中选择最好的单词

2024-09-28 01:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一个包含两个说话者的句子的数据库中使用scikit学习函数SelectKBest。 我的目标是找到30个最好的词,可以作为功能,以分开这两个发言者,我想打印到屏幕上。你知道吗

这些句子存储在一个列表sentences[]中,我有关于每个句子的说话人的信息(存储在另一个列表speakers[]

我还需要为这些K个最佳特征创建向量,并能够在这些向量上使用分类器。你知道吗

当前代码:(句子包含每个说话人10000个句子,已排序)

speakers = [0] * 10000 + [1] * 10000
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(sentences)

kbest = SelectKBest(chi2, k=30).fit(vectors, speakers)
outcome = kbest.get_support()
for i in range(0,len(sentences)):
    if outcome[i]:
        print (sentences[i])

我不确定它是否找到了正确的单词或选择了完整的句子,如果找到了,我也不确定如何打印它找到的单词。(目前,当我直接打印一个与SelectKBest找到的内容有匹配索引的句子时,它显然会打印整个句子)。你知道吗

我可能需要在特征向量的第I个位置找到单词,但我不确定如何找到。


Tags: 函数数据库列表sentencesscikit单词向量句子
2条回答

您可以获得由SelectKBest给出的前k个单词

print([vectorizer.get_feature_names()[idx] for idx,flag in enumerate(outcome) if flag])

你的代码错了。您正在这样做:

outcome = kbest.get_support()
for i in range(0,len(sentences)):
    if outcome[i]:
        print (sentences[i])

kbest.get_support()将返回数据特征的布尔数组,而不是句子。但是你在句子数组中比较(迭代)它们,这没有任何意义。你知道吗

SelectKBest将根据传递给它的实际特性来决定保留或不保留哪些特性。这些特征以单词(而不是句子)的形式从TfidfVectorizer传递给它。你知道吗

另外,SelectKBestchi2只会过滤掉(删除)那些发现独立于类的特性。所以剩下的特性对类有一些影响。但要想知道这种影响是积极的还是消极的(找到30个最好的词来区分这两个说话者),这还不够。为此,您将需要有一个分类模型,可以分配权重,这些词(特征)对应的类。你知道吗

有关更多详细信息,请参见下面的示例:

相关问题 更多 >

    热门问题