自然语言处理--人工计算主题向量

假设有一篇特定文档的 TF-IDF 向量,我们想将其转换为主题向量。设想一下每个词对文档的主题的贡献度有多大。
假设我们正在处理一些有关纽约中央公园(NYC)中宠物的句子。我们创建 3 个主题:一个与宠物有关,一个与动物有关,另一个则与城市有关。我们可以把这些主题分别称为“petness” “animalness”和“cityness”。因此,“petness”主题会给“cat”和“dog”这样的词打高分,但很可能会忽略“NYC”和“apple”这样的词。而“cityness”这个主题则会忽略“cat”和“dog”这样的词,但可能会给“apple”一些分值,因为有“Big Apple”联盟。

看代码:

import numpy as np

topic = {
    
    }
# 这个 tfidf 向量只是一个随机的例子,就好像
# 它是为一篇用这些词按随机比例构成的文档计算出来的
tfidf = dict(list(zip('cat dog apple lion NYC love'.split(), np.random.rand(6))))
print(tfidf)
# 人工设定的权重(0.3, 0.3, 0, 0, -0.2, 0.2)
# 乘以上面虚构的 tfidf 值,从而为虚构的随机文档创建主题向量。
topic['petness'] = (.3 * tfidf['cat'] + .3 * tfidf['dog'] + 0 * tfidf['apple'] + 0 * tfidf['lion'] - .2 * tfidf['NYC'] + .2 * tfidf['love'])
topic['animalness'] = (.1 * tfidf['cat'] + .1 * tfidf['dog'] - .1 * tfidf['apple'] + .5 * tfidf['lion'] + .1 * tfidf['NYC'] - .1 * tfidf['love'])
topic['cityness'] = ( 0 * tfidf['cat'] - .1 * tfidf['dog'] + .2 * tfidf['apple'] - .1 * tfidf['lion'] + .5 * tfidf['NYC'] + .1 * tfidf['love'])
print(topic)

# 词和主题之间的关系可以翻转。3 个主题向量组
# 成的 3 × 6 矩阵可以转置,从而为词汇表中的每个词生成主题权重。
# 计算词的主题权重
word_vector = {
    
    }
word_vector['cat'] = .3*topic['petness'] + .1*topic['animalness'] +  0*topic['cityness']
word_vector['dog'] = .3*topic['petness'] +  .1*topic['animalness'] -  .1*topic['cityness']
word_vector['apple']= 0*topic['petness'] -  .1*topic['animalness'] +  .2*topic['cityness']
word_vector['lion'] = 0*topic['petness'] +  .5*topic['animalness'] -  .1*topic['cityness']
word_vector['NYC'] = -.2*topic['petness'] +  .1*topic['animalness'] + .5*topic['cityness']
word_vector['love'] = .2*topic['petness'] -  .1*topic['animalness'] +  .1*topic['cityness']
print(word_vector)

猜你喜欢

转载自blog.csdn.net/fgg1234567890/article/details/112437205