word2ve c размер окна на границах предложений - PullRequest
0 голосов
/ 23 января 2020

Я использую word2ve c (и doc2ve c), чтобы получить вложения для предложений, но я хочу полностью игнорировать порядок слов. В настоящее время я использую gensim, но при необходимости могу использовать другие пакеты.

Например, мой текст выглядит так:

[
['apple', 'banana','carrot','dates', 'elderberry', ..., 'zucchini'],
['aluminium', 'brass','copper', ..., 'zinc'],
...
]

Я намеренно хочу, чтобы слово «яблоко» рассматривалось как близкое для «цуккини», как это для «банана», поэтому я установил размер окна очень большое число, скажем 1000. Я знаю 2 проблемы, которые могут возникнуть с этим.

Проблема 1: Окно может свернуть в начале предложения, создавая следующие обучающие пары: ('apple', ('banana')), ('apple', ('banana', 'carrot')), ('apple', ('banana', 'carrot', 'date')) до того, как оно в итоге достигнет правильного ('apple', ('banana','carrot', ..., 'zucchini')). Казалось бы, это делает эффект «яблока» ближе к «банану», чем «цуккини», поскольку их гораздо больше пар, содержащих «яблоко» и «банан», чем пар, содержащих «яблоко» и «цуккини».

Проблема 2: я слышал, что выборки пар обратно пропорциональны расстоянию от целевого слова до слова контекста. Это также вызывает проблему, из-за которой соседние слова кажутся более связанными, чем мне бы хотелось.

Есть ли способ обойти проблемы 1 и 2? Должен ли я использовать cbow в отличие от sgns? Есть ли другие гиперпараметры, о которых мне следует знать? Как лучше всего go удалить / проигнорировать заказ в этом случае?

Спасибо

1 Ответ

1 голос
/ 23 января 2020

Я не уверен, что вы имеете в виду под "проблемой 1" - в обычной интерпретации параметра window алгоритма в стиле word2ve c не существует "перекручивания" или "переноса". Так что я бы не беспокоился об этом.

Что касается «Задачи 2», этот фактор может быть практически пренебрежимо малым путем выбора гигантского значения window - скажем, например, значения, в миллион раз превышающего ваше самое большое предложение. Тогда любая разница в том, как алгоритм обрабатывает ближайшее слово и второе-ближайшее слово, исчезающе мала.

(Точнее говоря, способ реализации gensim, который копирует в этом отношении оригинальный Google word2vec.c), обеспечивает своего рода взвешивание на основе расстояния на самом деле с помощью случайных динамических чисел c фактического window используется. То есть, для каждого посещения во время обучения каждому целевому слову эффективное window действительно используемое - это какое-то случайное число от 1 до указанного пользователем window. При эффективном использовании меньшего windows большую часть времени, более близкие слова имеют большее влияние - просто без затрат на выполнение другого масштабирования для слов всего окна каждый раз, но в вашем случае с гигантским значением window будет очень редко, когда эффективное окно когда-либо будет меньше чем ваши реальные предложения. Таким образом, каждое слово будет включено, в равной степени, почти каждый раз.)

Все эти соображения будут одинаковыми при использовании режима SG или CBOW.

Я считаю, что в миллион раз больше window будет достаточно для ваших нужд, потому что, если по какой-то причине это не так, другим способом по существу отменить любые эффекты близости может быть обеспечение вашего корпуса. элементы отдельных порядков слов перетасовываются между каждый раз, когда к ним обращаются как к данным обучения Это гарантирует, что любые преимущества близости будут смешаны равномерно по всем словам - особенно если каждое предложение тренируется много раз. (В достаточно большом корпусе, возможно, будет достаточно просто одноразового перестановки в каждом предложении. Затем, во всех примерах встречающихся слов, совпадения слов будут отбираться в правильных пропорциях даже с небольшими windows.)

Другие советы:

Если ваши тренировочные данные начинаются в некотором упорядоченном порядке, который объединяет слова / темы вместе, может быть полезно вместо этого перемешать их в случайном порядке. (Лучше, если все данные чередуются, а не представлены во многих похожих примерах.)

Когда ваши данные не являются настоящими данными на естественном языке (с их обычным распределением и значимостью порядка) Возможно, стоит поискать дальше от обычных значений по умолчанию, чтобы найти оптимальные метапараметры. Это касается negative, sample и особенно ns_exponent. (В одной статье предложено, что оптимальное ns_exponent для обучающих векторов для систем рекомендаций значительно отличается от обычного значения по умолчанию 0,75 для моделирования на естественном языке.)

...