Как использовать векторное представление слов (полученное из Word2Vec и т. д.) В качестве признаков для классификатора?

Я знаком с использованием функций лука для классификации текста, где мы сначала находим размер словаря для корпуса, который становится размером нашего вектора признаков. Для каждого предложения / документа и для всех составляющих его слов мы затем ставим 0/1 в зависимости от отсутствия/присутствия этого слова в этом предложении/документе.

однако теперь, когда я пытаюсь использовать векторное представление каждого слова, важно ли создание глобального словаря?

2 ответов


предположим, что размер векторов равен N (обычно от 50 до 500). Наивный способ обобщения традиционного обобщения лука - это просто замена 0 бит (в банте) на N нулей и замена 1 бит (в банте) на реальный вектор (скажем, из Word2Vec). Тогда размер объектов будет равен N * | V |(по сравнению с векторами| V |feature в носовой части, где| V / - размер vocabs). Это простое обобщение должно отлично работать для приличного количества учебных экземпляров.

To сделайте векторы объектов меньше, люди используют различные методы, такие как использование рекурсивной комбинации векторов с различными операциями. (См. рекурсивную / рекуррентную нейронную сеть и аналогичные трюки, например:http://web.engr.illinois.edu / ~khashab2 / files / 2013_RNN.pdf или http://papers.nips.cc/paper/4204-dynamic-pooling-and-unfolding-recursive-autoencoders-for-paraphrase-detection.pdf)


чтобы получить вектор объектов фиксированной длины для каждого предложения, хотя количество слов в каждом предложении разное, сделайте следующее:

  1. маркировать каждое предложение в учредительные слов
  2. для каждого слова получить вектор слова (если его там нет игнорировать слово)
  3. средняя все слова векторы у тебя есть
  4. это всегда даст вам вектор D-dim (d-вектор слова dim)

ниже приведен код snipet

def getWordVecs(words, w2v_dict):
    vecs = []
    for word in words:
        word = word.replace('\n', '')
        try:
            vecs.append(w2v_model[word].reshape((1,300)))
        except KeyError:
            continue
    vecs = np.concatenate(vecs)
    vecs = np.array(vecs, dtype='float')
    final_vec = np.sum(vecs, axis=0)
return final_vec

words-список токенов, полученных после токенизации предложения.