理解 FastText 多语言

understanding FastText multilingual

我正在使用这个修改版的 FastText (fastText_multilingual),它可以让我用两种语言对齐单词。

我想了解他们的 fasttext.py,尤其是 Fast Vector class。 在示例文件 align_your_own.ipynb 中,作者展示了如何衡量两个词之间的相似性。我想对整个单词集重复这个过程,而不是每次都为一个单词测量相似度。为此,我需要了解如何访问这些 FastVector 对象。 这就是为什么我试图理解 Fast 向量 class。

我被困在这里:

 def __init__(self, vector_file='', transform=None):
    """Read in word vectors in fasttext format"""
    self.word2id = {}

    # Captures word order, for export() and translate methods
    self.id2word = []

    print('reading word vectors from %s' % vector_file)
    with open(vector_file, 'r') as f:
        (self.n_words, self.n_dim) = \
            (int(x) for x in f.readline().rstrip('\n').split(' '))
        self.embed = np.zeros((self.n_words, self.n_dim))
        for i, line in enumerate(f):
            elems = line.rstrip('\n').split(' ')
            self.word2id[elems[0]] = i
            self.embed[i] = elems[1:self.n_dim+1]
            self.id2word.append(elems[0])

我从来没有在 python 中创建过 class,所以这让我的事情变得更加困难。这些是我无法深入理解的台词:

 1. (self.n_words, self.n_dim) = \
 2. self.word2id = {}, self.id2word = [], 
 3. self.embed = np.zeros((self.n_words, self.n_dim))

这些是我的问题:

行尾的反斜杠告诉 Python 将当前逻辑行扩展到下一个物理行。 在您的情况下,您可以将这两行作为一行阅读:

(self.n_words, self.n_dim) = (int(x) for x in f.readline().rstrip('\n').split(' '))

在 Python 中,变量在您首次为其赋值时创建 (https://www.w3schools.com/python/python_variables.asp)。 因此,word2id、id2word 和 embed 不是关键字;它们是在为它们分配值时创建的。