Как использовать векторное представление слов (полученное из 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)
чтобы получить вектор объектов фиксированной длины для каждого предложения, хотя количество слов в каждом предложении разное, сделайте следующее:
- маркировать каждое предложение в учредительные слов
- для каждого слова получить вектор слова (если его там нет игнорировать слово)
- средняя все слова векторы у тебя есть
- это всегда даст вам вектор 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-список токенов, полученных после токенизации предложения.