Как получить вектор для предложения из word2vec токенов в предложении

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


person trialcritic    schedule 21.04.2015    source источник


Ответы (9)


Существуют разные методы получения векторов предложений:

  1. Doc2Vec: вы можете обучить свой набор данных с помощью Doc2Vec, а затем использовать векторы предложений.
  2. Среднее значение векторов Word2Vec. Вы можете просто взять среднее значение всех векторов слов в предложении. Этот средний вектор будет представлять ваш вектор предложений.
  3. Усреднение векторов Word2Vec с TF-IDF: это один из лучших подходов, который я рекомендую. Просто возьмите векторы слов и умножьте их на их оценки TF-IDF. Просто возьмите среднее значение, и оно будет представлять ваш вектор предложений.
person neel    schedule 31.07.2015
comment
Почему среднее против суммы? - person Fred; 19.02.2016
comment
Для обработки предложений переменной длины - person neel; 22.02.2016
comment
Вы берете средние значения w2v повторений N слов для предложения длины N; Я понимаю. Но почему среднее по сравнению, например, с сумма? (что также даст вам составное повторение для предложений переменной длины) - person Fred; 24.02.2016
comment
Не могли бы вы уточнить, а еще лучше, привести пример кода для варианта 3 - person Shlomi Schwartz; 25.09.2016
comment
Здесь я нашел пример 2-3 надбордрозд. github.io/blog/2016/05/20/ - person Ismael; 08.02.2017
comment
не уверен, зачем делать среднее значение каждого измерения, может быть, мы можем просто суммировать и получать аналогичные результаты. - person Argho Chatterjee; 08.12.2017
comment
Как вы обрабатываете разные размеры векторов при умножении в варианте 3? - person Philip Bergström; 11.12.2017
comment
@neel Есть ли разница или ваши предпочтения между методами 1 и 3? - person John Strood; 04.10.2018
comment
@JohnStrood Я пойду с первым - person neel; 05.10.2018
comment
Существуют ли какие-либо реализации этих методов для python? Например. в Генсиме? Я ищу, но я действительно не знаю, какие термины искать. - person Sip; 17.10.2018
comment
проблема с суммой в том, что длина предложения оставит очень сильный сигнал, и если вы хотите уловить суть сочетания слов, этот источник данных будет просто шумом. например, рассмотрите попытку сгруппировать предложения. очень короткие предложения, такие как быстро, будут иметь тенденцию быть далекими от длинных предложений, которые имеют то же значение быстро быстро быстро - person amann; 30.09.2020

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

Во-первых, вы можете просто усреднять векторы из word2vec. По словам Ле и Миколова, этот подход плохо работает для задач анализа тональности, потому что он "теряет порядок слов в так же, как это делают стандартные модели «мешок слов» и «не могут распознать многие сложные языковые явления, например, сарказм». С другой стороны, согласно Kenter et al. 2016, «простое усреднение словесных вложений всех слов в тексте оказалось надежной основой или функцией для множества задач», таких как задачи на сходство коротких текстов. Вариантом может быть взвешивание векторов слов с их TF-IDF, чтобы уменьшить влияние наиболее распространенных слов.

Более сложный подход, разработанный Socher et al., заключается в объединении векторов слов в порядке, заданном деревом синтаксического анализа. предложения, используя матрично-векторные операции. Этот метод работает для анализа настроений предложений, потому что он зависит от синтаксического анализа.

person Antoine Dusséaux    schedule 20.08.2016

Можно, но не от word2vec. Композиция векторов слов для получения представлений более высокого уровня для предложений (и далее для абзацев и документов) является действительно активной темой исследования. Для этого нет одного лучшего решения, это действительно зависит от того, к какой задаче вы хотите применить эти векторы. Вы можете попробовать конкатенацию, простое суммирование, поточечное умножение, свертку и т. д. Есть несколько публикаций по этому вопросу, из которых вы можете извлечь уроки, но в конечном итоге вам просто нужно поэкспериментировать и посмотреть, что подходит вам лучше всего.

person Claudiu    schedule 21.04.2015
comment
Я пытаюсь классифицировать документы, используя векторы токенов. Поскольку у меня слишком много токенов (200 000), я хотел сгенерировать векторы документов для классификации, это существенно уменьшит количество факторов (скажем, 500). Было интересно, возможно ли это. - person trialcritic; 21.04.2015
comment
Вы можете начать с этих: 1. Митчелл, 2008. Векторные модели семантической композиции. [ссылка](homepages.inf.ed.ac.uk/s0453356/composition. pdf ) 2. Blacoe, 2012. Сравнение векторных представлений для семантической композиции. [ссылка](aclweb.org/anthology/D12-1050) - person Claudiu; 21.04.2015
comment
3. Определение композиционности многословных выражений с использованием ближайших соседей в моделях векторного пространства (cl.cam.ac.uk/~dk427/papers/emnlp2013.pdf) 4. Предварительное устранение неоднозначности тензоров слов для построения векторов предложений cs.ox.ac.uk/files/5725/karts_sadr_emnlp.pdf - person Claudiu; 21.04.2015
comment
Спасибо за документы, ценю это - person trialcritic; 21.04.2015

Это зависит от использования:

1) Если вы хотите получить вектор предложения только для некоторых известных данных. Проверьте вектор абзаца в этих статьях:

Куок В. Ле и Томас Миколов. 2014. Распределенные представления приговоров и документов. Эпринт Архив, 4:1188–1196.

А. М. Дай, К. Олах и К. В. Ле. 2015. Встраивание документов с помощью векторов абзацев. Электронные отпечатки ArXiv, июль.

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

Вы можете ознакомиться с этой бумагой:

Стивен Ду и Си Чжан. 2016. Aicyber на SemEval-2016 Задача 4: Представление предложения на основе i-вектора. Материалы 10-го Международного семинара по семантической оценке (SemEval 2016), Сан-Диего, США

3) Исследователь также ищет выходные данные определенного слоя в сети RNN или LSTM, недавний пример:

http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195

4) Для gensim doc2vec многие исследователи не смогли получить хороших результатов, чтобы преодолеть эту проблему, следуя статье, использующей doc2vec на основе предварительно обученных векторов слов.

Джей Хан Лау и Тимоти Болдуин (2016). Эмпирическая оценка doc2vec с практическим пониманием создания встраивания документов. В материалах 1-го семинара по репрезентативному обучению для НЛП, 2016 г.

5) tweet2vec или sent2vec .

У Facebook есть проект SentEval для оценки качества векторов предложений.

https://github.com/facebookresearch/SentEval

6) Более подробная информация содержится в следующем документе:

Нейросетевые модели для идентификации парафраз, семантического текстового сходства, вывода на естественном языке и ответов на вопросы


А пока вы можете использовать «BERT»:

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

https://github.com/google-research/bert

А вот пример запуска bert как службы:

https://github.com/hanxiao/bert-as-service

person Steven Du    schedule 30.03.2016

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

Код для предложения2vec был опубликован Томасом Миколовым здесь. Предполагается, что первое слово строки является идентификатором предложения. Скомпилируйте код, используя

gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -funroll-loops

и запустите его с помощью

./word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1

ИЗМЕНИТЬ

В Gensim (разрабатываемая версия), похоже, есть метод определения векторов новых предложений. Ознакомьтесь с методом model.infer_vector(NewDocument) в https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py

person kampta    schedule 27.04.2015

Встраивания Google Universal Sentence Encoder — обновленное решение этой проблемы. Он не использует Word2vec, но в результате получается конкурирующее решение.

Вот через TFHub и Keras.

person Union find    schedule 11.08.2019

У меня были хорошие результаты от:

  1. Суммирование векторов слов (со взвешиванием tf-idf). Это игнорирует порядок слов, но для многих приложений этого достаточно (особенно для коротких документов).
  2. Быстрая отправка
person Zach    schedule 11.07.2016

Сеть глубокого усреднения (DAN) может обеспечивать встраивание предложений, в которых биграммы слов усредняются и передаются через глубокую нейронную сеть с прямой связью (DNN).

Обнаружено, что трансферное обучение с использованием встраивания предложений имеет тенденцию превосходить перенос на уровне слов, поскольку оно сохраняет семантические отношения.

Вам не нужно начинать обучение с нуля, предварительно обученные модели DAN доступны для ознакомления (проверьте модуль Universal Sentence Encoder в google hub).

person alias_neo92    schedule 07.05.2018
comment
Я считаю, что вас заминусовали, потому что вы не отвечаете на вопрос. При этом такой подход удобен для людей, которые не хотят работать со своей собственной обученной моделью Word2Vec. Вот ссылка для читателей: tfhub.dev/google/universal-sentence-encoder/ 2 - person Wok; 22.03.2019

допустим, это текущее предложение

import gensim 
from gensim.models import Word2Vec
from gensim import models
model = gensim.models.KeyedVectors.load_word2vec_format('path of your trainig 
dataset', binary=True)

strr = 'i am'
strr2 = strr.split()
print(strr2)
model[strr2] //this the the sentance embeddings.
person Ustaad UST    schedule 09.12.2019