字符嵌入Keras

2024-09-24 12:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Keras中实现this paper中描述的字符级嵌入类型。使用双向LSTM计算字符嵌入。在

enter image description here

为了重现这一点,我首先创建了一个矩阵,其中包含每个单词组成单词的字符索引:

char2ind = {char: index for index, char in enumerate(chars)}
max_word_len = max([len(word) for sentence in sentences for word in sentence])
X_char = []
for sentence in X:
    for word in sentence:
        word_chars = []
        for character in word:
            word_chars.append(char2ind[character])

        X_char.append(word_chars)
X_char = sequence.pad_sequences(X_char, maxlen = max_word_len)

然后,我定义了一个BiLSTM模型,其中嵌入了单词字符矩阵。我假设input_维数必须等于字符数。我希望角色嵌入的大小为64,因此我将BiLSTM的隐藏大小设置为32:

^{pr2}$

这就是我困惑的地方。如何从模型中检索嵌入项?我想我必须编译模型并进行拟合,然后检索权重以获得嵌入值,但是我应该使用什么参数来拟合它呢?在


其他详细信息:

这是一个NER任务,所以数据集技术上可以是word-label格式的任何东西,尽管我专门使用wikigoldconll语料库:https://github.com/pritishuplavikar/Resume-NER/blob/master/wikigold.conll.txt 网络的预期输出是标签(I-MISC,O,I-PER…)

我希望数据集足够大,可以直接从中训练字符嵌入。所有的单词都用其组成字符的索引进行编码,字母表大小大约为200个字符。单词被填充/剪成20个字符。数据集中大约有30000个不同的单词。在

我希望能够根据不同单词的信息来学习每个字符的嵌入。然后,如本文所述,我将在输入带有最终CRF层的bilstm网络之前,将字符嵌入与单词的手套嵌入连接起来。在

我也希望能够保存这些嵌入,这样我就可以在其他类似的NLP任务中重用它们。在


Tags: 数据in模型forindexlen矩阵字符
1条回答
网友
1楼 · 发布于 2024-09-24 12:29:50

一般来说,构建模型的Keras方法(即使看起来很复杂的模型)非常简单。例如,您要构建的模型的类型如下(注意,这是针对二进制分类问题):

model = Sequential()
model.add(Embedding(max_features, out_dims, input_length=maxlen))
model.add(Bidirectional(LSTM(32)))
model.add(Dropout(0.1))
model.add(Dense(1, activation='sigmoid'))
model.compile('adam', 'binary_crossentropy', metrics=['accuracy'])

这与普通的香草神经网络没有什么不同,除了有嵌入和双向层在适当的密集层。这是让Keras惊艳的原因之一。在

通常,寻找一个工作示例(Keras有负载)是很有帮助的,它或多或少与您正在尝试做的事情相同。在本例中,您可以首先查看this model,然后对其工作方式进行“反向工程”以回答您的问题。通常情况下,事情归结为以正确的方式格式化数据,在这种情况下,一个有效的示例模型会产生奇迹,因为您可以仔细研究其使用的数据格式。在

相关问题 更多 >