我正在尝试使用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
如果有人能告诉我如何以某种方式将这些单词转换为数字,那就太好了。我还需要能够将它们从数字变成单词。
答案 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")))