【发布时间】:2020-05-16 19:08:04
【问题描述】:
word2vec 如果在不同的语言和不同的语法上实现会有什么效果?我的意思是word2vec是第一次在英文语料库上实现,如果我们使用其他语言语料库有什么影响吗?
【问题讨论】:
word2vec 如果在不同的语言和不同的语法上实现会有什么效果?我的意思是word2vec是第一次在英文语料库上实现,如果我们使用其他语言语料库有什么影响吗?
【问题讨论】:
Word2vec 已应用于多种语言 - 也作为语言到语言翻译策略的一部分,其中 word2vec 模型在每种语言上分别学习。
Word2vec 不依赖于英语语法的任何细节。相反,它只需要按自然顺序输入单词序列。
(在将单词序列传递给 word2vec 训练之前,没有明确指示单词的语言可能需要更复杂的标记化,但这超出了 word2vec 算法本身,一旦给出正确的单词标记 word2vec 应该仍然能够学习具有通常理想排列的词向量。)
【讨论】:
您无法比较已在不同语料库上训练的模型的词嵌入。你会得到无意义的结果,因为模型 A 不知道模型 B 中的单词出现的上下文。
虽然可以将模型 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)]
【讨论】: