kthworks/KoreanSTT-DeepSpeech2

전혀 관련 없는 텍스트가 나옵니다.

gblue1223 opened this issue · 2 comments

먼저 좋은 자료 공유 감사합니다.

세팅을 하고 마이크 테스트 라고 말을하니 전혀 다른 텍스트(만이 교 래 아)가 나와서,
혹시나 마이크가 이상한가 하고 get_speech 함수를 아래처럼 바꾸어서 음성을 파일로 저장해 보았습니다.

확인 결과 저장된 음성 파일에는 마이크에 말했던 내용이 그대로 저장된 걸로 보아 문제가 없는 것 같았고,
저장된 음성 파일을 다시 돌려 보니 역시나 마이크로 테스트 했을 때 와 같이 상관 없는 결과(만이 교 래 아)가 나옵니다.

음성파일: https://drive.google.com/file/d/1zLF7idVkmc5UVxkYuID0ttf9buQC5ZgA/view?usp=sharing

def get_speech(save_wave_file='', test_wave_file=''):
    # 마이크에서 음성을 추출하는 객체
    recognizer = sr.Recognizer()

    if test_wave_file != '':
        speech = sr.AudioFile(test_wave_file)
        with speech as s:
            result = recognizer.record(s)

        return result.get_raw_data()

    # 마이크 설정
    microphone = sr.Microphone(sample_rate=16000)

    # 마이크 소음 수치 반영
    with microphone as source:
        recognizer.adjust_for_ambient_noise(source)
        print("소음 수치 반영하여 음성을 청취합니다. {}".format(recognizer.energy_threshold))

    # 음성 수집
    with microphone as source:
        print("목소리를 들을 준비가 되었습니다. 말씀해주세요 :)")
        result = recognizer.listen(source)

        if save_wave_file != '':
            file = open(save_wave_file, 'wb')
            file.write(result.get_wav_data())
            file.close()

        audio = result.get_raw_data()

    return audio

이 정도로 이상한 결과가 나오는데 공유 하셨을리는 없을테고,
트레이닝 및 테스트 당시 모듈들의 버전 문제를 의심하고 있는데, 혹시 당시 모듈들의 버전을 알 수 있을까요?
아래는 현재 제가 설치한 모듈들입니다.

Package            Version
------------------ ------------
appdirs            1.4.4
audioread          3.0.0
brotlipy           0.7.0
certifi            2022.9.14
cffi               1.15.1
charset-normalizer 2.0.4
contourpy          1.0.5
cryptography       37.0.1
cycler             0.11.0
decorator          5.1.1
fonttools          4.37.2
idna               3.3
joblib             1.2.0
kiwisolver         1.4.4
librosa            0.9.2
llvmlite           0.38.1
matplotlib         3.6.0
mkl-fft            1.3.1
mkl-random         1.2.2
mkl-service        2.4.0
munkres            1.1.4
numba              0.55.2
numpy              1.23.3
packaging          21.3
Pillow             9.2.0
pip                22.1.2
pooch              1.6.0
PyAudio            0.2.11
pycparser          2.21
pyOpenSSL          22.0.0
pyparsing          3.0.9
PySocks            1.7.1
python-dateutil    2.8.2
requests           2.28.1
resampy            0.4.2
scikit-learn       1.1.1
scipy              1.7.3
setuptools         63.4.1
six                1.16.0
SoundFile          0.10.3.post1
SpeechRecognition  3.7.1
threadpoolctl      3.1.0
torch              1.12.1
torchaudio         0.12.1
torchvision        0.13.1
typing_extensions  4.3.0
unicodedata2       14.0.0
urllib3            1.26.11
wheel              0.37.1

안녕하세요,이슈 내용 남겨주셔서 감사합니다!

말씀해주신 대로, 저도 inference 시 디코딩이 완전히 다르게 나오는 경우가 종종 있었습니다 ㅠㅠ.
제가 공유 드린 pre-trained 모델은 성능보다는 시도에 더 초점을 맞춰주시면 감사할 것 같습니다.
다른 음성으로 inference를 하셔도 결과가 계속 이상하게 나오는지도 궁금합니다. ( ex) 오늘 날씨가 좋다, 한국어 음성 인식 등). 혹시 몰라 제가 예전에 데모 영상으로 찍어둔 링크도 아래 달아 두겠습니다.

https://www.instagram.com/reel/Cdid-Q8FNnN/?igshid=YmMyMTA2M2Y%3D

혹시 성능 면에서 더 좋은 모델을 원하신다면, 추가적인 fine tuning을 진행하시거나, 혹은 더욱 최신 모델을 사용하시는 것을 추천 드립니다. 저는 wav2vec2 모델 fine tuning해서 사용했더니 훨씬 좋은 성능을 얻었습니다. colab에서 간편하게 inference할 수 있도록 만들어 두었으니 참고해주시면 좋을 것 같습니다.

https://fluffy-game-5c1.notion.site/Korean-Wav2vec2-330e21e4ed4b4a858cc92794c0b63ce1

마지막으로, 말씀해주신 모듈들 버전들도 공유 드립니다.

Package                Version
------------- -------------------
antlr4-python3-runtime 4.8
appdirs                1.4.4
argon2-cffi            21.3.0
argon2-cffi-bindings   21.2.0
astropy                5.0.3
asttokens              2.0.5
attrs                  21.4.0
audioread              2.1.9
backcall               0.2.0
bleach                 4.1.0
Bottleneck             1.3.4
brotlipy               0.7.0
certifi                2021.10.8
cffi                   1.15.0
charset-normalizer     2.0.4
colorama               0.4.4
cryptography           36.0.0
cycler                 0.11.0
Cython                 0.29.28
dataclasses            0.6
debugpy                1.5.1
decorator              5.1.1
defusedxml             0.7.1
emoji                  1.7.0
entrypoints            0.3
executing              0.8.3
fonttools              4.25.0
hgtk                   0.1.3
hydra-core             1.1.1
idna                   3.3
importlib-metadata     4.8.2
importlib-resources    5.6.0
ipykernel              6.9.1
ipython                8.1.1
ipython-genutils       0.2.0
ipywidgets             7.6.5
jarowinkler            1.0.2
jedi                   0.18.1
Jinja2                 3.0.2
joblib                 1.1.0
JPype1                 1.3.0
jsonschema             3.2.0
jupyter                1.0.0
jupyter-client         7.1.2
jupyter-console        6.4.3
jupyter-core           4.9.2
jupyterlab-pygments    0.1.2
jupyterlab-widgets     1.0.0
kiwisolver             1.3.2
konlpy                 0.6.0
Korpora                0.2.0
kss                    3.4
Levenshtein            0.18.1
librosa                0.9.1
llvmlite               0.36.0
lxml                   4.8.0
MarkupSafe             2.0.1
matplotlib             3.5.1
matplotlib-inline      0.1.2
mecab                  0.996.3
mecab-python           0.996-ko-0.9.2-msvc
mistune                0.8.4
mkl-fft                1.3.1
mkl-random             1.2.2
mkl-service            2.4.0
munkres                1.1.4
nbclient               0.5.11
nbconvert              6.1.0
nbformat               5.1.3
nest-asyncio           1.5.1
notebook               6.4.8
numba                  0.53.1
numexpr                2.8.1
numpy                  1.21.5
omegaconf              2.1.1
packaging              21.3
pandas                 1.4.1
pandocfilters          1.5.0
parso                  0.8.3
pickleshare            0.7.5
Pillow                 9.0.1
pip                    22.0.4
pooch                  1.6.0
prometheus-client      0.13.1
prompt-toolkit         3.0.20
pure-eval              0.2.2
PyAudio                0.2.11
pycparser              2.21
pydub                  0.25.1
pyerfa                 2.0.0.1
Pygments               2.11.2
pyOpenSSL              22.0.0
pyparsing              3.0.4
pyrsistent             0.18.0
PySocks                1.7.1
python-dateutil        2.8.2
pytz                   2021.3
pywin32                302
pywinpty               2.0.2
PyYAML                 6.0
pyzmq                  22.3.0
qtconsole              5.2.2
QtPy                   1.11.2
rapidfuzz              2.0.8
regex                  2022.3.2
requests               2.27.1
resampy                0.2.2
scikit-learn           1.0.2
scipy                  1.7.3
Send2Trash             1.8.0
sentencepiece          0.1.96
setuptools             58.0.4
sip                    4.19.13
six                    1.16.0
SoundFile              0.10.3.post1
stack-data             0.2.0
terminado              0.13.1
testpath               0.5.0
threadpoolctl          2.2.0
torch                  1.11.0
torchaudio             0.11.0
torchvision            0.12.0
tornado                6.1
tqdm                   4.63.0
traitlets              5.1.1
typing-extensions      3.10.0.2
urllib3                1.26.8
wcwidth                0.2.5
webencodings           0.5.1
wheel                  0.37.1
widgetsnbextension     3.5.2
win-inet-pton          1.1.0
wincertstore           0.2
xlrd                   2.0.1
zipp                   3.7.0

답변 감사드립니다. 좀 더 다양한 실험후에 결과 공유하겠습니다~!

2022-09-22


전부다 이상한 결과가 나오네요 ㅎㅎ Wav2vec2 새로 트레이닝 시켜서 테스트 해봐야겠습니다.

마이크테스트 만이 교 래 아
마이크테스트(좀 길게 발음) 만 가해 그 고진그 근데 짧하 빼가 어서더 아 응 아
내 화면으로 가줘 아 서절런 라화 뭐 틸오말 외거 히 겠
안녕하세요 반가워요 가 가 인 고 저형 가러런 앙라고 오드 까로 홍보어 하 도 이
오늘은 수요일 내일은 목요일 그 응이 도데 누구를 알 러는 거을 학 라 랑아 어 느무 부문 거화 아 와 아카백 응그
오더목록으로 이동 너 락 그론래 아 어른 몰로아 알 아켜 하라고 짜 살.
저는 프로그래머 입니다 진만 그면하어라.어 아 어 어딱 보 더라 동이랑 제스 어델 아 궜무짧 사 그.
홈으로 이동 베 마 따가 잉근라 섯 울마나 서

Wav2Vec2 로 추론한 결과는 훨씬 낫습니다. 대충 무슨 말인지는 알아볼 정도입니다.

마이크테스트 아이 그
마이크테스트(좀 길게 발음) 마 그 테스트
내 화면으로 가줘 내 마면으로 가져
안녕하세요 반가워요 안영하세요? 안가워요?
오늘은 수요일 내일은 목요일 모닌 수호일 내 일은 모요일
오더목록으로 이동 옷 다 목로 그러기 너
저는 프로그래머 입니다 저는 프로그래 먹어ㅂ니다.
홈으로 이동 홋무로 이동

2022-09-23


Open AI 에서 새로 발표한 음성인식 모델 공유합니다. 엊그제 올라온 따끈한 소식이에요.
https://openai.com/blog/whisper/

인식률이 꽤 높습니다. base 모델에서도 language 를 명시적으로 지정해주면 그럭저럭 인식합니다만,
small 보다는 확실히 인식률이 떨어집니다.

model = whisper.load_model("small")
result = model.transcribe("drive/MyDrive/ColabData/examples_audio/저는 프로그래머 입니다.wav", language="ko")
print(result["text"])

'base' model with language="ko"

마이크테스트 마이크 테스트
마이크테스트(좀 길게 발음) 라이브 네
내 화면으로 가줘 내 화면으로 가죠
안녕하세요 반가워요 안녕하세요 반가워요
오늘은 수요일 내일은 목요일 무� worn 수와일 drawn 보مكن
오더목록으로 이동 무�etti용
저는 프로그래머 입니다 저는 프로그램을 모아입니다.
홈으로 이동 홈으로 이동

'small' model with language="ko"

마이크테스트 마이크의 테스트
마이크테스트(좀 길게 발음) 마이크 테스트
내 화면으로 가줘 내 화면으로 가죠
안녕하세요 반가워요 안녕하세요 반가워요
오늘은 수요일 내일은 목요일 오늘은 수요일, 내일은 목요일.
오더목록으로 이동 5도 목록으로 이동
저는 프로그래머 입니다 저는 프로그램어 입니다
홈으로 이동 홈으로 이동

medium 이상은 추론에 시간이 너무 오래 걸려서(language 를 지정해줘도 colab GPU 기준 약15초) 사용에 제약이 좀 있을 듯 보이네요.
참고로 개발자 분이 한국 분이셔서 한국어 관련 질문에 답변을 잘 해주실 것 같습니다.