文本向量化(Word2Vec)自2013年被Google团队发明之后,就成了自然语言处理(NLP)的标配,只有将文本转化为向量之后,才能做进一步的探索。本文介绍使用Gensim中的Word2vec来实现文本向量化。
原理参考:https://zhuanlan.zhihu.com/p/120148300
代码示例
1、模型训练
from gensim.models import Word2Vec sentences = [ ['my', 'cat', 'sat', 'on', 'my', 'bed'], ['my', 'dog', 'sat', 'on', 'my', 'knees'], ['my', 'bird', 'was', 'shut', 'in', 'a', 'cage'], ] model = Word2Vec(sentences, min_count=1, vector_size=2) # 重要参数: # sentences: list或者可迭代的对象 # vector_size: 词向量维度,默认100 # window: 窗口大小,即词向量上下文最大距离,默认5 # min_count: 需要计算词向量的最小词频,默认5,小语料需要调整
2、模型保存和加载
# 保存模型 model.save('./w2v.m') # 加载模型 Word2Vec.load('./w2v.m') # 单独保存词向量 wv = model.wv wv.save("word2vec.wv") # 加载词向量 from gensim.models import KeyedVectors wv = KeyedVectors.load("word2vec.wv", mmap='r') vector = wv['cat']
3、重要属性
# 词向量矩阵 print(model.wv.vectors) # 查看所有词汇 print(model.wv.index_to_key) # 查看词汇对应索引 print(model.wv.key_to_index) # 查看所有词出现的次数 for word in model.wv.index_to_key: print(word, model.wv.get_vecattr(word, 'count'))
4、常用方法
# 根据词查词向量 print(model.wv['cat']) print(model.wv.get_vector('cat')) # word or index print(model.wv.get_vector(12)) # 查看某个词相近的词 print(model.wv.similar_by_word('cat')) # print(model.wv.similar_by_key(12)) # 根据向量查询相近的词 vec = model.wv.get_vector(12) print(model.wv.similar_by_key(vec)) # 根据给定的条件推断相似词 print(model.wv.most_similar(positive=['cat', 'dog'], negative=['bird'])) # 查看两个词相似度 print(model.wv.similarity('cat', 'dog')) # 给定上下文词汇作为输入,可以获得中心词汇的概率分布 print(model.predict_output_word(['cat', 'bed'], topn=10)) # 寻找离群词 print(model.wv.doesnt_match(['cat','dog', 'bed','man']))
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/314