word2vec 是否支持多种语言?

Does word2vec supports multiple languages?

我想知道我们是否可以使用 word2vec 算法来训练除英语以外的语言(如西班牙语、中文、意大利语)的模型?

是的!事实上,Google 的一篇原始 word2vec 论文强调了它在 machine-translation 语言对之间的使用潜力:

Exploiting Similarities among Languages for Machine Translation

请注意,与英语一样,您需要先将示例文本分解为 word-tokens,然后再将它们提供给 Word2Vec 算法,这在某些语言中可能更难。

如果像我一样需要处理包含多种语言的数据,您可能会对我的包感兴趣,它可以帮助您在语言之间翻译单词向量:transvec.

请记住,虽然您可以在任何语言上使用 Word2Vec,但没有经过多种语言训练的预训练模型(据我所知)。除非混合语言语料库还包含有关语言之间翻译的信息,否则它们可能不会有多大用处。

transvec 通过允许您在模型之间转换词向量来解决这个问题,因此您可以为每种语言使用一个模型并使用 transvec 找出语言 A 中的哪些词(目标 语言)与语言 B( 语言)中的单词最相似。如果您对它的工作原理感兴趣,请查看 Python 包或 original research paper 的自述文件(我刚刚意识到这是来自@gojomo 的回答的同一篇论文!)细节。

这是一个小示例,展示了如何以有意义的方式比较俄语单词向量和英语单词向量:

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)]

不用担心俄语单词上的奇怪 POS 标签 - 这只是我使用的特定预训练模型的一个怪癖。

所以基本上,如果您可以提供一个单词列表及其翻译,那么您可以训练一个 TranslationWordVectorizer 来翻译源语言中存在的 任何 个单词语料库转换为目标语言。当我真正使用它时,我通过从我的数据中提取所有单独的俄语单词来生成一些训练数据,运行 它们通过 Google 翻译,然后将所有翻译成一个英语单词。结果非常好(抱歉,我还没有关于基准测试的更多细节;它仍在进行中!)。