标签: tf-idf

lucene是如何构建VSM的?

我理解了 VSM、TFIDF 和余弦相似度的概念,但是,在阅读 lucene 网站后,我仍然对 lucene 如何构建 VSM 并计算每个查询的相似度感到困惑。

据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。当我尝试从一组文档构建 VSM 时,这个工具花了很长时间http://sourceforge.net/projects/wvtool/ 这与编码没有真正的关系,因为直观地构建大数据的 VSM 矩阵是耗时,但 lucene 似乎并非如此。

此外,使用预构建的 VSM,找到最相似的文档,这基本上是计算两个文档之间的相似度或查询与文档之间的相似度,通常很耗时(假设有数百万个文档,因为必须计算与其他人的相似度),但 lucene 似乎它真的很快。我想这也与它如何在内部构建 VSM 有关。如果可能,有人也可以解释一下吗?

所以请帮助我理解这里的两点:1. lucene 如何如此快速地构建 VSM,可用于计算相似度。2.为什么百万文档之间的lucene相似度计算这么快?

如果给出一个真实的例子,我将不胜感激。谢谢

lucene indexing similarity data-mining tf-idf

1
推荐指数
1
解决办法
738
查看次数

it-idf 与 TfidfVectorizer 在日语文本上

我正在处理以多种语言编写的大量文档。我想根据文档的 tf-idf 分数计算文档之间的余弦距离。到目前为止,我有:

from sklearn.feature_extraction.text import TfidfVectorizer

# The documents are located in the same folder as the script
text_files = [r'doc1', r'doc2', r'doc3'] 
files = [open(f) for f in text_files]
documents = [f.read() for f in files]

vectorizer = TfidfVectorizer(ngram_range=(1,1))
tfidf = vectorizer.fit_transform(documents)
vocabulary = vectorizer.vocabulary_
Run Code Online (Sandbox Code Playgroud)

当三个文档doc1,doc2并且doc3包含英文文本时,该算法就像一个魅力vocabulary一样,确实包含来自不同文本主体的 unigrams。我也试过俄语,效果也很好。但是,当我尝试使用一些日语文本时,该算法不再按预期工作。

问题源于日语没有空格,因此 TfidfVectorizer 无法理解什么是单词,什么不是。例如,我的 unigram 词汇表中会有这样的内容:

??????????????????????????????9???????????????????????? ??

Whic 显然是一个句子而不是一个词。我怎么解决这个问题?

python parsing nlp tf-idf scikit-learn

1
推荐指数
1
解决办法
1561
查看次数

TF-IDF 变换后测试集和训练集中的特征数量不同导致的误差

我正在尝试创建一个 AI 来读取我的数据集并说明数据外部的输入是 1 还是 0

我的数据集具有定性数据列和布尔值列。这是其中的一个示例:

数据集

进口:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import re
import string
Run Code Online (Sandbox Code Playgroud)

打开并清理数据集:

saisei_data = saisei_data.dropna(how='any',axis=0) 
saisei_data = saisei_data.sample(frac=1)
X = saisei_data['Data']
y = saisei_data['Conscious']
saisei_data
Run Code Online (Sandbox Code Playgroud)

矢量化:

from sklearn.feature_extraction.text import TfidfVectorizer
vectorization = TfidfVectorizer()
xv_train = vectorization.fit_transform(X_train)
xv_test = vectorization.fit_transform(X_test)
Run Code Online (Sandbox Code Playgroud)

算法示例 - 逻辑回归:

LR = LogisticRegression()
LR.fit(xv_train,y_train)
pred_lr=LR.predict(xv_test) # Here is where …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tf-idf python-3.x scikit-learn

1
推荐指数
1
解决办法
1512
查看次数

计算字符串的tf-idf

我有2个文件doc1.txtdoc2.txt.这两份文件的内容如下:

 #doc1.txt
 very good, very bad, you are great

 #doc2.txt
 very bad, good restaurent, nice place to visit
Run Code Online (Sandbox Code Playgroud)

我想让我的语料库分开,,以便我的最终DocumentTermMatrix成为:

      terms
 docs       very good      very bad        you are great   good restaurent   nice place to visit
 doc1       tf-idf          tf-idf         tf-idf          0                    0
 doc2       0               tf-idf         0               tf-idf             tf-idf
Run Code Online (Sandbox Code Playgroud)

我知道,如何计算DocumentTermMatrix的各个单词(使用http://scikit-learn.org/stable/modules/feature_extraction.html),但不知道如何计算DocumentTermMatrixstringsPython编写的.

python tf-idf scikit-learn

0
推荐指数
1
解决办法
3219
查看次数

通常,TF-IDF何时会降低准确性?

我正在使用朴素贝叶斯模型将包含200000条评论的语料库分为正面评论和负面评论,并且我注意到执行TF-IDF实际上会使准确性(在对50000条评论的测试集进行测试时)降低了约2%。因此,我想知道TF-IDF是否对使用的数据或模型有任何潜在的假设,即是否存在因使用它而降低准确性的情况?

tf-idf sentiment-analysis text-classification naivebayes

0
推荐指数
1
解决办法
1769
查看次数

如何获得单词的TF-IDF分数?

我有一个大型语料库(大约40万个独特的句子)。我只想获取每个单词的TF-IDF分数。我试图通过扫描每个单词并计算频率来计算每个单词的分数,但是它花费的时间太长。

我用了 :

  X= tfidfVectorizer(corpus)
Run Code Online (Sandbox Code Playgroud)

来自sklearn,但它直接返回句子的向量表示。有什么方法可以获取语料库中每个单词的TF-IDF分数吗?

python nlp tf-idf tfidfvectorizer

0
推荐指数
1
解决办法
2896
查看次数