TfidfVectorizer 和 word2vec

一、TfidfVectorizer

简单使用例子,可以统计子变量的频次类特征

from sklearn.feature_extraction.text import TfidfVectorizer 

text_list = ['aaa,bbb,ccc,aaa',
            'bbb,aaa,aaa,ccc'] 

vectorizer = TfidfVectorizer(stop_words=[',', ':', ' ', '.', '-'], max_features=500)

X = vectorizer.fit_transform(text_list)

print(X.toarray())
print(X)
[[0.81649658 0.40824829 0.40824829]
 [0.81649658 0.40824829 0.40824829]]
  (0, 2)	0.4082482904638631
  (0, 1)	0.4082482904638631
  (0, 0)	0.8164965809277261
  (1, 2)	0.4082482904638631
  (1, 1)	0.4082482904638631
  (1, 0)	0.8164965809277261

两行输出结果一致,说明tfidf只统计每个词的频特征,而不需要考虑出现的先后顺序,具体的调用可参考:
https://blog.csdn.net/weixin_46277779/article/details/128495040?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-128495040-blog-111900834.235%5Ev27%5Epc_relevant_t0_download&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-128495040-blog-111900834.235%5Ev27%5Epc_relevant_t0_download&utm_relevant_index=6

from sklearn.feature_extraction.text import TfidfVectorizer

# 定义一组文本
text_list = ['adfdsf,fdafc,fdaec,adfdsf']
import scipy.sparse as sp

# 创建TfidfVectorizer对象
# vectorizer = TfidfVectorizer(stop_words=[',', ':', ' ', '.', '-'],max_features=1000)
vectorizer = TfidfVectorizer(stop_words=[',', ':', ' ', '.', '-'],max_features=1000)

# 对文本进行特征提取
tfidf = vectorizer.fit_transform(text_list)

# 输出特征矩阵
print(tfidf.toarray())
[[0.81649658 0.40824829 0.40824829]]

# def svd(x, k=100):
#     U, S, V = sp.linalg.svds(x, k=k)
#     return U * S
# print(svd(tfidf, k=1))

TfidfVectorizer是scikit-learn库中的一种文本特征提取方法,它可以将文本转换为TF-IDF特征向量表示。在使用TfidfVectorizer时,可以通过stop_words参数来指定停用词,停用词是指在文本中频率很高但是无实际意义的单词,如“the”、“a”、“in”等。

停用词列表可以是一个字符串,如英文停用词列表可以使用NLTK库中提供的停用词:

from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords

加载英文停用词

stop_words = stopwords.words(‘english’)

定义TfidfVectorizer

vectorizer = TfidfVectorizer(stop_words=stop_words)

使用TfidfVectorizer

X = vectorizer.fit_transform(corpus)
也可以是一个列表,如:

stop_words = [‘a’, ‘an’, ‘the’, ‘in’, ‘on’, ‘at’, ‘to’, ‘of’, ‘for’, ‘by’, ‘with’, ‘and’, ‘or’, ‘but’]
vectorizer = TfidfVectorizer(stop_words=stop_words)
X = vectorizer.fit_transform(corpus)
在中文文本中,常见的停用词包括“的”、“了”、“在”、“是”等,可以根据需要自行定义停用词列表。

二、word2vec

1、简介
​ word2vec是Google研究团队里的Tomas Mikolov等人于2013年的《Distributed Representations ofWords and Phrases and their Compositionality》以及后续的《Efficient Estimation of Word Representations in Vector Space》两篇文章中提出的一种高效训练词向量的模型,基本出发点和Distributed representation类似:上下文相似的两个词,它们的词向量也应该相似,比如香蕉和梨在句子中可能经常出现在相同的上下文中,因此这两个词的表示向量应该就比较相似。
​ word2vec在 2018 年之前非常流行,但是随着 BERT、GPT2.0 等方法的出现,这种方式已经不算效果最好的方法了。

2、word2vec的基本思想:

句子之中相近的词之间是有联系的,比如今天后面经常出现上午、下午。所以它的基本思想就是用词来预测词。(准确的说,word2vec仍然是一种编码方式,将一个个的词给编码成向量,但是被他编码而成的向量并不是随便生成的,而是能够体现这些单词之间的关系(如相似性等))

from gensim.models import Word2Vec

# 准备语料库
# sentences = [["I", "love", "nlp"], ["I", "will", "learn", "nlp", "in", "future"]]
sentences =[['aaa','ccc','bbb','ddd'], # 'aaa','bbb','ccc','aaa'
            ['aaa','ccc','bbb','ddd']]

# 训练模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# 获取单词向量
word_vectors = model.wv
print(word_vectors)
# 获取某个单词的向量
vector = word_vectors['aaa']
print(vector)
# 获取与某个单词相似的词汇
similar_words = word_vectors.most_similar('aaa')
print(similar_words)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值