преобразование предложения во встраивающее представление

Если у меня есть предложение, например: «убирайся отсюда», и я хочу использовать word2vec Embed. чтобы представить это.. Я нашел три разных способа сделать это:

1- для каждого слова мы вычисляем AVG его вектора вложения, поэтому каждое слово заменяется одним значением.

2- как в 1, но с использованием стандартного отклонения значений вектора вложения.

3- или добавив файл Embed. вектор как он есть. Итак, если я использую вектор встраивания длиной 300... для приведенного выше примера, у меня будет в финале вектор длиной (300 * 4 слова) 1200 в качестве окончательного вектора для представления предложения.

Какой из них наиболее подходит .. ? в частности, для приложений сходства предложений ..


person user_007    schedule 04.04.2018    source источник


Ответы (1)


То, как вы описываете вариант (1), звучит так, будто каждое слово становится одним числом. Это не сработает.

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

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

Я никогда не видел, чтобы ваш вариант (2) использовался, и не совсем понимаю, что вы имеете в виду или как он может работать.

Ваш вариант (3) лучше описать как «объединение векторов слов». Он дает векторы разного размера в зависимости от количества слов в предложении. Небольшие различия в размещении слов, такие как сравнение «убирайся отсюда» и «убирайся отсюда», приведут к очень разным векторам, которые обычные методы сравнения векторов (например, косинусное сходство) не обнаружат как «близкие». вообще. Так что это не имеет смысла, и я не видел, чтобы это использовалось.

Таким образом, только ваш вариант (1), правильно реализованный для (взвешенных) средних векторов слов, является хорошей основой для сходства предложений.

Но это все еще довольно просто, и есть много других способов сравнить предложения с использованием текстовых векторов. Здесь только несколько:

Один алгоритм, тесно связанный с самим word2vec, называется «Векторы абзаца» и часто называется Doc2Vec. Он использует процесс, очень похожий на word2vec, для обучения векторов для полных диапазонов текста (будь то фразы, предложения, абзацы или документы), которые работают как «плавающие слова идентификатора документа» по всему тексту. Иногда он дает преимущество по сравнению с простым усреднением векторов слов, а в некоторых режимах может создавать как вектора документов, так и векторы слов, которые также сопоставимы друг с другом.

Если вас интересует не просто попарное сходство предложений, а какая-то задача последующей классификации, то в усовершенствовании word2vec Facebook FastText есть режим классификации, в котором слова-векторы обучаются не только предсказывать соседние слова, но и быть хорошими. при прогнозировании известных текстовых классов, когда они просто складываются/усредняются вместе. (Векторы текста, построенные из таких векторов классификации, также могут иметь сходство, в зависимости от того, насколько хорошо обучающие классы фиксируют заметные контрасты между текстами.)

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

person gojomo    schedule 04.04.2018
comment
Чтобы найти сходство между двумя текстами, можем ли мы также найти сходство между n x m словами (n и m — количество слов в каждом тексте), а затем усреднить его (например, разделить сумму всех оценок на n*m)? - person John Strood; 10.10.2018
comment
Вы можете попробовать что угодно! Работает ли это или работает лучше, чем более простые подходы, необходимо проверить на каком-то реальном корпусе/задаче. (Как описано, я подозреваю, что то, что вы предлагаете, даст результаты, очень похожие на сравнение среднего значения m слов со средним значением n слов, но потребует больше вычислений. Таким образом, это может работать, но в нем преобладают более простые подходы, если не уточнять.) - person gojomo; 10.10.2018