了解FastText多语言

时间:2019-07-23 13:44:42

标签: python text-alignment word-embedding fasttext

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

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

我被困在这里:

 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中创建类,所以这对我来说使事情变得更加困难。这些是我无法深入理解的行:

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

这些是我的问题:

  • “ = \” 对1意味着什么?
  • 在哪里定义了 word2id id2word embed ?它们是python的关键字吗?

1 个答案:

答案 0 :(得分:2)

在行尾加反斜杠告诉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不是关键字;它们是在为其分配值时创建的。