[英]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.