Que tipo de recurso você tentará extrair da lista de palavras para previsão futura, é uma palavra existente ou apenas uma bagunça de caracteres?
Há uma descrição da tarefa que encontrei lá .
Você precisa escrever um programa que possa responder se uma determinada palavra é inglês. Isso seria fácil - você só precisaria procurar a palavra no dicionário - mas há uma restrição importante: seu programa não deve ser maior que 64 KiB.
Então, pensei que seria possível usar a regressão logística para resolver o problema. Não tenho muita experiência com mineração de dados, mas a tarefa é interessante para mim.
Obrigado.
machine-learning
nlp
text-mining
algorithms
Vitalii Mishchenko
fonte
fonte
Respostas:
Durante a PNL e a análise de texto, várias variedades de recursos podem ser extraídas de um documento de palavras para usar na modelagem preditiva. Isso inclui o seguinte.
ngrams
Pegue uma amostra aleatória de palavras em words.txt . Para cada palavra da amostra, extraia todos os gramas possíveis de letras. Por exemplo, a palavra força consiste nos seguintes gramas: { st , tr , re , en , ng , gt , th }. Agrupe por grama e calcule a frequência de cada grama no seu corpus. Agora faça o mesmo com três gramas, ... até n gramas. Neste ponto, você tem uma idéia aproximada da distribuição de frequência de como as letras romanas se combinam para criar palavras em inglês.
ngram + limites de palavras
Para fazer uma análise adequada, você provavelmente deve criar tags para indicar n-gramas no início e no final de uma palavra ( cão -> { ^ d , fazer , og , g ^ }) - isso permitiria capturar fonologia / ortografia restrições que de outra forma poderiam ser perdidas (por exemplo, a sequência ng nunca pode ocorrer no início de uma palavra nativa em inglês, portanto, a sequência ^ ng não é permitida - uma das razões pelas quais nomes vietnamitas como Nguyễn são difíceis de pronunciar para falantes de inglês) .
Chame essa coleção de gramas de word_set . Se você inverter a classificação por frequência, seus gramas mais frequentes estarão no topo da lista - refletirão as seqüências mais comuns entre as palavras em inglês. Abaixo, mostro algum código (feio) usando o pacote {ngram} para extrair a letra ngrams das palavras e depois computar as frequências de grama:
Seu programa terá apenas uma sequência de caracteres de entrada como entrada, dividida em gramas conforme discutido anteriormente e comparada com a lista dos principais gramas. Obviamente, você terá que reduzir suas principais escolhas para atender ao requisito de tamanho do programa .
consoantes e vogais
Outra característica ou abordagem possível seria examinar sequências de vogais consoantes. Converta basicamente todas as palavras em seqüências de caracteres de vogal consoante (por exemplo, panqueca -> CVCCVCV ) e siga a mesma estratégia discutida anteriormente. Esse programa provavelmente poderia ser muito menor, mas sofreria de precisão porque abstrai os telefones em unidades de alta ordem.
nchar
Outro recurso útil será o comprimento da string, pois a possibilidade de palavras legítimas em inglês diminui à medida que o número de caracteres aumenta.
Erro de análise
O tipo de erro produzido por esse tipo de máquina deve ser sem sentido - palavras que parecem ser palavras em inglês, mas que não são (por exemplo, ghjrtg seriam corretamente rejeitadas (verdadeiro negativo), mas barkle seria incorretamente classificado como uma palavra em inglês (falso positivo)).
Curiosamente, zyzzyvas seria incorretamente rejeitado (falso negativo), porque zyzzyvas é uma palavra real em inglês (pelo menos de acordo com words.txt ), mas suas seqüências de grama são extremamente raras e, portanto, provavelmente não contribuem com muito poder discriminatório.
fonte