Як отримати вектор для речення із word2vec лексем у реченні


76

Я створив вектори для списку лексем із великого документа за допомогою word2vec. Враховуючи речення, чи можна отримати вектор речення з вектора лексем у реченні.

Відповіді:


92

Існують різні методи отримання векторів речень:

  1. Doc2Vec : ви можете навчити свій набір даних за допомогою Doc2Vec, а потім використовувати вектори речень.
  2. Середнє значення векторів Word2Vec : Ви можете просто взяти середнє значення всіх векторів слів у реченні. Цей середній вектор буде представляти ваш вектор речення.
  3. Середнє значення векторів Word2Vec з TF-IDF : це один із найкращих підходів, який я рекомендую. Просто візьміть вектори слів і помножте їх на їх оцінки TF-IDF. Просто візьміть середнє значення, і воно буде представляти ваш вектор речення.

4
Чому середнє проти суми?
Фред

17
Для обробки пропозицій змінної довжини
нель

2
Ви берете середні значення повторень w2v із N слів для речення довжиною N ; Я зрозумів це. Але чому середнє проти, наприклад, сума? (що також дасть вам складний реп для пропозицій змінної довжини)
Фред,

11
Тут я знайшов приклад 2-3 nadbordrozd.github.io/blog/2016/05/20/…
Ісмаель

1
Не впевнений, чому робити середнє значення кожного виміру, можливо, ми можемо просто підсумувати і все одно отримати подібні результати.
Argho Chatterjee

33

Існує кілька способів отримати вектор для речення. Кожен підхід має переваги та недоліки. Вибір одного залежить від завдання, яке ви хочете виконати зі своїми векторами.

По-перше, ви можете просто усереднити вектори з word2vec. На думку Ле і Міколова , цей підхід погано виконує завдання аналізу настроїв, оскільки він "втрачає порядок слів так само, як це роблять стандартні моделі" мішок слів "", і "не розпізнає багатьох складних мовних явищ, наприклад сарказм ". З іншого боку, згідно з Кентером та співавт. 2016 , "просто усереднення вкладених слів усіх слів у текст виявилося сильним базовим елементом чи властивістю для багатьох завдань", наприклад, завдання подібності короткого тексту. Варіантом може бути зважування векторів слів за допомогою TF-IDF, щоб зменшити вплив найпоширеніших слів.

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


26

Можна, але не з word2vec. Склад векторів слів для отримання подань вищого рівня для речень (і далі для абзаців та документів) є справді активною темою дослідження. Для цього немає одного найкращого рішення, це насправді залежить від того, до якого завдання ви хочете застосувати ці вектори. Ви можете спробувати конкатенацію, просте підсумовування, точкове множення, згортку і т. Д. Є кілька публікацій з цього питання, у яких ви можете навчитися, але зрештою вам просто потрібно поекспериментувати і подивитися, що вам найбільше підходить.


2
Я намагаюся класифікувати документи за допомогою маркерних векторів. Оскільки у мене занадто багато токенів (200 тис.), Я хотів сформувати вектори документів для класифікації, це значно зменшить фактори (скажімо, 500). Думав, чи можливо це.
trialcritic

4
Ви можете почати з них: 1. Мітчелл, 2008. Моделі семантичного складу на основі векторів. [посилання] ( homepages.inf.ed.ac.uk/s0453356/composition.pdf ) 2. Blacoe, 2012. Порівняння векторних подань для семантичного складу. [Посилання] ( aclweb.org/anthology/D12-1050 )
Клаудіу

3
3. Виявлення композиції виразів із декількох слів за допомогою найближчих сусідів у моделях векторного простору ( cl.cam.ac.uk/~dk427/papers/emnlp2013.pdf ) 4. Попереднє неоднозначність тензорів слів для побудови векторів речення cs.ox.ac .uk / файли / 5725 / karts_sadr_emnlp.pdf
Клаудіу

Дякую за статті, ціную це
trialcritic

20

Це залежить від використання:

1) Якщо ви хочете отримати вектор речення лише для деяких відомих даних. Перевірте вектор абзацу в цих роботах:

Куок В. Ле та Томаш Міколов. 2014. Розподілені подання вироків та документів. Eprint Arxiv, 4: 1188–1196.

А. М. Дай, К. Олах і К. В. Ле. 2015. DocumentEmbedding з векторами абзаців. Електронні відбитки 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


10

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

Код для речення 2vec поділився тут Томашем Міколовим . Першим словом рядка вважається id-id речення. Скомпілюйте код за допомогою

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


2

Я мав хороші результати від:

  1. Підсумовування векторів слів (із зважуванням tf-idf). Це ігнорує порядок слів, але для багатьох додатків достатньо (особливо для коротких документів)
  2. Fastsent


1

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

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

Вам не потрібно починати навчання з нуля, попередньо навчені моделі DAN доступні для ознайомлення (перевірте модуль кодування універсального вироку в концентраторі Google).


Я вважаю, що вас проголосували за те, що ви не відповідаєте на питання. З огляду на це, такий підхід зручний для людей, які не хочуть працювати з власною навченою моделлю Word2Vec. Ось посилання для читачів: tfhub.dev/google/universal-sentence-encoder/2
Вок,

-1

припустимо, це поточне речення

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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.