我尝试使用gensim加载预训练的word2vec模型。尽管模型已被标记,但每个单词都有一个标记,用于表示该单词所代表的词性。
例如:
big::adj 0.041660 0.045049 -0.204449 0.102298 0.045326 -0.172079 0.197417 -0.012363 0.127003 0.040437 -0.003397 0.048288 0.072291 0.044205 -0.055407 -0.075357 -0.154024 0.021732 0.224021 -0.243452 -0.048776 -0.002823 0.110283 -0.052014 0.104335 -0.108122 -0.033678 -0.098096 -0.012307 0.086673 -0.028013 0.005308 -0.196080 0.002180 -0.004461 0.021646 -0.051721 -0.123485 -0.230521 0.106092 -0.206776 0.137945 0.020572 0.071123 0.042434 0.123633 -0.001925 -0.172347 -0.040973 0.135886 0.057297 -0.027319 0.066697 0.138673 -0.028331 -0.094053 -0.160371 0.158397 0.053368 -0.002126 -0.111501 0.030450 -0.054284 -0.004832 -0.065144 0.030546 -0.011896 -0.103835 -0.007947 0.120997 0.178889 -0.155029 -0.054059 -0.313675 0.061776 -0.060536 0.038848 -0.097532 -0.038358 -0.032634 0.108534 0.067584 0.044829 0.003414 0.028115 -0.010523 0.131776 0.071750 0.045095 0.046262 0.001212 -0.005994 -0.022401 -0.036971 -0.024755 0.096701 -0.026736 -0.029698 -0.107293 -0.038610
任何人都可以指出我,如何加载这样的模型,所以我可以要求模型['大']?现在,当我尝试KeyedVectors.load()时,它只是不起作用。
答案 0 :(得分:0)
如示例数据所示,您必须在使用前将单词作为词性标记。从您的向量中包含的自述文件(opis.txt
):
Tzn że w samym modelu znajdują się słowa zapisane w następujący sposób:
lemmat::pos np. pszczoła::noun
谷歌翻译:
That is, in the model itself there are words written in the following way:
lemma :: pos eg. bee :: noun
自述文件还提供了有效词性列表。
因为单词向量是以这种方式训练的,所以对于没有词性的单词没有有效的向量。
如果你想要一个没有词性的矢量由于某种原因,你可以遍历所有可能的词性并采用这样的矢量的平均值:
vectors = pretrained_vectors
word = 'bee'
parts_of_speech = ['noun', 'verb', etc...]
vec = zero_vector
pos_count = 0
for part in parts_of_speech:
key = word + '::' + part
if key in vectors:
vec += vectors[word + '::' + part]
pos_count += 1
vec = vec / pos_count
# if actually using code like this, use numpy and watch for zero division
那说我怀疑结果载体可能有问题。更好的选择是找到不使用词性的预训练矢量,例如those provided with Fasttext。