Что означает матрица, которую возвращает TfidVectorizer.transform (['word1 word2 word3']), и как она рассчитывает ее - PullRequest
0 голосов
/ 09 мая 2019

Чтобы получить tfidf maxtrix, я обучил 50000 документов с помощью sklearn.feature_extraction.text.TfidfVectorizer,

from sklearn.feature_extraction.text import TfidfVectorizer

vec = TfidfVectorizer(stop_words=stop_words_file_list,smooth_idf=True)
crops_vect = vec.fit_transform(crops).toarray()

Я знаю, что строка crop_vect - это каждый документ, а столбец - это слово, извлеченное извесь корпус, такой как crop_vect [document_id1], представляет вектор, состоящий из tdidf, обученного корпусом.У меня вопрос, что означает vec.transform (['America strong']. Toarray ():

np.where(vec.transform(['america strong']).toarray())
>>>(array([0, 0]), array([112609, 195997]))

[i for i in vec.transform(['america strong']).toarray()[0] if i != 0]
>>>[0.675671442580281, 0.7372028904456914]

[i for i in vec.transform(['strong']).toarray()[0] if i != 0]
>>>[1]

Я посмотрел на вектор слова "сильный" в корпусе

np.array([i for i in crops_vect.T[195997].toarray()[0] ])
>>>array([0., 0., 0., ..., 0., 0., 0.])
np.where(np.array([i for i in crops_vect.T[195997].toarray()[0] ]))
>>>array([   20,   239,   250,   272,   303,   786,   797,   836,   924,
         1202,  1218,  1613,  1645,  1651,  1662,  1670,  1673,  1688,
         1691,  1697,  1721,  1728,  1766,  1780,  1849,  1935,  1975,
         1988,  1999,  2017,  2018,  2199,  2344,  2354,  2721,  2752,
         2775,  2785,  2788,  2809,  2818,  2826,  2830,  2841,  2844,
         .....]

в чем заключается мой вопрос: 1) я знал vec.transform (['strong']). Toarray ()! = Crop_vect.T [195997] .toarray () и что означает vec.transform (['strong ']). toarray ()

2) что представляет собой vec.transform ([' word1 ',' word2 ']), эквивалентно ли это добавлению нового документа [' word1 ',' word2 '] к ранее обученной матрице tfidf, а затем вычислить новую матрицу tdidf нового документа?

3) vec.transform (['word1', 'word2']), Как он вычисляет ее внутренне

спасибо

1 Ответ

0 голосов
/ 13 мая 2019

TfidfVectorizer (stop_words = stop_words_file_list, smooth_idf = True), поэтому вычислительная формула idf выглядит следующим образом:

idf(t) = log [ n / df(t) ] + 1 

vec.transform (['word1', 'word2']) - это двухэлементная векторная вертикальная связь;vec.transform (['word1 word2']) - это документ, состоящий из двух слов "word1 word2", вычисляющий df и id1 для word1 в обученных документах, кадрирует calc, df и idf, наконец, нормализует v1 / sqrt (v1 2 + v2 2), v2 / sqrt (v1 2 + v2 2)

...