{"id":16610049,"url":"https://github.com/xinjli/allosaurus","last_synced_at":"2025-10-29T17:30:51.602Z","repository":{"id":41527381,"uuid":"240114578","full_name":"xinjli/allosaurus","owner":"xinjli","description":"Allosaurus is a pretrained universal phone recognizer for more than 2000 languages","archived":false,"fork":false,"pushed_at":"2024-04-26T17:50:33.000Z","size":468,"stargazers_count":573,"open_issues_count":39,"forks_count":88,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-12-15T01:06:01.495Z","etag":null,"topics":["phonetics","pytorch","speech","speech-recognition"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xinjli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-12T21:02:30.000Z","updated_at":"2024-12-06T13:11:30.000Z","dependencies_parsed_at":"2022-08-24T18:50:46.151Z","dependency_job_id":"b12137b2-ffb0-415f-ad75-9b6db9bf0bb5","html_url":"https://github.com/xinjli/allosaurus","commit_stats":{"total_commits":48,"total_committers":8,"mean_commits":6.0,"dds":0.1875,"last_synced_commit":"d9f1adaf47d3b3765b41f4177da62a051516d636"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xinjli%2Fallosaurus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xinjli%2Fallosaurus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xinjli%2Fallosaurus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xinjli%2Fallosaurus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xinjli","download_url":"https://codeload.github.com/xinjli/allosaurus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238856067,"owners_count":19542139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["phonetics","pytorch","speech","speech-recognition"],"created_at":"2024-10-12T01:29:25.750Z","updated_at":"2025-10-29T17:30:46.183Z","avatar_url":"https://github.com/xinjli.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Allosaurus\n\n![CI Test](https://github.com/xinjli/allosaurus/actions/workflows/python.yml/badge.svg)\n\nAllosaurus is a pretrained universal phone recognizer. It can be used to recognize phones in more than 2000 languages.\n\nThis tool is based on our ICASSP 2020 work [Universal Phone Recognition with a Multilingual Allophone System](https://arxiv.org/pdf/2002.11800.pdf)\n\n![Architecture](arch.png?raw=true \"Architecture\")\n\n## Get Started\n\n### Install\nAllosaurus is available from pip\n```bash\npip install allosaurus\n```\n \nYou can also clone this repository and install \n```bash\npython setup.py install\n```\n\n### Quick start\nThe basic usage is pretty simple, your input is an wav audio file and output is a sequence of phones.\n\n```bash\npython -m allosaurus.run  -i \u003caudio\u003e\n```\n\nFor example, you can try using the attached sample file in this repository. Guess what's in this audio file :)\n```bash\npython -m allosaurus.run -i sample.wav\næ l u s ɔ ɹ s\n```\n\nYou can also use allosaurus directly in python\n```python\nfrom allosaurus.app import read_recognizer\n\n# load your model\nmodel = read_recognizer()\n\n# run inference -\u003e æ l u s ɔ ɹ s\nmodel.recognize('sample.wav')\n```\n\nFor full features and details, please refer to the following sections.\n\n## Inference \nThe command line interface is as follows:\n \n```bash\npython -m allosaurus.run [--lang \u003clanguage name\u003e] [--model \u003cmodel name\u003e] [--device_id \u003cgpu_id\u003e] [--output \u003coutput_file\u003e] [--topk \u003cint\u003e] -i \u003caudio file/directory\u003e\n```\nIt will recognize the narrow phones in the audio file(s).\nOnly the input argument is mandatory, other options can ignored. Please refer to following sections for their details. \n\nThere is also a simple python interface as follows:\n```python\nfrom allosaurus.app import read_recognizer\n\n# load your model by the \u003cmodel name\u003e, will use 'latest' if left empty\nmodel = read_recognizer(model)\n\n# run inference on \u003caudio_file\u003e with \u003clang\u003e, lang will be 'ipa' if left empty\nmodel.recognize(audio_file, lang)\n```\n\nThe details of arguments in both interface are as follows:\n### Input\nThe input can be a single file or a directory containing multiple audio files.\n\nIf the input is a single file, it will output only the phone sequence; if the input is a directory, it will output both the file name and phone sequence, results will be sorted by file names. \n\nThe audio file(s) should be in the following format:\n\n* It should be a wav file. If the audio is not in the wav format, please convert your audio to a wav format using sox or ffmpeg in advance.\n\n* The sampling rate can be arbitrary, we will automatically resample them based on models' requirements.\n\n* We assume the audio is a mono-channel audio.\n\n### Output\nThe output is by default stdout (i.e. it will print all results to terminal).\n\nIf you specify a file as the output, then all output will be directed to that file.\n\n### Language\nThe `lang` option is the language id. It is to specify the phone inventory you want to use.\nThe default option is `ipa` which tells the recognizer to use the the entire inventory (around 230 phones).\n\nGenerally, specifying the language inventory can improve your recognition accuracy.\n\nYou can check the full language list with the following command. The number of available languages is around 2000. \n```bash\npython -m allosaurus.bin.list_lang\n```\n\nTo check language's inventory you can use following command\n```bash\npython -m allosaurus.bin.list_phone [--lang \u003clanguage name\u003e]\n```\n\nFor example,\n```bash\n# to get English phone inventory\n# ['a', 'aː', 'b', 'd', 'd̠', 'e', 'eː', 'e̞', 'f', 'h', 'i', 'iː', 'j', 'k', 'kʰ', 'l', 'm', 'n', 'o', 'oː', 'p', 'pʰ', 'r', 's', 't', 'tʰ', 't̠', 'u', 'uː', 'v', 'w', 'x', 'z', 'æ', 'ð', 'øː', 'ŋ', 'ɐ', 'ɐː', 'ɑ', 'ɑː', 'ɒ', 'ɒː', 'ɔ', 'ɔː', 'ɘ', 'ə', 'əː', 'ɛ', 'ɛː', 'ɜː', 'ɡ', 'ɪ', 'ɪ̯', 'ɯ', 'ɵː', 'ɹ', 'ɻ', 'ʃ', 'ʉ', 'ʉː', 'ʊ', 'ʌ', 'ʍ', 'ʒ', 'ʔ', 'θ']\npython -m allosaurus.bin.list_phone --lang eng\n\n# you can also skip lang option to get all inventory\n#['I', 'a', 'aː', 'ã', 'ă', 'b', 'bʲ', 'bʲj', 'bʷ', 'bʼ', 'bː', 'b̞', 'b̤', 'b̥', 'c', 'd', 'dʒ', 'dʲ', 'dː', 'd̚', 'd̥', 'd̪', 'd̯', 'd͡z', 'd͡ʑ', 'd͡ʒ', 'd͡ʒː', 'd͡ʒ̤', 'e', 'eː', 'e̞', 'f', 'fʲ', 'fʷ', 'fː', 'g', 'gʲ', 'gʲj', 'gʷ', 'gː', 'h', 'hʷ', 'i', 'ij', 'iː', 'i̞', 'i̥', 'i̯', 'j', 'k', 'kx', 'kʰ', 'kʲ', 'kʲj', 'kʷ', 'kʷʼ', 'kʼ', 'kː', 'k̟ʲ', 'k̟̚', 'k͡p̚', 'l', 'lʲ', 'lː', 'l̪', 'm', 'mʲ', 'mʲj', 'mʷ', 'mː', 'n', 'nj', 'nʲ', 'nː', 'n̪', 'n̺', 'o', 'oː', 'o̞', 'o̥', 'p', 'pf', 'pʰ', 'pʲ', 'pʲj', 'pʷ', 'pʷʼ', 'pʼ', 'pː', 'p̚', 'q', 'r', 'rː', 's', 'sʲ', 'sʼ', 'sː', 's̪', 't', 'ts', 'tsʰ', 'tɕ', 'tɕʰ', 'tʂ', 'tʂʰ', 'tʃ', 'tʰ', 'tʲ', 'tʷʼ', 'tʼ', 'tː', 't̚', 't̪', 't̪ʰ', 't̪̚', 't͡s', 't͡sʼ', 't͡ɕ', 't͡ɬ', 't͡ʃ', 't͡ʃʲ', 't͡ʃʼ', 't͡ʃː', 'u', 'uə', 'uː', 'u͡w', 'v', 'vʲ', 'vʷ', 'vː', 'v̞', 'v̞ʲ', 'w', 'x', 'x̟ʲ', 'y', 'z', 'zj', 'zʲ', 'z̪', 'ä', 'æ', 'ç', 'çj', 'ð', 'ø', 'ŋ', 'ŋ̟', 'ŋ͡m', 'œ', 'œ̃', 'ɐ', 'ɐ̞', 'ɑ', 'ɑ̱', 'ɒ', 'ɓ', 'ɔ', 'ɔ̃', 'ɕ', 'ɕː', 'ɖ̤', 'ɗ', 'ə', 'ɛ', 'ɛ̃', 'ɟ', 'ɡ', 'ɡʲ', 'ɡ̤', 'ɡ̥', 'ɣ', 'ɣj', 'ɤ', 'ɤɐ̞', 'ɤ̆', 'ɥ', 'ɦ', 'ɨ', 'ɪ', 'ɫ', 'ɯ', 'ɯ̟', 'ɯ̥', 'ɰ', 'ɱ', 'ɲ', 'ɳ', 'ɴ', 'ɵ', 'ɸ', 'ɹ', 'ɹ̩', 'ɻ', 'ɻ̩', 'ɽ', 'ɾ', 'ɾj', 'ɾʲ', 'ɾ̠', 'ʀ', 'ʁ', 'ʁ̝', 'ʂ', 'ʃ', 'ʃʲː', 'ʃ͡ɣ', 'ʈ', 'ʉ̞', 'ʊ', 'ʋ', 'ʋʲ', 'ʌ', 'ʎ', 'ʏ', 'ʐ', 'ʑ', 'ʒ', 'ʒ͡ɣ', 'ʔ', 'ʝ', 'ː', 'β', 'β̞', 'θ', 'χ', 'ә', 'ḁ']\npython -m allosaurus.bin.list_phone\n```\n\n### Model\nThe `model` option is to select model for inference.\nThe default option is `latest`, it is pointing to the latest model you downloaded. \nIt will automatically download the latest model during your first inference if you do not have any local models. \n\n\nWe intend to train new models and continuously release them. The update might include both acoustic model binary files and phone inventory. \nTypically, the model's name indicates its training date, so usually a higher model id should be expected to perform better.\n\nTo download a new model, you can run following command.\n\n```bash\npython -m allosaurus.bin.download_model -m \u003cmodel\u003e\n```\n\nIf you do not know the model name, \nyou can just use `latest` as model's name and it will automatically download the latest model.\n\nWe note that updating to a new model will not delete the original models. All the models will be stored under `pretrained` directory where you installed allosaurus.\nYou might want to fix your model to get consistent results during one experiment.  \n\nTo see which models are available in your local environment, you can check with the following command\n```bash\npython -m allosaurus.bin.list_model\n```\n\nTo delete a model, you can use the following command. This might be useful when you are fine-tuning your models mentioned later. \n```bash\npython -m allosaurus.bin.remove_model\n```\n\nCurrent available models are the followings\n\n#### Language Independent Model (Universal Model) \nThe universal models predict language-independent phones and covers many languages. This is the default model allosaurus will try to download and use.\n If you cannot find your language on the language dependent models, please use this universal model instead. \n\n| Model | Target Language | Description |\n| --- | --- | --- |\n| `uni2005` | Universal | This is the `latest` model (previously named as `200529`) |\n\n#### Language Dependent Model\nWe are planning to deliver language-dependent models for some widely-used languages. The models here are trained with the target language specifically.\nIt should perform much better than the universal model for the target language. Those models will not be downloaded automatically. Please use the `download_model` command above to download, and use `--model` flag during inference. \n\n| Model | Target Language | Description |\n| --- | --- | --- |\n| `eng2102` | English (eng) | English only model|\n\n### Device\n`device_id` controls which device to run the inference.\n\nBy default, device_id will be -1, which indicates the model will only use CPUs.  \n\nHowever, if you have GPU, You can use them for inference by specifying device_id to a single GPU id. (note that multiple GPU inference is not supported)\n\n### Timestamp\nYou can retrieve an approximate timestamp for each recognized phone by using `timestamp` argument.\n\n```bash \npython -m allosaurus.run --timestamp=True -i sample.wav \n0.210 0.045 æ\n0.390 0.045 l\n0.450 0.045 u\n0.540 0.045 s\n0.630 0.045 ɔ\n0.720 0.045 ɹ\n0.870 0.045 s\n```\n\nThe format here in each line is `start_timestamp duration phone` where the `start_timestamp` and `duration` are shown in seconds.\n\nNote that the current timestamp is only an approximation. It is provided by the CTC model, which might not be accurate in some cases due to its nature. \n\nThe same interface is also available in python as follows:\n\n```python\nmodel = read_recognizer()\nmodel.recognize('./sample.wav', timestamp=True)\n```\n\n\n### Top K\nSometimes generating more phones might be helpful. Specifying the top-k arg will generate k phones at each emitting frame. Default is 1.\n \n```bash\n# default topk is 1\npython -m allosaurus.run -i sample.wav\næ l u s ɔ ɹ s\n\n# output top 5 probable phones at emitting frame, \"|\" is used to delimit frames (no delimiter when topk=1)\n# probability is attached for each phone, the left most phone is the most probable phone \n# \u003cblk\u003e is blank which can be ignored.\npython -m allosaurus.run -i sample.wav --topk=5\næ (0.577) ɛ (0.128) ɒ (0.103) a (0.045) ə (0.021) | l (0.754) l̪ (0.196) lː (0.018) ʁ (0.007) ʀ (0.006) | u (0.233) ɨ (0.218) uː (0.104) ɤ (0.070) ɪ (0.066) | s (0.301) \u003cblk\u003e (0.298) z (0.118) s̪ (0.084) sː (0.046) | ɔ (0.454) ɑ (0.251) \u003cblk\u003e (0.105) ɹ̩ (0.062) uə (0.035) | ɹ (0.867) ɾ (0.067) \u003cblk\u003e (0.024) l̪ (0.018) r (0.015) | s (0.740) z (0.191) s̪ (0.039) zʲ (0.009) sː (0.003)\n```\n\n### Phone Emission\nYou can tell the model to emit more phones or less phones by changing the `--emit` or `-e` argument.\n\n```bash\n# default emit is 1.0\npython -m allosaurus.run -i sample.wav \næ l u s ɔ ɹ s\n\n# emit more phones when emit \u003e 1\npython -m allosaurus.run -e 1.2 -i sample.wav \næ l u s f h ɔ ɹ s\n\n# emit less phones when emit \u003c 1\npython -m allosaurus.run -e 0.8 -i sample.wav \næ l u ɹ s\n```\n\n\n## Inventory Customization\nThe default phone inventory might not be the inventory you would like to use, so we provide several commands here for you to customize your own inventory.\n\nWe have mentioned that you can check your current (default) inventory with following command.\n```bash\npython -m allosaurus.bin.list_phone --lang \u003clanguage name\u003e\n```\n\nThe current phone inventory file can be dumped into a file\n```bash\n# dump the phone file\npython -m allosaurus.bin.write_phone --lang \u003clanguage name\u003e --output \u003ca path to save this file\u003e\n```\n\nIf you take a look at the file, it is just a simple format where each line represents a single phone. For example, the following one is the English file \n```\na\naː\nb\nd\n...\n```\n\nYou can customize this file to add or delete IPAs you would like. Each line should only contain one IPA phone without any space. It might be easier to debug later if IPAs are sorted, but it is not required.\n\nNext, update your model's inventory by the following command\n```bash\npython -m allosaurus.bin.update_phone --lang \u003clanguage name\u003e --input \u003cthe file you customized)\n``` \n\nThen the file has been registered in your model, run the list_phone command again and you could see that it is now using your updated inventory\n```bash\npython -m allosaurus.bin.list_phone --lang \u003clanguage name\u003e\n```\n\nNow, if you run the inference again, you could also see the results also reflect your updated inventory.\n\nEven after your update, you can easily switch back to the original inventory. In this case, your updated file will be deleted.\n```bash\npython -m allosaurus.bin.restore_phone --lang \u003clanguage name\u003e\n```\n\n## Prior Customization\nYou can also change the results by adjusting the prior probability for each phone. \nThis can help you reduce the unwanted phones or increase the wanted phones.\n\nFor example, in the sample file, we get the output \n```bash\næ l u s ɔ ɹ s\n```\nSuppose you think the first phone is wrong, and would like to reduce the probability of this phone, you can create a new file ```prior.txt``` as follows\n```text\næ -10.0\n```\n\nThe file can contain multiple lines and each line has information for each phone. \nThe first field is your target phone and the second field is the log-based score to adjust your probability. Positive score means you want to boost its prediction, \nnegative score will suppress its prediction. In this case, we can get a new result\n\n```bash\npython -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt \nɛ l u s ɔ ɹ s\n```\n\nwhere you can see ```æ``` is suppressed and another vowel ```ɛ``` replaced it.\n\nAnother application of prior is to change the number of total output phones. You might want more phones outputs or less phones outputs.\nIn this case, you can change the score for the ```\u003cblk\u003e``` which corresponds to the silence phone.\n\nA positive ```\u003cblk\u003e``` score will add more silence, therefore decrease the number of outputs, similarly, a negative ```\u003cblk\u003e``` will increase the outputs. The following example illustrates this.\n```text\n\n# \u003cblk\u003e 1.0\npython -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt \næ l u ɔ ɹ s\n\n# \u003cblk\u003e -1.0\n$ python -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt \næ l u s f ɔ ɹ s\n```\n\nThe first example reduces one phone and the second example adds a new phone.\n\n## Fine-Tuning\nWe notice that the pretrained models might not be accurate enough for some languages, \nso we also provide a fine-tuning tool here to allow users to further improve their model by adapting to their data.\nCurrently, it is only limited to fine-tuned with one language.\n\n### Prepare\nTo fine-tune your data, you need to prepare audio files and their transcriptions.\nFirst, please create one data directory (name can be arbitrary), inside the data directory, create a `train` directory and a `validate` directory.\nObviously, the `train` directory will contain your training set, and the `validate` directory will be the validation set. \n\nEach directory should contain the following two files:\n* `wave`: this is a file associating utterance with its corresponding audios \n* `text`: this is a file associating utterance with its phones.\n\n#### wave\n`wave` is a txt file mapping each utterance to your wav files. Each line should be prepared as follows:\n```txt\nutt_id /path/to/your/audio.wav\n```\n\nHere `utt_id` denotes the utterance id, it can be an arbitrary string as long as it is unique in your dataset.\nThe `audio.wav` is your wav file as mentioned above, it should be a mono-channel wav format, but sampling rate can be arbitrary (the tool would automatically resample if necessary)\nThe delimiter used here is space.\n\nTo get the best fine-tuning results, each audio file should not be very long. We recommend to keep each utterance shorter than 10 seconds. \n  \n#### text\n`text` is another txt file mapping each utterance to your transcription. Each line should be prepared as follows\n```txt\nutt_id phone1 phone2 ...\n```\n\nHere `utt_id` is again the utterance id and should match with the corresponding wav file.\nThe phone sequences came after utterance id is your phonetic transcriptions of the wav file.\nThe phones here should be restricted to the phone inventory of your target language.\nPlease make sure all your phones are already registered in your target language by the `list_phone` command\n\n### Feature Extraction\nNext, we will extract feature from both the `wave` file and `text` file.\nWe assume that you already prepared `wave` file and `text` file in BOTH `train` directory and `validate` directory\n\n\n#### Audio Feature\nTo prepare the audio features, run the following command on both your `train` directory and `validate` directory. \n\n```bash\n# command to prepare audio features\npython -m allosaurus.bin.prep_feat --model=some_pretrained_model --path=/path/to/your/directory (train or validate)\n```\n\nThe `path` should be pointing to the train or the validate directory, the `model` should be pointing to your traget pretrained model. If unspecified, it will use the latest model. \nIt will generate three files `feat.scp`, `feat.ark` and `shape`.\n \n* The first one is an file indexing each utterance into a offset of the second file.\n\n* The second file is a binary file containing all audio features. \n\n* The third one contains the feature dimension information  \n\nIf you are curious, the `scp` and `ark` formats are standard file formats used in Kaldi.\n\n### Text Feature\nTo prepare the text features, run the following command again on both your `train` directory and `validate` directory. \n\n```bash\n# command to prepare token\npython -m allosaurus.bin.prep_token --model=\u003csome_pretrained_model\u003e --lang=\u003cyour_target_language_id\u003e --path=/path/to/your/directory (train or validate)\n```\n\nThe `path` and `model` should be the same as the previous command. The `lang` is the 3 character ISO language id of this dataset.\nNote that you should already verify the the phone inventory of this language id contains all of your phone transcriptions.\nOtherwise, the extraction here might fail.\n\nAfter this command, it will generate a file called `token` which maps each utterance to the phone id sequences.\n\n\n### Training\nNext, we can start fine-tuning our model with the dataset we just prepared. The fine-tuning command is very simple.\n\n```bash\n# command to fine_tune your data\npython -m allosaurus.bin.adapt_model --pretrained_model=\u003cpretrained_model\u003e --new_model=\u003cyour_new_model\u003e --path=/path/to/your/data/directory --lang=\u003cyour_target_language_id\u003e --device_id=\u003cdevice_id\u003e --epoch=\u003cepoch\u003e\n```\nThere are couple of other optional arguments available here, but we describe the required arguments. \n \n* `pretrained_model` should be the same model you specified before in the `prep_token` and `prep_feat`.\n \n* `new_model` can be an arbitrary model name (Actually, it might be easier to manage if you give each model the same format as the pretrained model (i.e. YYMMDD))\n\n* The `path` should be pointing to the parent directory of your `train` and `validate` directories.\n\n* The `lang` is the language id you specified in `prep_token`\n\n* The `device_id` is the GPU id for fine-tuning, if you do not have any GPU, use -1 as device_id. Multiple GPU is not supported.\n\n* `epoch` is the number of your training epoch\n\n\nDuring the training, it will show some information such as loss and phone error rate for both your training set and validation set.\nAfter each epoch, the model would be evaluated with the validation set and would save this checkpoint if its validation phone error rate is better than previous ones.\nAfter the specified `epoch` has finished, the fine-tuning process will end and the new model should be available.\n\n### Testing\nAfter your training process, the new model should be available in your model list. use the `list_model` command to check your new model is available now\n\n```bash\n# command to check all your models\npython -m allosaurus.bin.list_model\n```\n\nIf it is available, then this new model can be used in the same style as any other pretrained models. \nJust run the inference to use your new model. \n```bash\npython -m allosaurus.run --lang \u003clanguage id\u003e --model \u003cyour new model\u003e --device_id \u003cgpu_id\u003e -i \u003caudio\u003e\n```\n\n\n\n## Acknowledgements\nThis work uses part of the following codes and inventories. In particular, we heavily used AlloVera and Phoible to build this model's phone inventory.  \n\n* [AlloVera](https://github.com/dmort27/allovera): For pretraining the model with correct allophone mappings \n* [Phoible](https://github.com/phoible/dev): For language specific phone inventory \n* [python_speech_features](https://github.com/jameslyons/python_speech_features): For mfcc, filter bank feature extraction\n* [fairseq](https://github.com/pytorch/fairseq): For some utilities\n* [kaldi_io](https://github.com/vesis84/kaldi-io-for-python): For kaldi scp, ark reader and writer\n\n## Reference\nPlease cite the following paper if you use code in  your work.\n\nIf you have any advice or suggestions, please feel free to send email to me (xinjianl [at] cs.cmu.edu) or submit an issue in this repo. Thanks!    \n\n```BibTex\n@inproceedings{li2020universal,\n  title={Universal phone recognition with a multilingual allophone system},\n  author={Li, Xinjian and Dalmia, Siddharth and Li, Juncheng and Lee, Matthew and Littell, Patrick and Yao, Jiali and Anastasopoulos, Antonios and Mortensen, David R and Neubig, Graham and Black, Alan W and Florian, Metze},\n  booktitle={ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},\n  pages={8249--8253},\n  year={2020},\n  organization={IEEE}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxinjli%2Fallosaurus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxinjli%2Fallosaurus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxinjli%2Fallosaurus/lists"}