One Hot Encoding для слов из текстового корпуса

Как я могу создать одну горячую кодировку слов с каждым словом, представленным разреженным вектором размера словарного запаса и индексом этого конкретного слова, равным 1, используя тензорный поток?

что-то вроде

oneHotEncoding(words = ['a','b','c','d']) -> [[1,0,0,0],[0,1,0,0],[0,0, 1,0],[0,0,0,1]] ?


person Shadab Shaikh    schedule 06.01.2017    source источник
comment
здесь объясняется, как использовать одно горячее кодирование в Tensorflow.   -  person AAA    schedule 15.08.2017


Ответы (1)


Один горячий кодировщик Scikit принимает массив целых чисел (http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html). Основываясь на вашем примере, вы можете использовать словарь для сопоставления слов с целыми числами и идти оттуда:

import numpy as np
from sklearn.preprocessing import OneHotEncoder
wdict = {'a': 0, 'b': 1, 'c': 2, 'd': 3}
dictarr = np.asarray(wdict.values()).reshape(-1, 1)
enc = OneHotEncoder()
enc.fit(dictarr)
enc.transform([[2]]).toarray()

который дает

array([[ 0.,  0.,  1.,  0.]])
person GrimTrigger    schedule 12.11.2017