word2vec с другой грамматикой

каков эффект word2vec, если он реализован на другом языке и с другой грамматикой? Я имею в виду, что word2vec реализован на английском корпусе впервые, есть ли какое-то влияние, если мы будем использовать другой языковой корпус?


person Meru Run    schedule 28.07.2019    source источник


Ответы (2)


Word2vec применяется ко многим языкам, а также как часть стратегий перевода с одного языка на другой, когда модели word2vec изучаются на каждом языке отдельно.

Word2vec не зависит от каких-либо особенностей английской грамматики. Скорее, он просто требует в качестве входных данных последовательности слов в их естественном порядке.

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

person gojomo    schedule 28.07.2019

Вы не можете сравнивать встраивания слов из моделей, обученных на разных корпусах. Вы получите бессмысленные результаты, потому что модель А ничего не знает о контекстах, в которых были замечены слова из модели Б.

Однако возможно преобразовать вложения слов из модели A в новый вектор, который существует в векторном пространстве модели B. Это похоже на перевод, и новый вектор слов должен быть близок к словам в корпусе другой модели, которые похожи. в значении вашего исходного слова (при условии, что обе модели были обучены на данных, охватывающих аналогичный диапазон контекстов).

Я написал небольшой пакет: transvec, который сделает это за вас на Python. Он позволяет брать векторы слов из предварительно обученной модели для одного языка и переводить их в векторы слов на совершенно другом языке. Вот пример преобразования слов между английским и русским языками с использованием предварительно обученных моделей Word2Vec:

import gensim.downloader
from transvec.transformers import TranslationWordVectorizer

# Pretrained models in two different languages.
ru_model = gensim.downloader.load("word2vec-ruscorpora-300")
en_model = gensim.downloader.load("glove-wiki-gigaword-300")

# Training data: pairs of English words with their Russian translations.
# The more you can provide, the better.
train = [
    ("king", "царь_NOUN"), ("tsar", "царь_NOUN"),
    ("man", "мужчина_NOUN"), ("woman", "женщина_NOUN")
]

bilingual_model = TranslationWordVectorizer(en_model, ru_model).fit(train)

# Find words with similar meanings across both languages.
bilingual_model.similar_by_word("царица_NOUN", 1) # "queen"
# [('king', 0.7763221263885498)]
person big-o    schedule 16.05.2020