Gensim предварительно обученная модель сходства - PullRequest
0 голосов
/ 16 января 2019

Проблема:

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

model_2.most_similar(positive=['spacious'],    topn=10)

[('bedrooms', 0.6275501251220703),
 ('roomy', 0.6149100065231323),
 ('luxurious', 0.6105825901031494),
 ('rooms', 0.5935696363449097),
 ('furnished', 0.5897485613822937),
 ('cramped', 0.5892841219902039),
 ('courtyard', 0.5721820592880249),
 ('bathrooms', 0.5618442893028259),
 ('opulent', 0.5592212677001953),
 ('expansive', 0.555268406867981)]

Здесь я ожидаю что-то вроде пространства для ног, просторных функций автомобиля, упомянутых в корпусе домена. Как мы можем исключить векторы перчаток, имея похожие векторы?

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2019

В простом наборе общих слов-векторов может быть недостаточно информации для фильтрации соседей по области использования.

Вы можете попробовать использовать смешанное взвешивание: объединить сходства с 'spacious' и 'cars' и вернуть лучшие результаты в этой комбинации - и это может немного помочь.

Приближение к этому методу most_similar() может содержать более одного positive слова.Если вы уверены в некоторых основных источниках помех / совпадений, вы можете даже использовать negative примеров слов, аналогично тому, как word2vec находит подходящие ответы для аналогий (хотя это может также подавлять полезные результаты, которые на законных основаниях связаны с обоимидомены, как 'roomy').Например:

candidates = vec_model.most_similar(positive=['spacious', 'car'], 
                                    negative=['house'])

(Вместо использования отдельных слов, таких как «машина» или «дом», вы также можете попробовать использовать векторы, объединенные из множества слов, определяющих домен.)

НоРезкое различие звучит как исследовательский проект, а не что-то легко возможное с готовыми библиотеками / векторами - и может потребовать более сложных подходов и наборов данных.

Вы также можете попробовать использовать набор векторов, обученных только на наборе данных текста из интересующей области - таким образом, обеспечивая словарный запас и смысл слов в этой области.

0 голосов
/ 16 января 2019

Вы не можете исключить слова из уже обученной модели. Я не знаю, в какой среде вы работаете, но я дам вам примеры в Keras, так как понять намерения просто.

То, что вы могли бы сделать, это использовать слой Embedding, заполнить его «знаниями» GloVe, а затем возобновить обучение с вашим корпусом, чтобы слой выучил слова и соответствовал им для вашей конкретной области. Подробнее об этом можно прочитать в блоге Keras

...