Como o Word Embedding lida com palavras não registradas?

Em tarefas de NLP, você pode estar procurando por um método de incorporação de palavras, não tão bom quanto o word2vector do Google, o GloVe de Stanford ou o fasttext do facebook.No processo de usá-lo, você descobrirá que algumas palavras não podem ser encontradas. Abaixo está a solução que resumi.

1. Pré-processe cada palavra em inglês.

  • Existe uma palavra original
  • É tudo minúsculo?
  • tudo em maiúsculas sim
  • A primeira letra é maiúscula?
  • Divisão de palavras (como it's -> it's, I've -> I've... Você pode consultar o código inferior)
  • Existem três tipos de subsecagem (nltk.stem)
  • Existem métodos de edição que parecem mais semelhantes?

2. Se ainda não for encontrado no word2vector correspondente.

  •  Adicionar a palavra desconhecido (desconhecido) é como a maioria das pessoas resolve esse problema.
  • (removendo palavras desconhecidas) é o pior.
  • Outra opção que foi desenvolvida recentemente é usar redes neurais convolucionais ou LSTMs separados para criar incorporações de palavras dinâmicas para cada palavra, processando cada caractere de palavra por vez. Usando esta técnica, seu modelo nunca encontrará uma palavra para a qual não possa criar uma incorporação
  •  Em vez disso, use números aleatórios para treinar vetores de palavras desconhecidas por meio de tarefas downstream.

outro


import re

# remove html tag like '<br /><br />'
def rm_tags(text):
    re_tag = re.compile(r'<[^>]+>')
    return re_tag.sub(' ', text)

def clean_str(string):
    string = re.sub(r"[^A-Za-z0-9(),!?\'\`]", " ", string)
    string = re.sub(r"\'s", " \'s", string)  # it's -> it 's
    string = re.sub(r"\'ve", " \'ve", string) # I've -> I 've
    string = re.sub(r"n\'t", " n\'t", string) # doesn't -> does n't
    string = re.sub(r"\'re", " \'re", string) # you're -> you are
    string = re.sub(r"\'d", " \'d", string)  # you'd -> you 'd
    string = re.sub(r"\'ll", " \'ll", string) # you'll -> you 'll
    string = re.sub(r"\'m", " \'m", string) # I'm -> I 'm
    string = re.sub(r",", " , ", string)
    string = re.sub(r"!", " ! ", string)
    string = re.sub(r"\(", " \( ", string)
    string = re.sub(r"\)", " \) ", string)
    string = re.sub(r"\?", " \? ", string)
    string = re.sub(r"\s{2,}", " ", string)
    return string.strip().lower()

def process(text):
    text = clean_str(text)
    text = rm_tags(text)
    return  text

おすすめ

転載: blog.csdn.net/keeppractice/article/details/130540945