word2vec支持多种语言吗?

时间:2017-02-06 10:09:29

标签: word2vec

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

2 个答案:

答案 0 :(得分:3)

是的!事实上,Google最初的word2vec论文之一强调了它在语言对之间用于机器翻译的潜力:

Exploiting Similarities among Languages for Machine Translation

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

答案 1 :(得分:0)

如果像我一样,您需要处理包含多种语言的数据,那么您可能会对我的软件包感兴趣,该软件包可帮助您在以下两种语言之间翻译单词向量:请记住,尽管您可以在任何语言上使用Word2Vec,但没有(我知道)预先训练过的模型可以使用多种语言进行训练。除非混合语料库也包含有关这些语言之间的翻译的信息,否则它们可能不会有太多用处。

transvec通过允许您在模型之间转换单词向量来解决此问题,因此您可以为每种语言使用一个模型,并使用transvec找出语言A中的哪些单词(目标语言)与语言B(语言)中的单词最为相似。如果您对它的工作方式感兴趣,请查看Python包的自述文件或transvec(我刚意识到与@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 Translate运行它们,然后将所有翻译成英语的单词都保留下来,从而产生了一些训练数据。结果非常好(很抱歉,我还没有基准测试的更多细节;它仍在开发中!)。