Skip to content

Commit

Permalink
Merging master branch (#1)
Browse files Browse the repository at this point in the history
* added MTurk update to NEWS.md

* added more MTurk news

* added more explanation for multi-assignment design

* fix virtualenv path error

* Fixed bug with vqa_v2 teacher's len (facebookresearch#164)

* Change MTurk local db to be in-memory

* remote agent fixes, switch model param to default None (facebookresearch#166)

* remote fixes (facebookresearch#167)

* Added Personalized Dialog dataset (facebookresearch#163)

* Fixed bug on building fb data (facebookresearch#171)

* ExecutableWorld,  designed to also work with BatchWorld (facebookresearch#170)

* small

* exec world

* small

* blah

* mm

* index

* index

* index

* small batch fixes

* small batch fixes

* Update NEWS.md

* updates to the training loop / logging (facebookresearch#172)

* add sigfig rounding and unit tests for utils (facebookresearch#173)

* train fixes (facebookresearch#174)

* fixes to train and dict (facebookresearch#177)

* bug fixes in drqa (facebookresearch#176)

* Add image feature extraction modules and fix minor bugs.  (facebookresearch#169)

* fix vqa_v1 and vqa_v2 testset image source.
* add image_featurizer
* add image_featurizers and examples.
* update image_featurizers.py and dialog_teacher.py based on the discussion.

* Fixes to ParsedRemoteAgent (facebookresearch#178)

* Capitalize 'all' to 'All' to follow naming convention

* Fixed missing img path and step size (facebookresearch#180)

* Fixing bibtex citation (facebookresearch#186)

Missing braces

* Added from scratch section to task tutorial (facebookresearch#184)

* vqa fixes (facebookresearch#183)

* Lazy Torch requirement (facebookresearch#182)

* fix a typo (facebookresearch#187)

* Update README.md

* Refactor MTurk html to make it more modular

* Add shutdowns (facebookresearch#191)

* Update run_tests_short.sh

* add insuranceqa as a task (facebookresearch#193)

* Save parameters of all agents through calling world.save()

* Move print statement

* Fix docstring

* mturk improvement and cleanup

* fixed path bug

* Adding cmdline args to task agents as well

* Make add_task_args a separate function

* updating save functions (facebookresearch#195)

* Added download resuming (facebookresearch#194)

* Support multiple tasks

* implemented send messages in bulk

* added HIT auto-test script

* better error message

* fixed message duplication error and other issues

* [MTurk] able to approve/reject work individually, block workers, and pay bonus; improved database status checking

* [MTurk] fixed auto test bug

* [MTurk] ignore abandoned HIT

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* world.save_agents fix (facebookresearch#198)

* save agents fix

* moar

* Update eval_model.py

* [MTurk] changed hit approval flow

* [MTurk] added unique_request_token for send_bonus

* fixed comment

* Clean up dir only on version update (facebookresearch#197)

* Update NEWS.md

* Update README.md

* group args when printing (facebookresearch#201)

* Rehosted COCO-IMG to allow for resuming download (facebookresearch#202)

* [MTurk] removed unnecessary wait

* [WIP] trying to increase max concurrent polling operations

* change poll test

* [MTurk] moved to us-east-1 (N. Virginia) for higher Lambda max connections

* turned off debug

* [MTurk] fixed bugs

* [MTurk] block_worker works

* elapsed time

* avg elapsed

* [MTurk] clean up

* [MTurk] added retry for ajax request

* Modified task tutorial (facebookresearch#206)

* Delete memnn_luatorch_cpu.rst

* Update README.md

* Update agents.py

* fix test for init files to exclude mturk html dir (facebookresearch#203)

* add task directory to mturk manager

* fix wikimovies kb teacher (facebookresearch#207)

* Default evaluation uses 'valid' datatype (facebookresearch#210)

* Add MS MARCO dataset, and modify insuranceQA to accept version (V1 or V2) (facebookresearch#200)

* Added retrying with exp backoff to downloads (facebookresearch#209)

* added reason for reject_work(); added MTurkWorld as parent class

* Update worlds.py

* added opt to MTurkWorld.__init__

* better mturk cost checking

* Fixed typo

* Update agents.py

* moved sync hit assignment info to a better place

* Fixed dialog data shared cands bug (facebookresearch#212)

* fix to acts indexing in batchworld (facebookresearch#215)

* fix insuranceqa bug (facebookresearch#211)

* Update NEWS.md

* Update NEWS.md

* Update NEWS.md

* Update NEWS.md

* minor comment and print statement fixes (facebookresearch#217)

* update basic tutorial (facebookresearch#219)

* Add TriviaQA task (facebookresearch#204)

* Update NEWS.md

* Tutorial for seq2seq agent, updated agent (facebookresearch#222)

* Add start of sentence token to dict.py (facebookresearch#221)

* minor comment and print statement fixes

* add start of sentence token to dict.py

* return original order of special tokens; change names of start and end tokens

* quick eos fix

* Update NEWS.md

* Update NEWS.md

* update seq2seq to use "END" like dictionary (facebookresearch#227)

* add hred to parlai (facebookresearch#228)

* Add placeholder agent for HRED model (facebookresearch#229)

* added email_worker API

* refactored init_aws

* setting assignment duration

* getting worker id earlier in time

* hide implementation detail of conversation_id to discourage change

* removed unnecessary create_hit_type_lock

* Added CLEVR task (facebookresearch#233)

* Exception to alert user of possible mistake when providing label and label candidate (facebookresearch#232)

* better handling for email_worker error case

* turn off keypress trigger if send button is disabled

* added abandoned HIT handling

* clean up

* disabled approve/reject for abandoned HITs

* added gating for pay_bonus

* fixed pay bonus bug

* fixed mturk agent act() and observe() bug

* fixed bug

* fixed submit HIT handling

* remove quotes around model path (facebookresearch#239)

The command line option doesn't require quotes, even if /tmp/model is a placeholder it's slightly misleading

* readme, example, and test fixes (facebookresearch#234)

* Update README.md

* bug where wrong word embedding is zeroed (facebookresearch#242)

word_dict['<NULL>'] returns the index for UNK rather than NULL and thus the wrong embedding is being zeroed

* Update README.md

* Added candidates to clevr (facebookresearch#243)

* Allow newlines in FbDialog format by using '\n' in the text file messages (facebookresearch#246)

* Simple task that just loads the specified FbDialogData file (facebookresearch#245)

* fromfile task

* again

* comment

* init py

* fromfile task: add docstring (facebookresearch#247)

* Fixed dialog_babi task 6 candidates (facebookresearch#248)

* Added image args to parlai args (facebookresearch#249)

* weak ranking system for seq2seq (facebookresearch#235)

* Added MemNN agent (facebookresearch#251)

* add references to msmarco and insuranceqa

* update msmarco description

* task list

* Added clevr to task list and item on news (facebookresearch#259)

* Update README.md

* fixed error in json format (facebookresearch#262)

* print() is a function in Python 3 (facebookresearch#256)

* print() is a function in Python 3 (facebookresearch#255)
  • Loading branch information
huzefasiyamwala authored Aug 17, 2017
1 parent c31547d commit 1270f80
Show file tree
Hide file tree
Showing 124 changed files with 13,745 additions and 2,162 deletions.
16 changes: 16 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
<h2>News</h2>

2017-08-15: [New task added: CLEVR](https://github.com/facebookresearch/ParlAI/blob/master/parlai/tasks/task_list.py)

2017-07-20: [ParlAI Request For Proposals: Funding university teams - 7 awards are available - deadline Aug 25](https://research.fb.com/programs/research-awards/proposals/parlai/)

2017-07-20: [added building an (seq2seq) agent tutorial](http://www.parl.ai/static/docs/seq2seq_tutorial.html)

2017-07-12: [Several new tasks added: MS Marco, TriviaQA, InsuranceQA, personalized-dialog and MNIST_QA](https://github.com/facebookresearch/ParlAI/blob/master/parlai/tasks/task_list.py)

2017-06-27: [ExecutableWorld class for interactive worlds with dialog](https://github.com/facebookresearch/ParlAI/pull/170)

2017-06-21: [MTurk now supports multiple assignments per HIT](https://github.com/facebookresearch/ParlAI/pull/156)

2017-06-20: [updated MTurk tutorial to reflect new design](http://parl.ai/static/docs/mturk.html)

2017-06-20: [MTurk now uses general world and agent classes](https://github.com/facebookresearch/ParlAI/pull/128)

2017-06-16: [added Creating a New Task tutorial](http://parl.ai/static/docs/task_tutorial.html)

2017-05-31: [added Seq2Seq model](https://github.com/facebookresearch/ParlAI/pull/96)
Expand Down
35 changes: 18 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
ParlAI (pronounced “par-lay”) is a framework for dialog AI research, implemented in Python.

Its goal is to provide researchers:
- a unified framework for training and testing dialog models
- a unified framework for sharing, training and testing dialog models
- multi-task training over many datasets at once
- seamless integration of [Amazon Mechanical Turk](https://www.mturk.com/mturk/welcome) for data collection and human evaluation


Over 20 tasks are supported in the first release, including popular datasets such as [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/), [bAbI tasks](https://arxiv.org/abs/1502.05698), [MCTest](https://www.microsoft.com/en-us/research/publication/mctest-challenge-dataset-open-domain-machine-comprehension-text/), [WikiQA](https://www.microsoft.com/en-us/download/details.aspx?id=52419), [WebQuestions](http://www.aclweb.org/anthology/D13-1160), [SimpleQuestions](https://arxiv.org/abs/1506.02075), [WikiMovies](https://arxiv.org/abs/1606.03126), [QACNN & QADailyMail](https://arxiv.org/abs/1506.03340), [CBT](https://arxiv.org/abs/1511.02301), [BookTest](https://arxiv.org/abs/1610.00956), [bAbI Dialog tasks](https://arxiv.org/abs/1605.07683), [Ubuntu Dialog](https://arxiv.org/abs/1506.08909), [OpenSubtitles](http://opus.lingfil.uu.se/OpenSubtitles.php), [Cornell Movie](https://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html) and [VQA-COCO2014](http://visualqa.org/).
Over 20 [tasks](https://github.com/facebookresearch/ParlAI/blob/master/parlai/tasks/task_list.py) are currently supported, including popular datasets such as [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/), [bAbI tasks](https://arxiv.org/abs/1502.05698), [MS MARCO](http://www.msmarco.org/), [MCTest](https://www.microsoft.com/en-us/research/publication/mctest-challenge-dataset-open-domain-machine-comprehension-text/), [WikiQA](https://www.microsoft.com/en-us/download/details.aspx?id=52419), [WebQuestions](http://www.aclweb.org/anthology/D13-1160), [SimpleQuestions](https://arxiv.org/abs/1506.02075), [WikiMovies](https://arxiv.org/abs/1606.03126), [QACNN & QADailyMail](https://arxiv.org/abs/1506.03340), [CBT](https://arxiv.org/abs/1511.02301), [BookTest](https://arxiv.org/abs/1610.00956), [bAbI Dialog tasks](https://arxiv.org/abs/1605.07683), [Ubuntu Dialog](https://arxiv.org/abs/1506.08909), [OpenSubtitles](http://opus.lingfil.uu.se/OpenSubtitles.php), [Cornell Movie](https://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html), [VQA-COCO2014](http://visualqa.org/), [VisDial](https://arxiv.org/abs/1611.08669) and [CLEVR](http://cs.stanford.edu/people/jcjohns/clevr/). See [here](http://www.parl.ai/static/docs/tasks.html#) for the current complete task list.

Included are examples of training neural models with [PyTorch](http://pytorch.org/) and [Lua Torch](http://torch.ch/), with batch training on GPU or hogwild training on CPUs. Using [Theano](http://deeplearning.net/software/theano/) or [Tensorflow](https://www.tensorflow.org/) instead is also straightforward.

Expand All @@ -23,6 +22,8 @@ ParlAI is described in the following paper:
We are in an early-release Beta. Expect some adventures and rough edges.<br>
See the [news page](https://github.com/facebookresearch/ParlAI/blob/master/NEWS.md) for the latest additions & updates, and the website [http://parl.ai](http://parl.ai) for further docs.

Please also note there is a [ParlAI Request For Proposals funding university teams, 7 awards are available - deadline Aug 25.](https://research.fb.com/programs/research-awards/proposals/parlai/)

## Goals

Unified framework for evaluation of dialogue models
Expand Down Expand Up @@ -85,14 +86,14 @@ Display the predictions of that same IR baseline model:
python examples/display_model.py -m ir_baseline -t "#moviedd-reddit" -dt valid
```

Train a simple cpu-based memory network on the "10k training examples" bAbI task 1 with 8 threads (python processes) using Hogwild (requires zmq and Lua Torch):
Train a seq2seq model on the "1k training examples" bAbI task 1 with batch size of 8 examples for one epoch (requires pytorch):
```bash
python examples/memnn_luatorch_cpu/full_task_train.py -t babi:task10k:1 -nt 8
python examples/train_model.py -m seq2seq -t babi:task1k:1 -bs 8 -e 1 -mf /tmp/model_s2s
```

Trains an attentive LSTM model on the SQuAD dataset with a batch size of 32 examples (pytorch and regex):
```bash
python examples/train_model.py -m drqa -t squad -bs 32 -mf /tmp/model
python examples/train_model.py -m drqa -t squad -bs 32 -mf /tmp/model_drqa
```

## Requirements
Expand Down Expand Up @@ -124,7 +125,8 @@ All needed data will be downloaded to ~/ParlAI/data, and any non-data files (suc
The main concepts (classes) in ParlAI:
- world - defines the environment (can be very simple, just two agents talking to each other).
- agent – an agent in the world, e.g. the learner. (There can be multiple learners.)
- teacher – a type of agent that talks to the learner, implements one of the tasks listed before.
- teacher – a type of agent that talks to the learner, implements one of the
listed before.

After defining a world and the agents in it, a main loop can be run for training, testing or displaying, which calls the function world.parley(). The skeleton of an example main is given in the left panel, and the actual code for parley() on the right.

Expand Down Expand Up @@ -234,15 +236,13 @@ This directory contains a few particular examples of basic loops.

### Tasks


Over 20 tasks are supported in the first release, including popular datasets such as
SQuAD, bAbI tasks, MCTest, WikiQA, WebQuestions, SimpleQuestions, WikiMovies, QACNN, QADailyMail, CBT, BookTest, bAbI Dialog tasks,
Ubuntu, OpenSubtitles, Cornell Movie and VQA-COCO2014.

Our first release includes the following datasets (shown in the left panel), and accessing one of them is as simple as specifying the name of the task as a command line option, as shown in the dataset display utility (right panel):
Our first release included the following datasets (shown in the left panel), and accessing one of them is as simple as specifying the name of the task as a command line option, as shown in the dataset display utility (right panel):
<p align=center><img width="100%" src="docs/source/\_static/img/tasks.png" /></p>

See [here](https://github.com/facebookresearch/ParlAI/blob/master/parlai/tasks/task_list.py) for the current complete task list.
Over 20 tasks were supported in the first release, including popular datasets such as
SQuAD, bAbI tasks, MCTest, WikiQA, WebQuestions, SimpleQuestions, WikiMovies, QACNN, QADailyMail, CBT, BookTest, bAbI Dialog tasks,
Ubuntu, OpenSubtitles, Cornell Movie, VQA-COCO2014.
Since then, several datasets have been added such as VQAv2, VisDial, MNIST_QA, Personalized Dialog, InsuranceQA, MS MARCO, TriviaQA, and CLEVR. See [here](http://www.parl.ai/static/docs/tasks.html#) for the current complete task list.

Choosing a task in ParlAI is as easy as specifying it on the command line, as shown in the above image (right). If the dataset has not been used before, ParlAI will automatically download it. As all datasets are treated in the same way in ParlAI (with a single dialog API), a dialog agent can in principle switch training and testing between any of them. Even better, one can specify many tasks at once (multi-tasking) by simply providing a comma-separated list, e.g. the command line “-t babi,squad”, to use those two datasets, or even all the QA datasets at once (-t #qa) or indeed every task in ParlAI at once (-t #all). The aim is to make it easy to build and evaluate very rich dialog models.

Expand Down Expand Up @@ -300,17 +300,18 @@ If you have any questions, bug reports or feature requests, please don't hesitat
## The Team
ParlAI is currently maintained by Alexander H. Miller, Will Feng and Jason Weston.
A non-exhaustive list of other major contributors includes:
Adam Fisch, Jiasen Lu, Antoine Bordes, Devi Parikh and Dhruv Batra.
Adam Fisch, Jiasen Lu, Antoine Bordes, Devi Parikh, Dhruv Batra,
Filipe de Avila Belbute Peres and Chao Pan.

## Citation

Please cite the arXiv paper if you use ParlAI in your work:
Please cite the [arXiv paper](https://arxiv.org/abs/1705.06476) if you use ParlAI in your work:

```
@article{miller2017parlai,
title={ParlAI: A Dialog Research Software Platform},
author={{Miller}, A.~H. and {Feng}, W. and {Fisch}, A. and {Lu}, J. and {Batra}, D. and {Bordes}, A. and {Parikh}, D. and {Weston}, J.},
journal={arXiv preprint arXiv:{1705.06476},
journal={arXiv preprint arXiv:{1705.06476}},
year={2017}
}
```
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 9 additions & 12 deletions docs/source/basic_tutorial.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
What is ParlAI?
===============
**Author**: Alexander Holden Miller

It's a python-based platform for enabling dialog AI research.

Expand All @@ -24,19 +25,20 @@ Follow the step by step guide on how to download and install ParlAI.

.. code-block:: bash
git clone https://github.com/facebookresearch/ParlAI.git ~/ParlAI
git clone https://github.com/facebookresearch/ParlAI.git ~/ParlAI
2. Install ParlAI:

.. code-block:: bash
.. code-block:: bash
cd ~/ParlAI; python setup.py develop
cd ~/ParlAI; python setup.py develop
3. Several models have additional requirements:

3. Several models have additional requirements
- DrQA and Seq2Seq require installing `PyTorch <http://pytorch.org/>`_.

a. DrQA requires installing `PyTorch <http://pytorch.org/>`
- MemNN requires installing `Lua Torch <http://torch.ch/docs/getting-started.html>`_.

b. MemNN requires installing `Lua Torch <http://torch.ch/docs/getting-started.html>`

Getting Started
---------------
Expand Down Expand Up @@ -202,11 +204,6 @@ Now that we have our our agent, we'll set up the display loop.
parser = ParlaiParser()
opt = parser.parse_args()
if 'task' not in opt:
# if task not specified from the command line,
# default to the 1000-training example bAbI task 1
opt['task'] = 'babi:task1k:1'
agent = RepeatLabelAgent(opt)
world = create_task(opt, agent)
Expand Down Expand Up @@ -269,5 +266,5 @@ the labels aren't available:
return reply
Of course, we can do much better than randomly guessing. In the next tutorial,
Of course, we can do much better than randomly guessing. In another tutorial,
we'll set up a better agent which learns from the training data.
2 changes: 1 addition & 1 deletion docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ ParlAI is a one-stop-shop for dialog research.

basic_tutorial
task_tutorial
seq2seq_tutorial
mturk

.. toctree::
Expand All @@ -49,7 +50,6 @@ ParlAI is a one-stop-shop for dialog research.
:maxdepth: 1
:caption: Reference Models

memnn_luatorch_cpu
remote_agent
repeat_label

Expand Down
20 changes: 0 additions & 20 deletions docs/source/memnn_luatorch_cpu.rst

This file was deleted.

17 changes: 10 additions & 7 deletions docs/source/mturk.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
Using Mechanical Turk
=====================
**Author**: Will Feng

In ParlAI, you can use Amazon Mechanical Turk for **data collection**, **training** and **evaluation** of your dialog model.
In ParlAI, you can use Amazon Mechanical Turk for **data collection**, **training** and **evaluation** of your dialog model.

Human Turkers are viewed as just another type of agent in ParlAI, and hence person-to-person, person-to-bot, or multiple people and bots in group chat can all talk to each other within the same framework.
Human Turkers are viewed as just another type of agent in ParlAI, and hence person-to-person, person-to-bot, or multiple people and bots in group chat can all talk to each other within the same framework.

The human Turkers communicate in observation/action dict format, the same as all other agents in ParlAI. During the conversation, the message that human Turkers receive is rendered on the live chat webpage in a pretty printed format, similar to the following:

Expand All @@ -35,7 +36,7 @@ We provide a few examples of using Mechanical Turk with ParlAI:
Task 1: Collecting Data
^^^^^^^^^^^^^^^^^^^^^^^

One of the biggest use cases of Mechanical Turk is to collect natural language data from human Turkers.
One of the biggest use cases of Mechanical Turk is to collect natural language data from human Turkers.

As an example, the `QA Data Collection task <https://github.com/facebookresearch/ParlAI/blob/master/parlai/mturk/tasks/qa_data_collection/>`__ does the following:

Expand All @@ -61,7 +62,7 @@ You can easily evaluate your dialog model's performance with human Turkers using

In ``ModelEvaluatorWorld``, there are two main components: one is the ``task_world`` that contains the task and the dialog model we are evaluating, the other is the ``MTurkAgent`` which is an interface to the human Turker.

Note that since the human Turker speaks only once to provide the rating, the ``ModelEvaluatorWorld`` doesn't need to use ``turn_index`` to keep track of the turns.
Note that since the human Turker speaks only once to provide the rating, the ``ModelEvaluatorWorld`` doesn't need to use ``turn_index`` to keep track of the turns.

After one turn, the task is finished, and the Turker's work is submitted for your review.

Expand All @@ -77,12 +78,14 @@ This task uses the ``MultiAgentDialogWorld`` which is already implemented in ``p
Creating Your Own Task
----------------------

ParlAI provides a generic MTurk dialog interface that one can use to implement any kind of dialog tasks. To create your own task, start with reading the tutorials on the provided examples, and then copy and modify the example ``worlds.py``, ``run.py`` and ``task_config.py`` files to create your task.
ParlAI provides a generic MTurk dialog interface that one can use to implement any kind of dialog tasks. To create your own task, start with reading the tutorials on the provided examples, and then copy and modify the example ``worlds.py``, ``run.py`` and ``task_config.py`` files to create your task.

A few things to keep in mind:

1. To end a conversation, you should send a message with ``episode_done = True`` from the first non-MTurk agent, and the conversation is ended after all MTurk agents respond.
2. Make sure to test your dialog task using MTurk's sandbox mode before pushing it live, by using the ``--sandbox`` flag (enabled by default) when running ``run.py``.
2. In ``run.py``, You can use ``hit_index`` and ``assignment_index`` to differentiate between different HITs and assignments, and change the content of the task accordingly.
3. Make sure to test your dialog task using MTurk's sandbox mode before pushing it live, by using the ``--sandbox`` flag (enabled by default) when running ``run.py``.
4. [Optional] If you want to show a custom webpage (instead of the default one) for any of your MTurk agents, you can create an ``html`` folder within your task directory, and then create the ``<mturk_agent_id>_cover_page.html`` and ``<mturk_agent_id>_index.html`` files within the ``html`` directory. In those files, you can extend from ``core.html`` and override any code blocks that you want to change. (Please look at `parlai/mturk/core/html/mturk_index.html <https://github.com/facebookresearch/ParlAI/blob/master/parlai/mturk/core/html/mturk_index.html>`__ as an example.) These agent-specific templates will automatically be shown to the Turkers in the next run.


Running a Task
Expand Down Expand Up @@ -118,7 +121,7 @@ Please make sure to test your task in MTurk sandbox mode first (``--sandbox``) b
Reviewing Turker's Work
-----------------------

After all HITs are completed, you will be provided a webpage link to review them.
After all HITs are completed, you will be provided a webpage link to review them.

If you don't take any action in 4 weeks, all HITs will be auto-approved and Turkers will be paid.

Expand Down
Loading

0 comments on commit 1270f80

Please sign in to comment.