{"action":"created","issue":{"url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/54","repository_url":"https://api.github.com/repos/TeHikuMedia/corpora","labels_url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/54/labels{/name}","comments_url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/54/comments","events_url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/54/events","html_url":"https://github.com/TeHikuMedia/corpora/issues/54","id":343462855,"node_id":"MDU6SXNzdWUzNDM0NjI4NTU=","number":54,"title":"Possible improvements for training ML models","user":{"login":"mathematiguy","id":11322313,"node_id":"MDQ6VXNlcjExMzIyMzEz","avatar_url":"https://avatars3.githubusercontent.com/u/11322313?v=4","gravatar_id":"","url":"https://api.github.com/users/mathematiguy","html_url":"https://github.com/mathematiguy","followers_url":"https://api.github.com/users/mathematiguy/followers","following_url":"https://api.github.com/users/mathematiguy/following{/other_user}","gists_url":"https://api.github.com/users/mathematiguy/gists{/gist_id}","starred_url":"https://api.github.com/users/mathematiguy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mathematiguy/subscriptions","organizations_url":"https://api.github.com/users/mathematiguy/orgs","repos_url":"https://api.github.com/users/mathematiguy/repos","events_url":"https://api.github.com/users/mathematiguy/events{/privacy}","received_events_url":"https://api.github.com/users/mathematiguy/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2018-07-23T01:58:55Z","updated_at":"2018-07-26T07:07:09Z","closed_at":null,"author_association":"NONE","body":"Following our discussion on https://github.com/TeHikuMedia/waha-tuhi/issues/75#issuecomment-406912192 - I can think of a few ideas that could be quite useful.\r\n\r\nAt the moment, the first step of the prepare process is to build up a table locally according to the schema below, which is basically a snapshot of the API which gets partitioned into training and test sets. Possibly we will be able to move some of those parts into the API where they only need to be calculated once.\r\n\r\n### Transcript Data Schema\r\n```\r\n- recording_id : int <-- suffices for a primary key (enforce this)\r\n- sentence_id : int\r\n- speaker_id : int\r\n- transcript : str\r\n- approves : int?\r\n- upvotes : int?\r\n- downvotes : int?\r\n- downloaded : datetime\r\n- holdout_speaker : bool\r\n- holdout_sentence : bool\r\n- normalized_transcript: str\r\n- wav_hash : str\r\n- wav_ok : bool\r\n```\r\n\r\nWith the exception of `holdout_speaker` and `holdout_sentence`, each of these values really only need to be calculated once for each transcript. With that said, deciding whether a given speaker or sentence is heldout is actually done by hashing the `speaker_id` or `sentence_id` respectively into a floating point from 0 to 1, and thresholding that as a means of random sampling.\r\n\r\nBecause of this, we could attach the seeds to the API and set the thresholds in the config file for training. So there really isn't a reason why the columns couldn't all be included in the API, technically speaking.\r\n\r\nHappy to discuss on Tuesday by video conference."},"comment":{"url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/comments/407998754","html_url":"https://github.com/TeHikuMedia/corpora/issues/54#issuecomment-407998754","issue_url":"https://api.github.com/repos/TeHikuMedia/corpora/issues/54","id":407998754,"node_id":"MDEyOklzc3VlQ29tbWVudDQwNzk5ODc1NA==","user":{"login":"kmahelona","id":5294466,"node_id":"MDQ6VXNlcjUyOTQ0NjY=","avatar_url":"https://avatars3.githubusercontent.com/u/5294466?v=4","gravatar_id":"","url":"https://api.github.com/users/kmahelona","html_url":"https://github.com/kmahelona","followers_url":"https://api.github.com/users/kmahelona/followers","following_url":"https://api.github.com/users/kmahelona/following{/other_user}","gists_url":"https://api.github.com/users/kmahelona/gists{/gist_id}","starred_url":"https://api.github.com/users/kmahelona/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kmahelona/subscriptions","organizations_url":"https://api.github.com/users/kmahelona/orgs","repos_url":"https://api.github.com/users/kmahelona/repos","events_url":"https://api.github.com/users/kmahelona/events{/privacy}","received_events_url":"https://api.github.com/users/kmahelona/received_events","type":"User","site_admin":false},"created_at":"2018-07-26T07:07:08Z","updated_at":"2018-07-26T07:07:08Z","author_association":"CONTRIBUTOR","body":"- wav_hash\r\nThis will be added as `audio_file_md5`. It will take some time to ensure I do this correctly and that all ~200k recordings are updated. I'm testing this on our staging server atm.\r\n\r\n- wav_ok\r\nI'd suggest just sending a QC with `delete=True`. If the file doesn't exist, something happened along the way (we had bugs in the beginning), so just flag for deletion. We haven't implemented anything yet that deletes recordings, `delete=True` is just a flag until we decide when/how to delete recordings. So on that note make sure you don't include recordings with `delete=True` in your training set.\r\n\r\n- people ids\r\nCool, I'll keep this as it is. One option is the `person` field could return a dictionary instead of an ID and I could put the UUID and other anonymous attributes in there. That would change the current API in a way that would affect you, and we currently don't have any API versioning.\r\n\r\n### Posting a QualityControl\r\nCheck out https://koreromaori.com/api/qualitycontrol/ and https://koreromaori.com/docs/#api-qualitycontrol-create for how to post a QC object. `object_id` is the ID of the recording, and `content_type` will be the ID for the Recording model which is `8`. I should update that to take a string e.g. 'recording'...\r\n"}}
{"actor":{"display_login":"kmahelona"}}