? 2 de março de 2024 Divulgação completa dos dados de teste para o benchmark IMHI.
? 1º de fevereiro de 2024 Nosso artigo MentaLLaMA: "MentaLLaMA: Interpretable Mental Health Analysis on Social Media with Large Language Models" foi aceito pela WWW 2024!
? 31 de outubro de 2023 Lançamos o modelo MentaLLaMA-33B-lora, uma edição 33B do MentaLLaMA baseada em Vicuna-33B e o conjunto de dados IMHI completo, mas treinado com LoRA devido aos recursos computacionais!
? 13 de outubro de 2023 Divulgamos os dados de treinamento para os seguintes conjuntos de dados: DR, dreaddit, SAD, MultiWD e IRF. Mais por vir, fique ligado!
? 7 de outubro de 2023 Nosso artigo de avaliação: "Towards Interpretable Mental Health Analysis with Large Language Models" foi aceito pela conferência principal EMNLP 2023 como um artigo longo!
Este repositório e seu conteúdo são fornecidos apenas para pesquisas não clínicas . Nenhum material constitui diagnóstico ou conselho real, e quem procura ajuda deve obter assistência de psiquiatras profissionais ou clínicos. Nenhuma garantia, expressa ou implícita, é oferecida em relação à precisão, integridade ou utilidade das previsões e explicações. Os autores e colaboradores não são responsáveis por quaisquer erros, omissões ou quaisquer consequências decorrentes do uso das informações aqui contidas. Os usuários devem exercer seu próprio julgamento e consultar profissionais antes de tomar qualquer decisão clínica. A utilização do software e das informações contidas neste repositório é de inteira responsabilidade do usuário.
Os conjuntos de dados brutos coletados para construir nosso conjunto de dados IMHI são de plataformas públicas de mídia social, como Reddit e Twitter, e seguimos rigorosamente os protocolos de privacidade e princípios éticos para proteger a privacidade do usuário e garantir que o anonimato seja aplicado adequadamente em todos os textos relacionados à saúde mental. . Além disso, para minimizar o uso indevido, todos os exemplos fornecidos em nosso artigo são parafraseados e ofuscados utilizando o esquema de disfarce moderado.
Além disso, estudos recentes indicaram que os LLMs podem introduzir alguns preconceitos potenciais, tais como disparidades de género. Entretanto, alguns resultados de previsão incorretos, explicações inadequadas e generalização excessiva também ilustram os riscos potenciais dos atuais LLMs. Portanto, ainda existem muitos desafios na aplicação do modelo a sistemas de monitoramento de saúde mental em cenários reais.
Ao usar ou acessar as informações neste repositório, você concorda em indenizar, defender e isentar os autores, contribuidores e quaisquer organizações ou pessoas afiliadas de toda e qualquer reclamação ou dano.
Este projeto apresenta nossos esforços para análise interpretável de saúde mental com grandes modelos de linguagem (LLMs). Nos primeiros trabalhos, avaliamos de forma abrangente o desempenho de tiro zero/poucos tiros dos LLMs mais recentes, como ChatGPT e GPT-4, na geração de explicações para análise de saúde mental. Com base nas descobertas, construímos o conjunto de dados de Instrução de Saúde Mental Interpretável (IMHI) com 105 mil amostras de instrução, o primeiro conjunto de dados de ajuste de instrução multitarefa e de múltiplas fontes para análise interpretável de saúde mental em mídias sociais. Com base no conjunto de dados IMHI, propomos MentaLLaMA, o primeiro LLMs de código aberto que segue instruções para análise interpretável de saúde mental. MentaLLaMA pode realizar análises de saúde mental em dados de redes sociais e gerar explicações de alta qualidade para suas previsões. Também apresentamos o primeiro benchmark de avaliação holística para análise interpretável de saúde mental com 19 mil amostras de teste, que abrange 8 tarefas e 10 conjuntos de testes. Nossas contribuições são apresentadas nestes 2 artigos:
O artigo MentaLLaMA | O documento de avaliação
Fornecemos 5 pontos de verificação de modelo avaliados no artigo MentaLLaMA:
MentaLLaMA-33B-lora: Este modelo é ajustado com base no modelo básico Vicuna-33B e nos dados completos de ajuste de instruções IMHI. Os dados de treinamento abrangem 8 tarefas de análise de saúde mental. O modelo pode seguir instruções para fazer análises precisas de saúde mental e gerar explicações de alta qualidade para as previsões. Devido à limitação de recursos computacionais, treinamos o modelo MentaLLaMA-33B com a técnica PeFT LoRA, que reduziu significativamente o uso de memória.
MentaLLaMA-chat-13B: Este modelo é ajustado com base no modelo básico Meta LLaMA2-chat-13B e nos dados completos de ajuste de instruções IMHI. Os dados de treinamento abrangem 8 tarefas de análise de saúde mental. O modelo pode seguir instruções para fazer análises precisas de saúde mental e gerar explicações de alta qualidade para as previsões. Devido ao tamanho do modelo, as inferências são relativamente lentas.
MentaLLaMA-chat-7B| MentaLLaMA-chat-7B-hf: Este modelo é ajustado com base no modelo básico Meta LLaMA2-chat-7B e nos dados completos de ajuste de instruções IMHI. Os dados de treinamento abrangem 8 tarefas de análise de saúde mental. O modelo pode seguir instruções para fazer análises de saúde mental e gerar explicações para as previsões.
MentalBART: Este modelo é ajustado com base no modelo básico BART e nos dados completos de conclusão do IMHI. Os dados de treinamento abrangem 8 tarefas de análise de saúde mental. O modelo não pode seguir instruções, mas pode fazer análises de saúde mental e gerar explicações de forma completa. O tamanho menor deste modelo permite inferência mais rápida e implantação mais fácil.
MentalT5: Este modelo é ajustado com base no modelo de base grande T5 e nos dados completos de conclusão do IMHI. O modelo não pode seguir instruções, mas pode fazer análises de saúde mental e gerar explicações de forma completa. O tamanho menor deste modelo permite inferência mais rápida e implantação mais fácil.
Você pode usar os modelos MentaLLaMA em seu projeto Python com a biblioteca Hugging Face Transformers. Aqui está um exemplo simples de como carregar o modelo totalmente ajustado:
from transformers import LlamaTokenizer , LlamaForCausalLM
tokenizer = LlamaTokenizer . from_pretrained ( MODEL_PATH )
model = LlamaForCausalLM . from_pretrained ( MODEL_PATH , device_map = 'auto' )
Neste exemplo, LlamaTokenizer é usado para carregar o tokenizer e LlamaForCausalLM é usado para carregar o modelo. O argumento device_map='auto'
é usado para usar automaticamente a GPU, se estiver disponível. MODEL_PATH
denota o caminho para salvar o modelo.
Após carregar os modelos, você pode gerar uma resposta. Aqui está um exemplo:
prompt = 'Consider this post: "work, it has been a stressful week! hope it gets better." Question: What is the stress cause of this post?'
inputs = tokenizer ( prompt , return_tensors = "pt" )
# Generate
generate_ids = model . generate ( inputs . input_ids , max_length = 2048 )
tokenizer . batch_decode ( generate_ids , skip_special_tokens = True , clean_up_tokenization_spaces = False )[ 0 ]
Nossa execução desses códigos no MentaLLaMA-chat-13B obtém a seguinte resposta:
Answer: This post shows the stress cause related to work. Reasoning: The post explicitly mentions work as being stressful and expresses a hope that it gets better. This indicates that the poster is experiencing stress in relation to their work, suggesting that work is the primary cause of their stress in this instance.
Para o modelo MentaLLaMA-33B-lora, como nosso modelo é baseado no modelo de fundação Vicuna-33B, você precisa primeiro baixar o modelo Vicuna-33B aqui e colocá-lo no diretório ./vicuna-33B
. Em seguida, baixe os pesos MentaLLaMA-33B-lora e coloque-os no diretório ./MentaLLaMA-33B-lora
.
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
peft_model = AutoPeftModelForCausalLM . from_pretrained ( "./MentaLLaMA-33B-lora" )
tokenizer = AutoTokenizer . from_pretrained ( './MentaLLaMA-33B-lora' )
Após carregar os modelos, você pode gerar uma resposta. Aqui está um exemplo:
input_data = [ "Consider this post: I'm finally dead inside and I don't know how to feel about it Fear, Anger, Sadness... It's all gone. I just feel numb. Question: Does the poster suffer from depression?" ]
inputs = tokenizer ( input_data , return_tensors = "pt" , padding = True )
input_ids = inputs . input_ids
generate_ids = peft_model . generate ( ** inputs , max_length = 2048 )
truc_ids = generate_ids [ 0 ][ len ( input_ids [ 0 ]) :]
response = tokenizer . decode ( truc_ids , skip_special_tokens = True , spaces_between_special_tokens = False )
Nossa execução desses códigos no MentaLLaMA-33B-lora obtém a seguinte resposta:
Reasoning: Yes, the poster suffers from depression. Reasoning: The poster's statement expresses a sense of emotional numbness and a lack of emotional response. This is a common symptom of depression, as individuals with depression often experience a diminished ability to feel emotions. The poster also mentions feeling dead inside, which further suggests a lack of emotional connection and a sense of hopelessness, both of which are common in depression. Overall, the language used and the description of emotional numbness align with symptoms commonly associated with depression.
Coletamos dados brutos de 10 conjuntos de dados existentes, abrangendo 8 tarefas de análise de saúde mental, e os transferimos para dados de teste para análise interpretável de saúde mental. As estatísticas sobre os 10 conjuntos de teste são as seguintes:
Nome | Tarefa | Divisão de dados | Fonte de dados | Anotação | Lançado |
---|---|---|---|---|---|
DR | detecção de depressão | 1.003/430/405 | Rótulos fracos | Sim | |
CLP | detecção de depressão | 456/196/299 | Anotações humanas | Ainda não | |
dread | detecção de estresse | 2.837/300/414 | Anotações humanas | Sim | |
SWMH | detecção de transtornos mentais | 34.822/8.705/10.882 | Rótulos fracos | Ainda não | |
T-SID | detecção de transtornos mentais | 3.071/767/959 | Rótulos fracos | Ainda não | |
TRISTE | detecção de causa de estresse | 5.547/616/684 | SMS | Anotações humanas | Sim |
CAMS | detecção de causa de depressão/suicídio | 2.207/320/625 | Anotações humanas | Ainda não | |
solidão | detecção de solidão | 2.463/527/531 | Anotações humanas | Ainda não | |
MultiWD | Detecção de dimensões de bem-estar | 15.744/1.500/2.441 | Anotações humanas | Sim | |
IRF | Detecção de fatores de riscos interpessoais | 3.943/985/2.113 | Anotações humanas | Sim |
Apresentamos o IMHI, o primeiro conjunto de dados de ajuste de instruções multitarefa e multifonte para análise interpretável de saúde mental nas redes sociais. Atualmente divulgamos os dados de treinamento e avaliação dos seguintes conjuntos: DR, dreaddit, SAD, MultiWD e IRF. Os dados da instrução são colocados em
/train_data/instruction_data
Os itens são fáceis de seguir: a linha query
indica a pergunta, e a linha gpt-3.5-turbo
denota nossas previsões e explicações modificadas e avaliadas do ChatGPT. gpt-3.5-turbo
é usado como resposta de ouro para avaliação.
Para facilitar o treinamento em modelos sem capacidade de seguir instruções, também divulgamos parte dos dados de teste para conclusão do IMHI. Os dados são colocados sob
/train_data/complete_data
Os layouts dos arquivos são os mesmos dos dados de ajuste de instruções.
Apresentamos o primeiro benchmark de avaliação holística para análise interpretável de saúde mental com 19 mil amostras de teste. Todos os dados de teste foram divulgados. Os dados da instrução são colocados em
/test_data/test_instruction
Os itens são fáceis de seguir: a linha query
indica a pergunta, e a linha gpt-3.5-turbo
denota nossas previsões e explicações modificadas e avaliadas do ChatGPT. gpt-3.5-turbo
é usado como resposta de ouro para avaliação.
Para facilitar o teste em modelos sem capacidade de seguir instruções, também divulgamos parte dos dados de teste para conclusão do IMHI. Os dados são colocados sob
/test_data/test_complete
Os layouts dos arquivos são os mesmos dos dados de ajuste de instruções.
Para avaliar seu modelo treinado no benchmark IMHI, primeiro carregue seu modelo e gere respostas para todos os itens de teste. Usamos a biblioteca Hugging Face Transformers para carregar o modelo. Para modelos baseados em LLaMA, você pode gerar as respostas com os seguintes comandos:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset IMHI --llama --cuda
MODEL_PATH
e OUTPUT_PATH
denotam o caminho de salvamento do modelo e o caminho de salvamento para respostas geradas. Todas as respostas geradas serão colocadas em ../model_output
. Alguns exemplos gerados são mostrados em
./examples/response_generation_examples
Você também pode avaliar o conjunto de testes de conclusão do IMHI com os seguintes comandos:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset IMHI-completion --llama --cuda
Você também pode carregar modelos que não são baseados em LLaMA removendo o argumento --llama
. Nos exemplos gerados, a linha goldens
denota as explicações de referência e a linha generated_text
denota as respostas geradas do seu modelo.
A primeira métrica de avaliação para nosso benchmark IMHI é avaliar a exatidão da classificação das gerações do modelo. Se o seu modelo puder gerar respostas muito regulares, um classificador baseado em regras pode funcionar bem ao atribuir um rótulo a cada resposta. Fornecemos um classificador baseado em regras em IMHI.py
e você pode usá-lo durante o processo de geração de resposta adicionando o argumento: --rule_calculate
ao seu comando. O classificador requer o seguinte modelo:
[label] Reasoning: [explanation]
No entanto, como a maioria dos LLMs são treinados para gerar respostas diversas, um classificador de rótulos baseado em regras é impraticável. Por exemplo, MentaLLaMA pode ter a seguinte resposta para uma consulta SAD:
This post indicates that the poster's sister has tested positive for ovarian cancer and that the family is devastated. This suggests that the cause of stress in this situation is health issues, specifically the sister's diagnosis of ovarian cancer. The post does not mention any other potential stress causes, making health issues the most appropriate label in this case.
Para resolver este problema, em nosso artigo MentaLLaMA treinamos 10 classificadores de redes neurais baseados em MentalBERT, um para cada conjunto de dados brutos coletados. Os classificadores são treinados para atribuir um rótulo de classificação de acordo com a explicação. Lançamos esses 10 classificadores para facilitar avaliações futuras no benchmark IMHI.
Todos os modelos treinados alcançam mais de 95% de precisão nos dados de teste IMHI. Antes de atribuir os rótulos, certifique-se de ter transferido seus arquivos de saída no formato /exmaples/response_generation_examples
e nomeados como DATASET.csv
. Coloque todos os arquivos de saída que você deseja rotular no mesmo diretório DATA_PATH. Em seguida, baixe os modelos de classificadores correspondentes nos seguintes links:
Links para download dos modelos: CAMS, CLP, DR, dreaddit, Irf, loneliness, MultiWD, SAD, swmh, t-sid
Coloque todos os modelos baixados em um diretório MODEL_PATH e nomeie cada modelo com seu conjunto de dados. Por exemplo, o modelo para conjunto de dados DR deve ser colocado em /MODEL_PATH/DR
. Agora você pode obter os rótulos usando estes modelos com os seguintes comandos:
cd src
python label_inference.py --model_path MODEL_PATH --data_path DATA_PATH --data_output_path OUTPUT_PATH --cuda
onde MODEL_PATH
, DATA_PATH
denotam seu modelo e diretórios de dados especificados e OUTPUT_PATH
denota seu caminho de saída. Após o processamento, os arquivos de saída devem ter o formato dos exemplos em /examples/label_data_examples
. Se você deseja calcular métricas como pontuação e precisão do peso F1, adicione o argumento --calculate
ao comando acima.
A segunda métrica de avaliação do benchmark IMHI é avaliar a qualidade das explicações geradas. Os resultados em nosso artigo de avaliação mostram que a pontuação BART está moderadamente correlacionada com anotações humanas em 4 aspectos de avaliação humana e supera outras métricas de avaliação automática. Portanto, utilizamos a pontuação BART para avaliar a qualidade das explicações geradas. Especificamente, você deve primeiro gerar respostas usando o script IMHI.py
e obter o diretório de resposta como em examples/response_generation_examples
. Em primeiro lugar, baixe o diretório de pontuação BART e coloque-o em /src
e, em seguida, baixe o ponto de verificação de pontuação BART. Em seguida, pontue suas respostas com pontuação BART usando os seguintes comandos:
cd src
python score.py --gen_dir_name DIR_NAME --score_method bart_score --cuda
DIR_NAME
denota o nome do diretório de suas respostas geradas e deve ser colocado em ../model_output
. Também fornecemos outros métodos de pontuação. Você pode alterar --score_method
para 'GPT3_score', 'bert_score', 'bleu', 'rouge' para usar essas métricas. Para pontuação GPT, você precisa primeiro baixar o projeto e colocá-lo em /src
.
Divulgamos nossas anotações humanas sobre explicações geradas por IA para facilitar pesquisas futuras sobre o alinhamento de ferramentas de avaliação automática para análises interpretáveis de saúde mental. Com base nesses resultados da avaliação humana, testamos várias métricas de avaliação automática existentes em correlação com as preferências humanas. Os resultados do nosso artigo de avaliação mostram que a pontuação BART está moderadamente correlacionada com as anotações humanas em todos os 4 aspectos.
Em nosso documento de avaliação, rotulamos manualmente um subconjunto de resultados AIGC para o conjunto de dados de DR em 4 aspectos: fluência, integridade, confiabilidade e geral. As anotações são liberadas neste diretório:
/human_evaluation/DR_annotation
onde rotulamos 163 explicações geradas pelo ChatGPT para o conjunto de dados de detecção de depressão DR. O arquivo chatgpt_data.csv
inclui 121 explicações classificadas corretamente pelo ChatGPT. chatgpt_false_data.csv
inclui 42 explicações que foram falsamente classificadas pelo ChatGPT. Também incluímos 121 explicações classificadas corretamente pela InstruçãoGPT-3 em gpt3_data.csv
.
Em nosso artigo MentaLLaMA, convidamos um especialista em psicologia quantitativa para escrever uma explicação para 350 postagens selecionadas (35 postagens para cada conjunto de dados brutos). O conjunto dourado é usado para avaliar com precisão a capacidade de geração de explicação dos LLMs de maneira automática. Para facilitar pesquisas futuras, divulgamos explicações escritas por especialistas para os seguintes conjuntos de dados: DR, dreaddit, SWMH, T-SID, SAD, CAMS, solidão, MultiWD e IRF (35 amostras cada). Os dados são divulgados neste diretório:
/human_evaluation/test_instruction_expert
As explicações escritas por especialistas são processadas para seguir o mesmo formato de outros conjuntos de dados de teste para facilitar as avaliações do modelo. Você pode testar seu modelo nas explicações douradas escritas por especialistas com comandos semelhantes aos da geração de respostas. Por exemplo, você pode testar modelos baseados em LLaMA da seguinte forma:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset expert --llama --cuda
Se você usar anotações ou análises humanas no trabalho de avaliação, cite:
@inproceedings{yang2023towards,
title={Towards interpretable mental health analysis with large language models},
author={Yang, Kailai and Ji, Shaoxiong and Zhang, Tianlin and Xie, Qianqian and Kuang, Ziyan and Ananiadou, Sophia},
booktitle={Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing},
pages={6056--6077},
year={2023}
}
Se você usa MentaLLaMA em seu trabalho, cite:
@article{yang2023 MentalLLaMA ,
title={ MentalLLaMA : Interpretable Mental Health Analysis on Social Media with Large Language Models},
author={Yang, Kailai and Zhang, Tianlin and Kuang, Ziyan and Xie, Qianqian and Ananiadou, Sophia},
journal={arXiv preprint arXiv:2309.13567},
year={2023}
}
MentaLLaMA é licenciado sob [MIT]. Encontre mais detalhes no arquivo MIT.