слово не вошло в словарный запас после обучения модели gensim word2vec, почему? - PullRequest
1 голос
/ 14 июня 2019

Итак, я хочу использовать вложения слов, чтобы получить несколько удобных значений сходства Денди-косинуса.После создания модели и проверки на сходство слова «не» (которое содержится в данных, которые я даю модели), оно говорит мне, что этого слова нет в словаре.

Почему оно не может найтисходство для слова 'not'?

данные описания выглядят следующим образом:
[['not', 'only', 'do', 'angles', 'make', 'joint',«сильнее», «они», «также», «обеспечивают», «больше», «последовательно», «прямо», «углы», «симпсон», «сильный», «предложения», «а», «широкий»',' разнообразие ',' из ',' углы ',' in ',' различные ',' размеры ',' и ',' толщины ',' до ',' ручка ',' легкая работа ',' рабочие места ',«или», «проекты», «где», «a», «структурный», «соединение», «есть», «необходимо», «некоторые», «могут», «быть», «согнуты», «перекошены»',' to ',' match ',' the ',' project ',' for ',' outdoor ',' projects ',' или ',' те ',' where ',' влажность ',' есть ',«настоящее», «использование», «наш», «zmax», «оцинкованный», «соединители», «которые», «обеспечивают», «дополнительные», «сопротивление», «против», «коррозия», «внешний вид»',' for ',' a ',' z ',' at ',' the ',' end ',' of ',' the ',' model ',' numberversatile »,« разъем »,« для »,« различные »,« соединения »,« и »,« дом »,« ремонт »,« projectsstronger »,« than »,« angled »,« nailing »,« or », "винт", "крепление", "единственная помощь", "обеспечить", "соединения", "являются", "последовательно", "прямо", "и", "сильные размеры", "в", "х", "в ',' x ',' inmade ',' from ',' gauge ',' steelgalvanized ',' for ',' extra ','rosion','installinstall ',' with ',' d ',' common ', 'nails', 'или', 'x', 'in', 'strongdrive', 'sd', 'screw']]

Обратите внимание, что я уже пытался представить данные в виде отдельных предложенийвместо отдельных слов.

def word_vec_sim_sum(row):
    description = row.product_description.split()
    description_embedding = gensim.models.Word2Vec([description], size=150,
        window=10,
        min_count=2,
        workers=10,
        iter=10)       
    print(description_embedding.wv.most_similar(positive="not"))

1 Ответ

3 голосов
/ 14 июня 2019

Вам нужно понизить min_count.

Из документации : min_count (int, необязательно) - игнорирует все слова с общей частотой ниже этой. В предоставленных вами данных "not" появляется один раз, поэтому игнорируется.При установке min_count на 1 это работает.

import gensim as gensim

data = [['not', 'only', 'do', 'angles', 'make', 'joints', 'stronger', 'they', 'also', 'provide', 'more', 'consistent',
         'straight', 'corners', 'simpson', 'strongtie', 'offers', 'a', 'wide', 'variety', 'of', 'angles', 'in',
         'various', 'sizes', 'and', 'thicknesses', 'to', 'handle', 'lightduty', 'jobs', 'or', 'projects', 'where', 'a',
         'structural', 'connection', 'is', 'needed', 'some', 'can', 'be', 'bent', 'skewed', 'to', 'match', 'the',
         'project', 'for', 'outdoor', 'projects', 'or', 'those', 'where', 'moisture', 'is', 'present', 'use', 'our',
         'zmax', 'zinccoated', 'connectors', 'which', 'provide', 'extra', 'resistance', 'against', 'corrosion', 'look',
         'for', 'a', 'z', 'at', 'the', 'end', 'of', 'the', 'model', 'numberversatile', 'connector', 'for', 'various',
         'connections', 'and', 'home', 'repair', 'projectsstronger', 'than', 'angled', 'nailing', 'or', 'screw',
         'fastening', 'alonehelp', 'ensure', 'joints', 'are', 'consistently', 'straight', 'and', 'strongdimensions',
         'in', 'x', 'in', 'x', 'inmade', 'from', 'gauge', 'steelgalvanized', 'for', 'extra', 'corrosion',
         'resistanceinstall', 'with', 'd', 'common', 'nails', 'or', 'x', 'in', 'strongdrive', 'sd', 'screws']]


def word_vec_sim_sum(row):
    description = row
    description_embedding = gensim.models.Word2Vec([description], size=150,
                                                   window=10,
                                                   min_count=1,
                                                   workers=10,
                                                   iter=10)
    print(description_embedding.wv.most_similar(positive="not"))


word_vec_sim_sum(data[0])

А на выходе:

[('do', 0.21456070244312286), ('our', 0.1713767945766449), ('can', 0.1561305820941925), ('repair', 0.14236785471439362), ('screw', 0.1322808712720871), ('offers', 0.13223429024219513), ('project', 0.11764446645975113), ('against', 0.08542445302009583), ('various', 0.08226475119590759), ('use', 0.08193354308605194)]
...