token_embedders用于将index后的词转为tensor。常用的是Embedding类(可以读取预训练词向量)和TokenCharactersEncoder类。
对于TextField,需要用TextFieldEmbedder,更具体地,BasicTextFieldEmbedder。
BasicTextFieldEmbedder
用来管理多个token_embedder,这样单词可以有多种嵌入方式,嵌入之后进行拼接。
比如最常用的是词与字符嵌入的拼接。
参数
token_embedders: Dict[str, TokenEmbedder] 一个字典,key与indexer对应,value是用哪个TokenEmbedder。
例如:
配置文件中:
如果需要用pos和ner,需要对word_splitter的参数进行设置。
"tokenizer": {
"type": "word",
"word_splitter":
{
"type": "spacy",
"pos_tags": true,
"ner": true
}
}
},
indexer:POS和NER的嵌入,对于不是实体或者未知词性的,词典中存为None,所有的None有一个相同的嵌入。
"token_indexers": {
"tokens": {
"type": "single_id",
"lowercase_tokens": true
},
"token_characters": {
"type": "characters",
"character_tokenizer": {
"byte_encoding": "utf-8",
"start_tokens": [259],
"end_tokens": [260]
},
"pos": {
"type": "pos_tag"
},
"ner": {
"type": "ner_tag"
},
text_field_embedder:
"text_field_embedder": {
"token_embedders": {
"tokens": {
"type": "embedding",
"pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.840B.300d.lower.converted.zip",
"embedding_dim": 300,
"trainable": false
},
"pos": {
"type": "embedding",
"embedding_dim": 10,
"trainable": false
},
"ner": {
"type": "embedding",
"embedding_dim": 10,
"trainable": false
},
"token_characters": {
"type": "character_encoding",
"embedding": {
"embedding_dim": 64
},
"encoder": {
"type": "cnn",
"embedding_dim": 64,
"num_filters": 200,
"ngram_filter_sizes": [
5
]
}
}
}
},