首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scikit学习: tfidf模型表示

scikit学习: tfidf模型表示
EN

Stack Overflow用户
提问于 2015-04-20 00:52:03
回答 2查看 1.1K关注 0票数 0

tldr: tfidf稀疏矩阵是什么样子的?

假设我有以下情况。

代码语言:javascript
复制
descriptions = ["he liked dogs", "she liked cats", "she hated cars"]
tfidf = TfidfVectorizer()
trained_model = tfidf.fit_transform(descriptions)

现在,我想将tfidf分数与文档的其他特性结合起来,并给出不同的权重。例如,我想添加length_documentnum_words作为文档的特性。因此,每个文档应该表示为

代码语言:javascript
复制
d = [tfidf_score, length_document, num_words]

然后,我将试图找出这三个特性的最佳权重,以返回最相似的文档。

但首先,我需要弄清楚trained_model到底是什么样子。

代码语言:javascript
复制
(Pdb) trained_model
<5801x8954 sparse matrix of type '<type 'numpy.float64'>'
    with 48369 stored elements in Compressed Sparse Row format>
(Pdb) trained_model[0]
<1x8954 sparse matrix of type '<type 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>
(Pdb) trained_model[1]
<1x8954 sparse matrix of type '<type 'numpy.float64'>'
    with 11 stored elements in Compressed Sparse Row format>

共有文档5801份,语料库中以8954个字表示。那么x stored elements代表什么呢?

如果你有时间:

我假设每个文档都由长度为8954的向量表示。如果我只是在结尾添加两个特征,并使向量长度8956,这是没有意义的,它们的平衡。我想让第一个8954的功能重量的1/3,最后的2/3。这有意义吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-20 02:54:30

矩阵中的每一行对应于一个文档。行是按照压缩行格式格式化的。只包括非零项。

因此,trained_model应该返回第一个文档的tfidf向量,它有四个条目,一个条目对应于四个不同的术语。第二个文档包含11个不同的术语。

关于你的体重。如果您想要度量文档的相似性,您可能应该使用距离度量,例如tfidf向量上的辅助符号相似性。将2/3的相似性分配给文档的长度可能不是您想要的

票数 0
EN

Stack Overflow用户

发布于 2016-10-25 14:00:28

tf矩阵是以文档为行的矩阵的稀疏表示,我们将其称为D,以及表示列的单个术语(即这些文档中包含的词汇)--让我们称之为T

在正常(密集)矩阵表示(如数组)中,机器将保留DxT数据块,并根据数据类型(TF-国防军矩阵可能包含浮点类型数据)填充空单元格,或NaN或诸如此类的数据(因此您会看到零),它只是一个大的矩形内存块,可以通过提供坐标引用来快速引用。

矩阵的稀疏表示通过假设矩阵的大部分为零,并将非零值写入属于(x,y)类元组的索引来节省空间。x stored elements部分表示在该矩阵中存在x非零元素。

只要保持简单,就可以直接执行矩阵--数学--稀疏矩阵,或者,如果您有内存,可以使用S.todense()函数将矩阵转换为密集的表示。这允许您在所能做的事情上具有更大的灵活性,代价是托管一个(在您的示例中) 5801x8954xdatatype_size (如果您的数据类型是一个np.float64,那么就是8,即np.dtype(np.float64).itemsize ),通过粗略的计算( 400MB )给出5801x8954x8=415537232。这可能是可以管理的,只要你没有在任何时候处理数千个这样的问题。

与您的第一个稀疏矩阵的大小相比,包含48369个值,每个值有8个字节,而且(可能还有4-8个字节用于索引),这大概是3MB -相当大的内存节省!

如果您乐于在tf-国防军表示(稀疏或密集)中工作,您可能可以通过在词汇表中注入一些保留关键字(如zzz_length_documentzzz_num_words )来压缩这些额外的指标(最简单的方法是将它们添加到文档的末尾,然后再添加到tf-国防军),然后修改相关的DT单元值,以相应地处理权重--您可能会发现,您需要降低(规范化)这些数字,以使它们不主导您在最终矩阵上执行的任何向量化,但一些实验应该有助于揭示一些合适的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29737690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档