繁体   English   中英

带word2vec的文本的多标签

[英]Multilabel for text with word2vec

我是文本分类的新手,并在这里找到了这个简单的Looking教程,这似乎是进一步开发的一个很好的开始:

https://asinayev.github.io/choosing-multiple-labels-for-text-part-2-word2vec.html

我在该网页上的代码中添加了以下导入:

import regex as re
import stopwords
import string
import scipy
import gensim.models.keyedvectors as word2vec 

我将原始代码从以下位置更改:

 from gensim.models import Word2Vec

至:

 import gensim.models.keyedvectors as word2vec

并根据gensim中的最新更改加载模型,其中包括:

 model = word2vec.KeyedVectors.load_word2vec_format('asd.bin.gz')

要测试模型是否正确加载,我使用(它确实):

print(model.most_similar('teacher'))

这是复制和粘贴部分,以错误结尾:

def clean(sentence, model):
regex = re.compile('[%s]' % re.escape(string.punctuation))
tokens = str.split(sentence)
cleans = []
for t in tokens:
    if t in model: 
        cleans.append(t)
    elif t.lower() in model: 
        cleans.append(t.lower())
    elif regex.sub('_', t) in model:
        cleans.append(regex.sub('_', t))
    elif len(str.split(regex.sub(' ', t))) > 1:
        for token in str.split(regex.sub(' ', t)):
            if clean(token): cleans.append(clean(token)[0])
cleans = [w for w in cleans if w not in stopwords.words("english")]
return cleans

def model_similarity (model, list1, list2, l1neg=[], l2neg=[]):
list1sum = sum([model[l] for l in list1])
list2sum = sum([model[l] for l in list2])
if l1neg: list1sum -= sum([model[l] for l in l1neg])
if l2neg: list1sum -= sum([model[l] for l in l2neg])
return 1-scipy.spatial.distance.cosine(list1sum,list2sum)

要测试这些功能是否有效,我使用以下方法进行测试:

model_similarity(clean('king woman'),clean('queen'), l1neg=['man'])
TypeError: clean() missing 1 required positional argument: 'model'

老实说,我不确定位置参数是否正确,因此很难解决它。

谢谢你的努力!

其他信息:我在Windows 10上使用Python 3.6.5

编辑:解决了此问题:

该函数的正确调用是:

 model_similarity(model, clean('king woman', model), clean('queen', model))
 0.6532526016235352

请注意您编写的model_similarity()的定义:

def model_similarity (model, list1, list2, l1neg=[], l2neg=[]):

python希望前三个参数是模型,list1和list2。 之所以将它们称为位置参数,是因为您在定义中列出了它们,而没有名称后跟等号(就像对l1neg和l2neg所做的那样)。 好像您忘记了包含模型。 在此处查看位置参数与关键字参数: https : //docs.python.org/2/glossary.html

看起来您也忘记了在调用clean()的过程中包括该模型。

因此,呼叫看起来像:

def model_similarity (model, clean('king woman', model), clean('queen', model) l1neg=[], l2neg=[]):

另外,请确保在所有函数定义之后缩进代码。 看起来可能还有其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM