使用已学习的单词嵌入从字符学习单词嵌入

时间:2017-08-27 08:12:52

标签: tensorflow keras lstm autoencoder word-embedding

我有一个文本语料库,我想找到从字符开始的单词嵌入。所以我有一系列字符作为输入,我想把它投影到一个多维空间。

作为一个初始化,我想适应已经学过的单词嵌入(例如,谷歌嵌入)。

我有些疑惑:

  1. 我是否需要为每个输入使用字符嵌入向量 输入序列中的字符?如果我使用它会是一个问题 只是ascii或utf-8编码?
  2. 尽管有什么输入 矢量定义(嵌入vec,ascii,..)它真的令人困惑 选择一个合适的模型有几个选项,但我不确定 哪一个是更好的选择:seq2seq,自动编码器,lstm, multi-regressor + lstm?
  3. 你可以给我任何示例代码 keras还是tensorflow?

1 个答案:

答案 0 :(得分:1)

我回答每个问题:

  1. 如果你想利用角色的相似性(也就是语音相似性的远亲),你需要一个嵌入层。编码是符号输入,而嵌入是连续输入。有了符号知识,任何类型的泛化都是不可能的,因为你没有距离(或相似性)的概念,而对于嵌入,你可以用类似的输入表现出类似的行为(如此概括)。但是,由于输入空间非常小,短嵌入就足够了。

  2. 该模型在很大程度上取决于您想捕获的现象类型。我在文献中经常看到并且在不同任务中看起来运作良好的模型是在角色上的多层双向lstm,在顶部有一个线性层。

  3. 该代码类似于Tensorflow的所有RNN实现。一个好的开始方法是Tensorflow教程https://www.tensorflow.org/tutorials/recurrent。创建双向的功能是https://www.tensorflow.org/api_docs/python/tf/nn/static_bidirectional_rnn

  4. 根据经验,我在使用角色模型进行基于单词的嵌入时遇到了问题。原因是如果没有语义相似性,基于单词的模型会将形态相似的单词放得很远。基于字符的模型不能这样做,因为形态相似的输入无法很好地区分(在嵌入空间中非常接近)。

    这就是为什么在文献中人们经常使用字符模型作为单词模型的加号而不是“本身”模型的原因之一。如果一个人物模型足以捕捉语义和形态上的相似性,那么这是一个开放的研究领域。