tfidf特征和word2vec特征

做特征,生成一个新的训练集

힘차게 날개를 펴고 하늘끝 까지 날아 보자

w2v = Word2Vec(sentences, vector_size = 32, window = 3, min_count=5, sg = 0, hs = 1, seed = 2022)
  • hs: 0指negative sampling(负采样); 1指hierarchical softmax
  • sg: 0指CBOW;1指skip-gram

Word2Vec的wv属性是一个类,可以理解成词典,返回单词的词向量。如 w2v.wv['word']

array([-2.8439574 ,  0.37443072, -1.6063052 , -0.27896085, -0.8155813 ,
       -0.47845536, -3.3467898 , -1.196234  , -0.02756584, -0.84733725,
       -0.10579707,  0.05163246, -0.7186295 ,  2.228457  , -0.43014076,
       -0.0309663 ,  1.1990297 ,  1.2765676 , -0.10919553,  3.130947  ,
       -0.53630906,  0.1699601 , -0.5888935 ,  1.9249583 ,  1.736609  ,
        1.2155844 ,  1.204229  ,  0.85753125,  0.61615366, -0.19909358,
       -0.3958432 , -0.27853402], dtype=float32)

返回句向量的平均值作为特征

def get_w2v_mean(sentence):

    emb_matrix = list()
    vec = list()

    for w in sentence.split():
        if w in w2v.wv:
            vec.append(w2v.wv[w])
    if len(vec) > 0:
        emb_matrix.append(np.mean(vec, axis = 0))
    else:
        emb_matrix.append([0] * 32)
    return emb_matrix

tfidf指逆向文本频率。一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章,相应的tfidf越大。tfidf越大,说明该词越能代表该文章。

T f w = 文 章 中 w 出 现 次 数 文 章 总 次 数 Tf_{w} = \frac{文章中w出现次数}{文章总次数}T f w ​=文章总次数文章中w 出现次数​
I D F w = 语 料 库 中 文 档 总 数 包 含 w 的 文 档 数 + 1 IDF_{w} = \frac{语料库中文档总数}{包含w的文档数+1}I D F w ​=包含w 的文档数+1 语料库中文档总数​
t f i d f = T f ∗ I D F tfidf = Tf * IDF t f i d f =T f ∗I D F

TfidfVectorizer

根据词频进行的另一种词向量化手段,包含在 sklearn.feature_extraction.text下。例如三篇文档d1, d2,d3,含五个词w1,w2,w3,w4,w5

w1w2w3w4w5d1d2d3

经过TfidfVectorizer操作生成上面表格形式的VSM(Vector Space Matrix)。可以通过 tv_transformed.toarray()查看生成的向量空间矩阵; tv.get_features_name()查看选择进行向量化的特征名。

模型参数

X = list(tmp['text'].values)
tfv = TfidfVectorizer(ngram_range=(1, 3), min_df=5, max_features=50000)
  • ngram_range: 决定一个关键词可以由几个词组成。例如,(1, 3)指可以生成’correctable’, ‘correctable ecc’, ‘correctable ecc asserted’;如果是(1, 2)只能生成’correctable’, ‘correctable ecc’;如果是(1, 1)只能生成’correctable’
  • min_df: min_df = 5表示”忽略少于5个文档中出现的术语”.

  • max_features: 对所有关键词的词频进行排序,注意不是所有词的词频,只取前max_feaures个作为关键词集(决定向量空间的列数)

X = list(tmp['text'].values)
tfv = TfidfVectorizer(ngram_range=(1, 3), min_df=5, max_features=50000)

tfv.fit(X)
X_tfidf = tfv.transform(X)
svd = TruncatedSVD(n_components=16)
svd.fit(X_tfidf)

def get_tfidf_svd(sentence, n_components=16):
    X_tfidf = tfv.transform(sentence)
    X_svd = svd.transform(X_tfidf)
    return np.mean(X_svd, axis = 0)

Original: https://blog.csdn.net/m0_56945333/article/details/123431799
Author: KimJuneJune
Title: tfidf特征和word2vec特征

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547865/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球