Как я могу получить вывод функции предложения как формат массива? - PullRequest
0 голосов
/ 04 апреля 2019

Я преобразовываю слово в вектор, где мне нужно получить вектор в виде массива типа int, но я получаю тип объекта массива.

Может кто-нибудь помочь мне с решением?

def word2idx(statement):
        #here I am using sentencepieceprocessor as sp
        id1 = np.asarray(sp.encode_as_ids(statement)).astype(np.int32)
        return id1

sentence = 'the world', 'hello cherry', 'make me proud'
id2 = [word2idx(s)for s in sentence]
print(id2)

фактическая мощность:

[[array([  34, 1867]), array([ 83, 184,  63,  50,  47,  71,  41]), array([328,  69,   7, 303, 649])]]

Ожидаемый результат:

[[ 34, 1867], [ 83, 184,  63,  50,  47,  71,  41], [328,  69,   7, 303, 649]]

1 Ответ

0 голосов
/ 08 апреля 2019

Проблема в том, что массивы имеют разную длину, поэтому numpy не может сделать из них тензор.

Если вы довольны списком списков и вам не нужен массивный массив, вы можете сделать:

id2 = np.array([[  34, 1867], [ 83, 184,  63,  50,  47,  71,  41]])
id2.tolist()

и получите: [[34, 1867], [83, 184, 63, 50, 47, 71, 41]].

Вам нужен плотный массив NumPy , вам нужно дополнить всю последовательность до одинаковой длины. Вы можете сделать что-то вроде:

id2 = np.array([[  34, 1867], [ 83, 184,  63,  50,  47,  71,  41]])
idx = np.zeros((len(id2), max(len(s) for s in id2)))
for i, sent_ids in enumerate(id2):
    idx[i,:len(sent_ids)] = sent_ids

В этом случае вы получите:

array([[  34., 1867.,    0.,    0.,    0.,    0.,    0.],
       [  83.,  184.,   63.,   50.,   47.,   71.,   41.]])
...