Lhotse هي مكتبة Python تهدف إلى جعل إعداد بيانات الكلام والصوت مرنًا ويمكن الوصول إليه لمجتمع أوسع. إلى جانب K2 ، إنها جزء من مكتبة معالجة الكلام Kaldi القادمة.
لدينا حاليًا البرامج التعليمية التالية المتاحة في دليل examples
:
تحقق من الروابط التالية لمعرفة كيفية استخدام Lhotse:
مثل Kaldi ، يوفر Lhotse وصفات تحضير البيانات القياسية ، ولكن يمتد ذلك مع تكامل Pytorch سلس من خلال فئات مجموعات البيانات الخاصة بالمهمة. يتم تمثيل البيانات والبيانات الوصفية في النص القابل للقراءة البشرية ويتعرض للمستخدم من خلال فئات بيثون مريحة.
يقدم Lhotse فكرة التخفيضات الصوتية ، المصممة لتخفيف بناء بيانات التدريب مع عمليات مثل الخلط والاقتطاع والحشو التي يتم تنفيذها على نحو الحد الأقصى لتقليل كمية التخزين المطلوبة. يتم دعم زيادة البيانات واستخراج الميزات في الوضع المسبق مسبقًا ، مع تخزين مصفوفات الميزات ذات الضغط العالي على القرص ، ووضع أثناء الطيران الذي يحسب التحولات عند الطلب. بالإضافة إلى ذلك ، يقدم Lhotse خلطًا للفضاء الميزات لتحقيق أفضل ما في العالمين.
Lhotse يدعم Python الإصدار 3.7 ثم في وقت لاحق.
Lhotse متاح على Pypi:
pip install lhotse
لتثبيت أحدث إصدار غير منشور ، افعل:
pip install git+https://github.com/lhotse-speech/lhotse
لتركيب التطوير ، يمكنك شوك/استنساخ Github Repo والتثبيت مع PIP:
git clone https://github.com/lhotse-speech/lhotse
cd lhotse
pip install -e '.[dev]'
pre-commit install # installs pre-commit hooks with style checks
# Running unit tests
pytest test
# Running linter checks
pre-commit run
هذا تثبيت قابل للتحرير (خيار -e
) ، وهذا يعني أن التغييرات الخاصة بك على الكود المصدري تنعكس تلقائيًا عند استيراد LHOTSE (لا يلزم إعادة التثبيت). يعني الجزء [dev]
أنك تقوم بتثبيت تبعيات إضافية تستخدم لتشغيل الاختبارات أو بناء وثائق أو تشغيل دفاتر Jupyter.
يستخدم Lhotse العديد من متغيرات البيئة لتخصيص سلوكه. هم على النحو التالي:
LHOTSE_REQUIRE_TORCHAUDIO
- عندما يتم تعيينه وليس أي من 1|True|true|yes
، لن نتحقق من تثبيت Torchaudio وإزالته من المتطلبات. سيؤدي ذلك إلى تعطيل العديد من وظائف LHOTSE ولكن القدرات الأساسية ستبقى (بما في ذلك قراءة الصوت مع soundfile
).LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE
- يستخدم عندما نقوم بتحميل الصوت من ملف وتلقي عدد مختلف من العينات من المعلن في Recording.num_samples
. هذا ضروري في بعض الأحيان لأن برامج الترميز المختلفة (أو حتى الإصدارات المختلفة من نفس الترميز) قد تستخدم حشوة مختلفة عند فك تشفير الصوت المضغوط. عادة ما لا تزال القيم التي تصل إلى 0.1 ، أو حتى 0.3 (ثانية) معقولة ، وأي شيء يتجاوز ذلك يشير إلى وجود مشكلة خطيرة.LHOTSE_AUDIO_BACKEND
على أي من القيم التي يتم إرجاعها من Cli lhotse list-audio-backends
لتجاوز السلوك الافتراضي للتجربة والخطأ واستخدام الواجهة الخلفية الصوتية المحددة دائمًا.LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE
- عندما يتم تعيينه على 1
سننبعث من آثار مكدس الاستثناء الكاملة عندما تفشل كل الواجهة الخلفية الصوتية المتاحة في تحميل ملف معين (قد تكون كبيرة جدًا).LHOTSE_DILL_ENABLED
- عندما يتم تعيينه على 1|True|true|yes
، سنمكّن التسلسل القائم على dill
من CutSet
وأخذ Sampler
عبر العمليات (يتم تعطيله بشكل افتراضي حتى عند تثبيت dill
).LHOTSE_LEGACY_OPUS_LOADING
- ( =1
) يعود إلى آلية تحميل OPUS LEGACY التي أثارت عملية فرعية جديدة FFMPEG لكل ملف OPUS.LHOTSE_PREPARING_RELEASE
- يستخدم داخليًا من قبل المطورين عند إصدار إصدار جديد من Lhotse.TORCHAUDIO_USE_BACKEND_DISPATCHER
- عند ضبطه على 1
ونسخة Torchaudio أقل من 2.1 ، سنقوم بتمكين الخلفية التجريبية FFMPEG من Torchaudio.AIS_ENDPOINT
بواسطة AISTORE CLIENT لتحديد عنوان URL لنقطة نهاية AISTORE. مطلوب لـ Aistore Dataloading.RANK
و WORLD_SIZE
و WORKER
و NUM_WORKERS
داخليًا لإبلاغ Lhotse Shar Dataloading.READTHEDOCS
داخليًا لبناء الوثائق.حزم PIP أخرى. يمكنك الاستفادة من الميزات الاختيارية لـ LHOTSE عن طريق تثبيت الحزمة الداعمة ذات الصلة:
torchaudio
أن يكون الاعتماد الأساسي في Lhotse ، ولكنه الآن اختياري. الرجوع إلى وثائق Pytorch الرسمية للتثبيت.pip install lhotse[kaldi]
للحصول على مجموعة ميزات أقصى تتعلق بتوافق Kaldi. ويشمل مكتبات مثل kaldi_native_io
(متغير أكثر كفاءة في kaldi_io
) و kaldifeat
هذا المنطق بعض وظائف Kaldi في Python.pip install lhotse[orjson]
لما يصل إلى 50 ٪ قراءة أسرع من jsonl المظاهر.pip install lhotse[webdataset]
. نحن ندعم "تجميع" بياناتك في تنسيق WebDataSet Tarball للحصول على IO أكثر فعالية. لا يزال بإمكانك التفاعل مع البيانات كما لو كانت عملية قطع كسول منتظمة. لمعرفة المزيد ، تحقق من البرنامج التعليمي التالي:pip install h5py
إذا كنت ترغب في استخراج ميزات الكلام وتخزينها كصفائف HDF5.pip install dill
. عند تثبيت dill
، سنستخدمه في Cutset المخلل الذي يستخدم وظيفة Lambda في مكالمات مثل .map
أو .filter
. هذا مفيد في Pytorch Dataloader مع num_jobs>0
. بدون dill
، اعتمادًا على بيئتك ، سترى استثناءً أو نصًا معلقًا.pip install aistore
لقراءة البيان ، قطران ، وبيانات أخرى من AISTORE باستخدام عناوين URL المدعومة من AISTORE (تعيين متغير بيئة AIS_ENDPOINT
لتنشيطه). انظر وثائق Aistore لمزيد من التفاصيل.pip install smart_open
لقراءة وكتابة البيان والبيانات في أي موقع مدعوم من smart_open
(مثل Cloud ، HTTP).pip install opensmile
لاستخراج الميزات باستخدام غلاف Python الخاص بـ OpenSmile Toolkit.SPH2Pipe. لقراءة ملفات الصوت القديمة LDC (.SPH) التي يتم ضغطها مع برامج الترميز غير مدعومة من قبل FFMPEG و SOX ، يرجى تشغيل:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
سوف يقوم بتنزيله على ~/.lhotse/tools
، وتجميعه ، والتسجيل التلقائي في PATH
. يجب اكتشاف البرنامج وتستخدمه تلقائيًا بواسطة LHOTSE.
لدينا مثال وصفات توضح كيفية إعداد البيانات وتحميلها في Python كمجموعة Dataset
Pytorch. وهي موجودة في دليل examples
.
مقتطف قصير لإظهار كيف يمكن أن يجعل Lhotse إعداد بيانات الصوت سريعًا وسهلاً:
from torch . utils . data import DataLoader
from lhotse import CutSet , Fbank
from lhotse . dataset import VadDataset , SimpleCutSampler
from lhotse . recipes import prepare_switchboard
# Prepare data manifests from a raw corpus distribution.
# The RecordingSet describes the metadata about audio recordings;
# the sampling rate, number of channels, duration, etc.
# The SupervisionSet describes metadata about supervision segments:
# the transcript, speaker, language, and so on.
swbd = prepare_switchboard ( '/export/corpora3/LDC/LDC97S62' )
# CutSet is the workhorse of Lhotse, allowing for flexible data manipulation.
# We create 5-second cuts by traversing SWBD recordings in windows.
# No audio data is actually loaded into memory or stored to disk at this point.
cuts = CutSet . from_manifests (
recordings = swbd [ 'recordings' ],
supervisions = swbd [ 'supervisions' ]
). cut_into_windows ( duration = 5 )
# We compute the log-Mel filter energies and store them on disk;
# Then, we pad the cuts to 5 seconds to ensure all cuts are of equal length,
# as the last window in each recording might have a shorter duration.
# The padding will be performed once the features are loaded into memory.
cuts = cuts . compute_and_store_features (
extractor = Fbank (),
storage_path = 'feats' ,
num_jobs = 8
). pad ( duration = 5.0 )
# Construct a Pytorch Dataset class for Voice Activity Detection task:
dataset = VadDataset ()
sampler = SimpleCutSampler ( cuts , max_duration = 300 )
dataloader = DataLoader ( dataset , sampler = sampler , batch_size = None )
batch = next ( iter ( dataloader ))
سوف ينتج عن VadDataset
دفعة مع أزواج من الميزات والإشراف على التواليات مثل ما يلي - يبدأ الكلام تقريبًا في الثانية (100 إطار):