我正在尝试使用 LSTM 生成对输入文本行的响应。我考虑了各种形式的输入,包括对行中的每个字符进行一次热编码,并将每个输入行作为一次热编码向量的向量传递。我还考虑过使用字典并根据字母位置对句子中的每个单词进行 one-hot 编码。
但是,我不确定这一切,因为我是机器学习中自然语言处理的新手。为这个问题格式化我的输入(和我的输出)的最佳方法是什么?
我正在尝试使用 LSTM 生成对输入文本行的响应。我考虑了各种形式的输入,包括对行中的每个字符进行一次热编码,并将每个输入行作为一次热编码向量的向量传递。我还考虑过使用字典并根据字母位置对句子中的每个单词进行 one-hot 编码。
但是,我不确定这一切,因为我是机器学习中自然语言处理的新手。为这个问题格式化我的输入(和我的输出)的最佳方法是什么?
您可以使用word embedding 将单词编码为实数向量。然后在那个高维空间中执行所有计算,例如单词比较(以查找相似性)。
“为这个问题格式化我的输入(和我的输出)的最佳方法是什么?”
我不知道哪种方法最好(取决于您的问题),但这种方法很常见。使用嵌入层在 Keras 中也很容易实现。
最终,您输入的准确表示将取决于您输入它的工具。
更一般地,对于文本生成,您需要将输入和输出建模为标记序列。这些标记可以是单词、句子、字符、n-gram,任何漂浮的东西。
然后每个标记都应该由一个向量表示。该向量可以是令牌的one-hot 编码,或者如 pcko1 所建议的那样,是一个词嵌入。词嵌入是代表你的标记的真实向量。它们可以以与 one-hot 向量相同的方式使用,但它们已显示出更多的含义。
最终,您将需要某种vector_to_string(vector)和string_to_vector(string)函数,它将标记映射到其对应的向量,反之亦然。这样,您可以将输入字符串转换为向量序列,然后可以将作为向量序列的输出转换回字符串。
start_of_sentence对于文本生成,添加 a和标记很有用end_of_sentence,可以知道何时停止生成。