ScienceWorld é um ambiente virtual baseado em texto centrado na realização de tarefas do currículo padronizado de ciências elementares. Este código acompanha o artigo ScienceWorld: Seu agente textual é mais inteligente que um aluno da 5ª série?.
Você pode experimentar o ScienceWorld por meio de nosso HuggingFace Space ou ler algumas das transcrições do jogo.
@misc{scienceworld2022, title={ScienceWorld: Is your Agent Smarter than a 5th Grader?}, author={Ruoyao Wang and Peter Jansen and Marc-Alexandre C{^o}t{'e} and Prithviraj Ammanabrolu}, year={2022}, eprint={2203.07540}, archivePrefix={arXiv}, primaryClass={cs.CL}, url={https://arxiv.org/abs/2203.07540} }
Antes de executar: Você precisará ter Java 1.8+
instalado em seu sistema (fornecido com a maioria das distribuições Linux) e Python 3.8+
. Recomendamos a criação de um ambiente conda como este:
conda criar --name mundo da ciência python=3.8 conda ativar mundo da ciência
Em seguida, instale o ScienceWorld a partir do PyPi:
pip install scienceworld
ou da fonte no modo de desenvolvimento:
git clone https://github.com/allenai/ScienceWorld.git cd ScienceWorld pip install .
Execute um exemplo de agente aleatório, na tarefa 13 (classificação: colocar uma coisa não viva em uma caixa), para 5 episódios:
python examples/random_agent.py --task-num=13 --num-episodes=5 --simplifications-preset easy
Execute um console de usuário onde você possa interagir com o ambiente, na tarefa 3 (mudança de estado: fusão):
python examples/human.py --task-num=3 --num-episodes=5
Também está disponível uma demonstração de servidor web, que permite executar um console de usuário ScienceWorld com o qual pode interagir em um navegador web.
Para executar a demonstração do servidor web:
conda criar --name mundo da ciência python=3.8 conda ativar mundo da ciência pip instalar mundo da ciência[servidor web]
Execute o servidor web:
python examples/scienceworld-web-server-example.py
Aponte seu navegador para: localhost:8080
ScienceWorld é escrito em Scala (2.12.9) e é compilado usando sbt
em um arquivo JAR executado com Java. Por conveniência, é fornecida uma API Python (Python >= 3.8), que faz interface usando o pacote py4j
.
Se você modificou o código Scala, poderá recompilar o arquivo JAR executando:
./simulador/pacote.sh pip instalar -e.
As tarefas estão listadas na tabela abaixo junto com seu número de variações. O ID da tarefa ou seu nome podem ser usados para uma tarefa com env.load()
.
ID da tarefa | Nome da tarefa | # Variações |
---|---|---|
1-1 | ferver | 30 |
1-2 | derretido | 30 |
1-3 | congelar | 30 |
1-4 | mudar-o-estado-da-matéria | 30 |
2-1 | termômetro de uso | 540 |
2-2 | medir-ponto-de-fusão-substância conhecida | 436 |
2-3 | medir-ponto-de-fusão-substância desconhecida | 300 |
3-1 | componente de potência | 20 |
3-2 | componente de energia-renovável vs-energia não-renovável | 20 |
3-3 | condutividade de teste | 900 |
3-4 | teste de condutividade de substâncias desconhecidas | 600 |
4-1 | encontrar-coisa-viva | 300 |
4-2 | encontrar-coisa-não-viva | 300 |
4-3 | encontrar planta | 300 |
4-4 | encontrar-animal | 300 |
5-1 | planta de crescimento | 126 |
5-2 | cultivar frutas | 126 |
6-1 | mistura química | 32 |
6-2 | química-mistura-tinta-cor secundária | 36 |
6-3 | química-mix-tinta-cor terciária | 36 |
7-1 | vida útil mais longa | 125 |
7-2 | vida útil mais curta | 125 |
7-3 | expectativa de vida-vida mais longa-de-vida-mais curta | 125 |
8-1 | identificar-estágios-da-vida-1 | 14 |
8-2 | identificar-estágios-da-vida-2 | 10 |
9-1 | plano inclinado-determinar-ângulo | 168 |
9-2 | superfícies nomeadas de fricção em plano inclinado | 1386 |
9-3 | superfícies de atrito de plano inclinado sem nome | 162 |
10-1 | planta conhecida com genética mendeliana | 120 |
10-2 | planta-desconhecida-genética-mendeliana | 480 |
DRRN: https://github.com/cognitiveailab/drrn-scienceworld
KG-A2C: https://github.com/cognitiveailab/kga2c-scienceworld
CALMA: https://github.com/cognitiveailab/calm-scienceworld
Clonagem de comportamento e transformador de decisão: https://github.com/cognitiveailab/t5-scienceworld