使用word2vec模型迭代获取标签
前言
整体索引在此 :书蕴——基于书评的人工智能推荐系统
之前把书评预处理并将每本书训练出了word2vec模型,本篇博客针对如何提取书籍的标签具体展开描述。
思路
索引篇也提到了,主要是通过word2vec模型,找出前a的高频词放入new_word_set,然后计算new_word_set中所有词距离最近的前5个词,并把这5个词也加入new_word_set中,重复迭代获取标签。其中的数字可以修改,以下列出不同参数的不同效果。具体步骤与伪码以及源码如下:
步骤
- 读取某本书的word2vec模型
- 该模型下vocabulary取频率最高的前3个单词放入到new_word_set中
- 使用该书的word2vec模型,找到new_word_set集合中每一个词距离最近的5个词,将找到的词放入temp_word_set和word_set集合中
- 清空new_word_set,将temp_word_set中所有的词放入new_word_set,清空temp_word_set
- 重复步骤3,4,重复迭代3次(或者是迭代到词的数量为某一个值时)。
伪码
def 提取标签(模型路径, new_word_set):
for i in range(3):
for word in new_word_set:
获取和word距离最近的前5个词
将这5个词加入temp_word_set
word_set= word_set并集temp_word_set
new_word_set清空
new_word_set的内容更新为temp_word_set的内容
temp_word_set清空
返回word_set集合
源码
因为我把迭代获取标签和计算书籍的距离放在一个py文件里,所以这里只贴提取标签的代码。
这个代码很多参数需要重新调整,才能获得比较好的效果。
下一篇会结合整体的代码结合参数调整,对比效果综合总结一下。
def extract_tag_set(model_name, new_word_set):
word2vec_base = '书评\\word2vec\\model\\'
model = Word2Vec.load(word2vec_base + model_name) # type: Word2Vec
word_set = set() # 结果集
# new_word_set = {"阿米尔"} # 新词集
temp_word_set = set() # 关联词集
for i in range(3):
for word in new_word_set:
top5