如何将单词映射到数字以输入Tensorflow神经网络

时间:2018-10-13 04:18:50

标签: python tensorflow neural-network recurrent-neural-network preprocessor

我正在尝试使用python中的Tensorflow用seq2seq神经网络实现构建聊天机器人。我以前从未做过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 :(得分:1)

我相信最好的方法是创建一个字典/单词映射到数字的索引。这也将有助于将数字转换回单词。在NLP上下文中,this线程也讨论了相同的问题。

基于此建议的代码-

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")))