我理解了 VSM、TFIDF 和余弦相似度的概念,但是,在阅读 lucene 网站后,我仍然对 lucene 如何构建 VSM 并计算每个查询的相似度感到困惑。
据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。当我尝试从一组文档构建 VSM 时,这个工具花了很长时间http://sourceforge.net/projects/wvtool/ 这与编码没有真正的关系,因为直观地构建大数据的 VSM 矩阵是耗时,但 lucene 似乎并非如此。
此外,使用预构建的 VSM,找到最相似的文档,这基本上是计算两个文档之间的相似度或查询与文档之间的相似度,通常很耗时(假设有数百万个文档,因为必须计算与其他人的相似度),但 lucene 似乎它真的很快。我想这也与它如何在内部构建 VSM 有关。如果可能,有人也可以解释一下吗?
所以请帮助我理解这里的两点:1. lucene 如何如此快速地构建 VSM,可用于计算相似度。2.为什么百万文档之间的lucene相似度计算这么快?
如果给出一个真实的例子,我将不胜感激。谢谢
我正在处理以多种语言编写的大量文档。我想根据文档的 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 显然是一个句子而不是一个词。我怎么解决这个问题?
我正在尝试创建一个 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) 我有2个文件doc1.txt和doc2.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),但不知道如何计算DocumentTermMatrix的stringsPython编写的.
我正在使用朴素贝叶斯模型将包含200000条评论的语料库分为正面评论和负面评论,并且我注意到执行TF-IDF实际上会使准确性(在对50000条评论的测试集进行测试时)降低了约2%。因此,我想知道TF-IDF是否对使用的数据或模型有任何潜在的假设,即是否存在因使用它而降低准确性的情况?
我有一个大型语料库(大约40万个独特的句子)。我只想获取每个单词的TF-IDF分数。我试图通过扫描每个单词并计算频率来计算每个单词的分数,但是它花费的时间太长。
我用了 :
X= tfidfVectorizer(corpus)
Run Code Online (Sandbox Code Playgroud)
来自sklearn,但它直接返回句子的向量表示。有什么方法可以获取语料库中每个单词的TF-IDF分数吗?
tf-idf ×6
python ×4
scikit-learn ×3
nlp ×2
data-mining ×1
indexing ×1
lucene ×1
naivebayes ×1
parsing ×1
python-3.x ×1
similarity ×1