Um Método de Identificação de
Emoções em Textos Curtos para o Português do Brasil
resumo - Os avanços recentes na análise
automática de textos conduziram ao surgimento de uma área responsável por
reconhecimento de aspectos subjetivos, tais como opiniões, sentimentos e
emoções do autor do texto analisado. Pesquisas nessa área remetem ao
desenvolvimento de métodos que possibilitam que sistemas computacionais sejam
capazes de reconhecer e detectar fatores afetivos no texto. Entretanto, por ser
uma área relativamente nova, estes métodos ainda estão em fase de
desenvolvimento e são, em sua grande maioria, para a língua inglesa. Desta
forma, observa-se a necessidade de adaptação dos mesmos para outros idiomas,
como o português. O presente documento tem por objetivo apresentar um método
baseado em Latent Semantic Analysis de identificação de emoções em bases textuais em
língua portuguesa. No caso dessa pesquisa, textos curtos serão manchetes de
notícias diversas, extraídas de sites da internet, seguidas de uma breve
descrição. Em algumas experimentações, o método obteve uma taxa média de
identificação de emoções na ordem de 70%.
O
objetivo desta pesquisa é identificar automaticamente emoções em um conjunto de
notícias curtas em português. As informações extraídas serão posteriormente
utilizadas para realizar a animação de um avatar que
faz papel de um apresentador de um programa de notícias.
Para fins
da presente pesquisa, define-se como “notícia curta” um texto que, em geral,
antecede a reportagem em si em qualquer noticiário. Este texto tem um
comprimento limitado (em número de palavras) e pode ser entendido como a
manchete e sua respectiva linha fina, que aparecem destacadas no texto e
antecedem a explanação da notícia em si. A manchete possui como objetivo atrair
a atenção do leitor para o texto e, por essa razão, é bastante destacada com
relação ao restante do conteúdo. Como título de apoio, tem-se as “linhas
finas”, que estão posicionadas imediatamente após a manchete, com menor
destaque, e possuem a função de fornecer melhor explicação acerca do título
principal (manchete).
Como
exemplo de manchete e linha fina, temos o texto a seguir: “Dois morrem e um
fica ferido após carro cair uma altura de 10 metros” (manchete): Acidente
aconteceu neste sábado em Caxias do Sul. Veículo caiu com as rodas para cima em
uma represa vazia (linha fina).
Para a
identificação das emoções em notícias curtas, implementamos
um procedimento baseado no algoritmo Latent Semantic Analysis (LSA),
utilizando a linguagem Java. Com o objetivo de ilustrar melhor todo o processo,
tomaremos como exemplo as seguintes notícias:
1. Presidente
do TCE no RS deixa hospital após assalto: João Vargas foi esfaqueado na barriga
e passa bem em São Sepé. Dois suspeitos foram presos
pela polícia na cidade de Santa Maria.
2. Dois
morrem e um fica ferido após carro cair uma altura de 10 metros: Acidente
aconteceu neste sábado em Caxias do Sul. Veículo caiu com as rodas para cima em
uma represa vazia.
3. PRF
flagra menina de 12 anos dirigindo picape em rodovia gaúcha: Segundo os policiais,
jovem estava acompanhada da mãe em São Borja. Carro foi retido e a mãe autuada
por deixar um menor de 18 anos dirigir.
4. Sucuri de
8 metros é flagrada após comer uma capivara: Cobra virou atração para moradores
de São José do Rio Claro (MT). Ela foi encontrada em um riacho perto de uma
fazenda na cidade.
5. Perito
particular questiona imagens de acidente com ex-deputado no PR: Família de
vítima contratou profissional para fazer simulação da colisão. Segundo ele,
alguns segundos do filme do acidente foram removidos.
6. Depois da
guerra, Faixa de Gaza vira 'ilha à deriva': Quatro meses após ataque de Israel,
território palestino segue pressionado. Mas região deve voltar a ser o foco do
processo de paz no Oriente Médio.
A
primeira etapa consiste em um pré-processamento das notícias curtas, e engloba
as seguintes tarefas: ler o arquivo original de notícias, converter
todas as palavras para minúsculas, remover caracteres especiais (como pontuação
e números), remover stop words
e aplicar um Stemmer (utilizado para reduzir os
termos aos seus radicais). Com o Stemmer, os termos
derivados de um mesmo radical serão contabilizados como um único termo, como no
exemplo: guerra, guerrear = guerr. Essas duas últimas
etapas (remoção de Stop words
e Stemmer) foram desenvolvidas com o auxílio da
ferramenta Weka , que conta com um algoritmo para remoção de stop words e com uma extensão do Snowball Stemmer. Estes recursos
foram escolhidos por serem facilmente integráveis ao projeto desenvolvido e
serem configuráveis para o português. A seguir, observa-se o resultado dessa
etapa para as notícias citadas acima:
1. tce rs deix
hospital assalt joã varg esfaqu barrig
pass sep suspeit pres sant
mar
2. morr fic fer
carr cair altur metr acident acontec
cax veícul caiu rod cim repres
Vaz
3. prf flagr menin dirig picap
rodov gaúch polic jov acompanh
mã borj carr
ret mã autu
deix menor dirig
4. sucur metr flagr
com capiv cobr vir atraçã morador clar mt encontr riach
pert fazend
5. perit particul question imagens acident ex deput pr famíl
vítim contrat profissional simul colisã segund
acident remov
6. guerr faix gaz
vir ilha deriv ataqu israel territóri palestin seg pression
volt foc paz orient medi
Após essa
primeira etapa, dois vetores são gerados. O primeiro conterá todas as notícias
curtas (documentos) já processadas. A partir desse, gera-se um segundo, que
contém todas as palavras (termos) encontradas em todo conjunto de notícias
curtas, sem repetições de termos. Com esses dois vetores, uma matriz (term-document matrix) é gerada e,
inicialmente, preenchida com zeros. Cada linha dessa matriz corresponde a uma
palavra e cada coluna corresponde a um documento. Portanto, cada célula
corresponde ao número de ocorrências de um termo dentro de um determinado
documento. Nessa etapa, são eliminados os termos que aparecem somente uma vez
em todo conjunto de documentos. A tabela, a seguir, mostra a matriz gerada para
o exemplo, onde D1, D2, D3,..., são as notícias curtas exemplificadas acima.
Vale lembrar que os termos observados a seguir passaram pelo processo de stemming citado anteriormente . Esse
processo é extremamente necessário para que termos que possuem significados
semelhantes e mesmo radical não sejam repetidos, pois isso alteraria os
resultados
|
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
acident |
0 |
1 |
0 |
0 |
2 |
0 |
1 |
acontec |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
carr |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
deix |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
dirig |
0 |
0 |
2 |
0 |
0 |
0 |
0 |
fer |
0 |
1 |
0 |
0 |
0 |
0 |
2 |
flagr |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
metr |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
mã |
0 |
0 |
2 |
0 |
0 |
0 |
0 |
vir |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
A partir
da desta matriz, um segundo procedimento é iniciado, também com o auxílio da
ferramenta Weka. Esse consiste na aplicação de uma
técnica chamada Single Value
Decomposition (SVD). O motivo que nos leva a utilizar
o SVD consiste em encontrar uma representação dimensionalmente
reduzida da matriz, que enfatize padrões e as ligações mais fortes entre termos
e/ou documentos, e descarte as mais fracas, ou ruídos. A execução do SVD
decompõe a matriz principal (term-document matrix) em três outras. A primeira, chamada U, nos remete a
coordenadas de cada termo dentro de um espaço. A segunda matriz, aqui chamada
de VT, fornece as coordenadas dos documentos nesse mesmo espaço. Finalmente, a
terceira matriz, chamada S, nos permite estimar quantas dimensões deverão ser
utilizadas para a obtenção dos melhores resultados. Essa dimensão também pode
ser estimada arbitrariamente, através de experimentos e comparações.
A etapa
seguinte consiste em definir a localização de cada grupo (emoção) no mesmo
espaço criado anteriormente com o SVD. Para isso, fez-se necessária a
utilização de seis listas de palavras, sendo cada uma delas relacionada com uma
emoção básica utilizada no trabalho.
Na sequência, para cada emoção, busca-se
todas as palavras da lista da emoção analisada na lista de termos do nosso
conjunto de notícias. Sabendo-se todos os termos que, segundo nossas listas,
representam emoções e, com o auxílio da matriz U, calculamos um ponto médio no
espaço obtido anteriormente. Esse ponto médio define precisamente a localização
do grupo naquele espaço.
Por fim,
para a última etapa, é utilizada a matriz VT e o conjunto de coordenadas dos
grupos de emoções. Através da similaridade Cossenoidal,
determinamos a distância de cada notícia curta aos grupos definidos. Os
resultados obtidos através da similaridade cossenoidal
resultam em valores entre -1 e 1, onde 1 (um)
representa que os dois pontos são totalmente idênticos com relação à sua
localização no espaço e, 0 (zero) por sua vez, representa que os dois pontos
são totalmente distantes entre si. Para facilitar a visualização destes
resultados, os mesmos foram multiplicados por 100. A seguir, pode-se
observar alguns exemplos do funcionamento do método, onde o maior número em
módulo representa a emoção identificada pelo sistema:
ID |
Notícia Curta |
1 |
Dois morrem e um fica ferido após carro cair uma altura de
10 metros: Acidente aconteceu neste sábado em Caxias do Sul. Veículo caiu com
as rodas para cima em uma represa vazia. |
2 |
Presidente do TCE no RS deixa hospital após assalto: João
Vargas foi esfaqueado na barriga e passa bem |
3 |
PRF flagra menina de 12 anos dirigindo picape em rodovia
gaúcha: Segundo os policiais, jovem estava acompanhada da mãe |
4 |
Perito particular questiona imagens de acidente com ex-deputado
no PR: Família de vítima contratou profissional para fazer simulação da
colisão. Segundo ele, alguns segundos do filme do acidente foram removidos. |
ID |
Alegria |
Desgosto |
Medo |
Raiva |
Surpresa |
Tristeza |
1 |
1.8643 |
2.1659 |
22.4061 |
1.6306 |
-7.6297 |
31.5120 |
2 |
9.3553 |
15.2393 |
-14.0036 |
-4.0511 |
9.5565 |
16.5808 |
3 |
-11.9080 |
0.6329 |
35.5294 |
10.1315 |
10.1518 |
-15.7766 |
4 |
4.4593 |
-12.5701 |
11.1476 |
-21.8743 |
-16.3681 |
9.2233 |