Как сопоставить слова с числами для ввода в нейронную сеть Tensorflow - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать чат-бота с реализацией нейронной сети seq2seq с использованием Tensorflow в Python.Я никогда не делал seq2seq раньше, и большинство моих исследований было довольно бесполезным.

Я не собираюсь спрашивать код для чата от Sequence to Sequence.Вместо этого мой вопрос заключается в том, как лучше подготовить список слов для ввода в сеть.Я не очень углубился в код, но я создал скрипт, который будет загружать данные тренировок из файла и токенизировать их.

Однако, очевидно, нейронная сеть Tensorflow не может принимать строки в качестве входных данных.Мне нужно преобразовать эти строки в данные, с которыми сеть знает, как иметь дело;а именно числа.

Это мой код до сих пор;надеюсь, комментарии дадут вам представление о том, где я нахожусь:

#Import dependencies
import tensorflow as tf

#Fetch and preprocess data

#Define a tokenizer function
def tokenize(string):
    tokenized_list = []
    tmp_indx = 0
    for i in range(len(string)):
        if string[i] in "?.,!;":
            tokenized_list.append(string[tmp_indx:i])
            tokenized_list.append(string[i])
            tmp_indx = i+1
        elif string[i] == " ":
            tokenized_list.append(string[tmp_indx:i])
            tmp_indx = i+1

    #A quick and dirty way out :/
    tokenized_list = [x for x in tokenized_list if x!=""]


    return tokenized_list


raw_file_data = ""
with open("training_dialogue.txt") as file:
    raw_file_data = file.read()
raw_file_data = raw_file_data.split("\n")

#Train data as list of values like so: [query, target_response]
train_data = []

for i in range(0,len(raw_file_data)):
    if i%2!=0:
        #Perform the most basic tokenization algorithm
        query = tokenize(raw_file_data[i-1])
        target_response = tokenize(raw_file_data[i])
        train_data.append([query, target_response])

#Now that I have a list of tokens in the form of strings, I need to map these to numbers somehow


#Load encoder and decoder networks



#Define hyperparameters


#Train them on the data

Было бы здорово, если бы кто-нибудь показал мне, как эти слова каким-то образом преобразовать в числа.Мне также нужно иметь возможность превращать их из цифр обратно в слова.

1 Ответ

0 голосов
/ 13 октября 2018

Я считаю, что лучшим способом было бы создать словарь / указатель слов, сопоставляемых с числами.Это также поможет преобразовать числа в слова.Та же проблема обсуждается в этом потоке, а также в контексте НЛП.

Код на основе этого предложения -

wordList = []
wordMap = {}
def getNumber(word):
  if word in wordMap:
    return wordMap[word];

  wordIndex = len(wordList)
  wordList.append(word)
  wordMap[word] = wordIndex
  return wordIndex

def getWord(number):
  if number < len(wordList):
    return wordList[number]

  raise Exception("Unable to find Word for [{}]".format(number))

# Main
print(getNumber('Hello'))
print(getNumber("World"))
print(getWord(getNumber("World")))
...