Gensim - как бороться с модельным словом :: tag - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь загрузить предварительно обученную модель word2vec, используя gensim.Хотя модель помечена, поэтому каждое слово имеет тег, который сообщает, какую часть речи представляет это слово.

Например:

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 ().

1 Ответ

0 голосов
/ 18 июня 2018

Как указано в ваших образцах данных, вы должны дать словам часть речевого тега, прежде чем использовать их.Из README (opis.txt), включенного в ваши векторы:

Tzn że w samym modelu znajdują się słowa zapisane w następujący sposób:
    lemmat::pos np. pszczoła::noun

Google переведено:

That is, in the model itself there are words written in the following way:
    lemma :: pos eg. bee :: noun

README также предоставляет список допустимых частей речи.

Поскольку векторы слов были обучены таким образом, для слова без части речи нет действительного вектора.

Если по какой-то причине вам нужен вектор без части речи, вы можете перебрать все возможные части речи и взять среднее значение векторов, например:

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

При этомЯ подозреваю, что получающиеся векторы могли иметь проблемы.Лучшим вариантом является поиск предварительно обученных векторов, которые не используют часть речи, таких как те, которые поставляются с Fasttext .

...