Я створив вектори для списку лексем із великого документа за допомогою word2vec. Враховуючи речення, чи можна отримати вектор речення з вектора лексем у реченні.
Я створив вектори для списку лексем із великого документа за допомогою word2vec. Враховуючи речення, чи можна отримати вектор речення з вектора лексем у реченні.
Відповіді:
Існують різні методи отримання векторів речень:
Існує кілька способів отримати вектор для речення. Кожен підхід має переваги та недоліки. Вибір одного залежить від завдання, яке ви хочете виконати зі своїми векторами.
По-перше, ви можете просто усереднити вектори з word2vec. На думку Ле і Міколова , цей підхід погано виконує завдання аналізу настроїв, оскільки він "втрачає порядок слів так само, як це роблять стандартні моделі" мішок слів "", і "не розпізнає багатьох складних мовних явищ, наприклад сарказм ". З іншого боку, згідно з Кентером та співавт. 2016 , "просто усереднення вкладених слів усіх слів у текст виявилося сильним базовим елементом чи властивістю для багатьох завдань", наприклад, завдання подібності короткого тексту. Варіантом може бути зважування векторів слів за допомогою TF-IDF, щоб зменшити вплив найпоширеніших слів.
Більш складний підхід, розроблений Socher et al. полягає у поєднанні векторів слів у порядку, визначеному синтаксичним деревом речення, використовуючи матрично-векторні операції. Цей метод працює для аналізу настрою речень, оскільки це залежить від синтаксичного аналізу.
Можна, але не з word2vec. Склад векторів слів для отримання подань вищого рівня для речень (і далі для абзаців та документів) є справді активною темою дослідження. Для цього немає одного найкращого рішення, це насправді залежить від того, до якого завдання ви хочете застосувати ці вектори. Ви можете спробувати конкатенацію, просте підсумовування, точкове множення, згортку і т. Д. Є кілька публікацій з цього питання, у яких ви можете навчитися, але зрештою вам просто потрібно поекспериментувати і подивитися, що вам найбільше підходить.
Це залежить від використання:
1) Якщо ви хочете отримати вектор речення лише для деяких відомих даних. Перевірте вектор абзацу в цих роботах:
Куок В. Ле та Томаш Міколов. 2014. Розподілені подання вироків та документів. Eprint Arxiv, 4: 1188–1196.
А. М. Дай, К. Олах і К. В. Ле. 2015. DocumentEmbedding з векторами абзаців. Електронні відбитки ArXiv, липень.
2) Якщо ви хочете, щоб модель оцінила вектор речень для невідомих (тестових) речень із некерованим підходом:
Ви можете переглянути цю статтю:
3) Дослідник також шукає вихід певного рівня в мережі RNN або LSTM, нещодавній приклад:
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4) Для gensim doc2vec багато дослідників не змогли отримати хороших результатів, щоб подолати цю проблему, слідуючи роботі, використовуючи doc2vec на основі попередньо навчених векторів слів.
Facebook має проект SentEval для оцінки якості векторів речень.
https://github.com/facebookresearch/SentEval
6) У наступному документі є додаткова інформація:
Моделі нейронних мереж для ідентифікації перефразу, семантичної подібності тексту, висновку природної мови та відповіді на питання
А поки що ви можете використовувати "BERT":
Google випускає вихідний код, а також попередньо навчені моделі.
https://github.com/google-research/bert
І ось приклад запуску bert як послуги:
Ви можете отримати векторні подання речень на етапі навчання (приєднайтеся до тесту та навчіть речення в одному файлі та запустіть код 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
Вбудовані коди Google Universal Encoder є оновленим рішенням цієї проблеми. Він не використовує Word2vec, але призводить до конкуруючого рішення.
Мережа глибокого усереднення (DAN) може забезпечити вбудовування речень, в яких бі-грами слова усереднюються і передаються через глибоку нейронну мережу прямої передачі (DNN).
Встановлено, що навчання переказу з використанням вбудованих речень має тенденцію перевершувати перенесення рівня слова, оскільки воно зберігає семантичні стосунки.
Вам не потрібно починати навчання з нуля, попередньо навчені моделі DAN доступні для ознайомлення (перевірте модуль кодування універсального вироку в концентраторі Google).
припустимо, це поточне речення
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.