Então, estou começando a aprender como uma rede neural pode operar para reconhecer padrões e categorizar entradas, e vi como uma rede neural artificial pode analisar dados de imagem e categorizar as imagens ( demo com convnetjs ), e a chave é reduzir a amostra da imagem e cada pixel estimula um neurônio de entrada na rede.
No entanto, estou tentando entender se isso é possível com entradas de string? O caso de uso que eu tenho é um "mecanismo de recomendação" para filmes que um usuário assistiu. Os filmes têm muitos dados de sequência (título, enredo, tags), e eu poderia imaginar "reduzir a amostragem" do texto para algumas palavras-chave que descrevem esse filme, mas mesmo se eu analisar as cinco principais palavras que descrevem esse filme, eu acha que precisaria de neurônios de entrada para cada palavra em inglês para comparar um conjunto de filmes? Eu poderia limitar os neurônios de entrada apenas às palavras usadas no conjunto, mas poderia crescer / aprender adicionando novos filmes (o usuário assiste a um novo filme, com novas palavras)? A maioria das bibliotecas que eu vi não permite adicionar novos neurônios após o treinamento do sistema?
Existe uma maneira padrão de mapear dados de cadeia / palavra / caractere para entradas em uma rede neural? Ou uma rede neural realmente não é a ferramenta certa para o trabalho de analisar dados de string como este (qual é a melhor ferramenta para correspondência de padrões em dados de string)?
fonte
Ambas as respostas de @Emre e @Madison May destacam a questão em questão. O problema é representar sua string como um vetor de recurso para entrada no NN.
Primeiro, o problema depende do tamanho da string que você deseja processar. Seqüências longas que contêm tokens (geralmente palavras) geralmente são chamadas de documentos nessa configuração. Existem métodos separados para lidar com tokens / palavras individuais.
Existem várias maneiras de representar documentos. Muitos deles fazem a suposição de palavras-chave . Os tipos mais simples representam o documento como um vetor da contagem de palavras ou termo frequência (tf). Para eliminar os efeitos do tamanho do documento, geralmente as pessoas preferem normalizar pelo número de documentos em que um termo aparece, frequência do documento ( tf-idf ).
Outra abordagem é a modelagem de tópicos, que aprende uma representação latente de baixa dimensão dos dados. LDA e LSI / LSA são escolhas típicas, mas é importante lembrar que isso não é supervisionado. A representação aprendida não será necessariamente ideal para qualquer aprendizado supervisionado que você esteja fazendo com o seu NN. Se você deseja fazer a modelagem de tópicos, também pode tentar modelos de tópicos supervisionados .
Para palavras individuais, você pode usar o word2vec , que utiliza NNs para incorporar palavras em um espaço de tamanho arbitrário. A semelhança entre dois vetores de palavras neste espaço aprendido tende a corresponder à semelhança semântica.
Uma abordagem pioneira mais recente é a dos vetores de parágrafos , que primeiro aprendem um modelo de palavra semelhante ao word2vec e depois constroem essa representação para aprender uma representação distribuída de conjuntos de palavras (documentos de qualquer tamanho). Isso mostrou resultados de ponta em muitas aplicações.
Ao usar NNs na PNL, as pessoas geralmente usam arquiteturas diferentes, como Redes Neurais Recorrentes (como redes de Memória de Longo Prazo ). Em alguns casos, as pessoas até usaram redes neurais convolucionais no texto.
fonte
Este não é um problema sobre redes neurais em si, mas sobre a representação de dados textuais no aprendizado de máquina. Você pode representar os filmes, elenco e tema como variáveis categóricas. O enredo é mais complicado; você provavelmente desejaria um modelo de tópico para isso, mas deixaria isso de fora até você entender o jeito. É exatamente essa "amostra reduzida" textual que você mencionou.
Dê uma olhada neste tutorial para aprender como codificar variáveis categóricas para redes neurais. E boa sorte!
fonte
Eu tentei as duas maneiras a seguir para implementação trial-n-test de redes neurais com texto. O último funciona razoavelmente bem, mas com limitações.
Crie vocabulário usando word2vect ou NLTK / tokens de palavras personalizadas e atribua um índice a cada palavra. É este índice que representa a palavra como número.
Desafios:
Use matriz de identidade, por exemplo, para palavras "n", use matriz "nx n" ou (n-1 x n-1) em que cada linha e coluna representa uma palavra. Coloque "1" na célula de interseção e "0" nos locais de descanso. ( referência )
Desafios:
fonte