QAãšã³ãžãã¢ãé³å£°åæã®å·®åãèªåæ€ç¥ããä»çµã¿ãå°å ¥ããã¯ãªã
ããã«ã¡ã¯ãé»è©±AI SaaS IVRyã®QAãšã³ãžãã¢ã®é¢( @IvryQa )ã§ãã
ã¢ããã³ãã«ã¬ã³ããŒã®3æ¥ç®ãæ
åœããŸãã
IVRyã®èªåå¿çæ©èœã§ã¯ãText-to-SpeechïŒTTSïŒãšããé³å£°åæã䜿çšããŠããŸãããŠãŒã¶ãŒã¯èšå®ç»é¢ããèªç±ã«èªã¿äžãå
容ãèšå®ããããšãã§ããå®éã®é³å£°ã確èªããããšãã§ããŸãã
ããããTTSã®ããŒãžã§ã³ã¢ããããŒãã«ãã£ãŠãåãããã¹ãã§ãèªã¿äžãæ¹ãå€åããããšããããŸãã
äŸãã°ãæç« äžã®æ¹è¡ã¯ç©ºçœãšããŠèªã¿äžããããŠãããã®ããçªåŠæ¶ããŠããŸãéåæã®ããé³å£°ã«ãªã£ãŠããããæç« èªäœã¯å€æŽããŠããªãã®ã«èªã¿äžãã®ã€ã³ãããŒã·ã§ã³ãå€ãã£ãŠããŸããªã©ã®äºè±¡ããããŸããã
ãã®ãããªäºæãã¬å€æŽã¯ãIVRyããå©çšããã ããŠããŠãŒã¶ãŒã ãã§ã¯ãªããå®éã«IVRyã«é»è©±ããããŠãããšã³ããŠãŒã¶ãŒã®äœéšã«ãçŽæ¥åœ±é¿ãåãŒãéèŠãªèŠçŽ ã ãšèããŠããŸãã
ãããŸã§ã¯ãäžå®ã®é »åºŠã§èªåå¿çãèšå®ããå®éã«é»è©±ããããŠç¢ºèªããäœæ¥ã宿çã«è¡ã£ãŠããŸããããæåã§ã®ç¢ºèªã«ã¯éçããããããå¹ççãªå質ä¿èšŒã®ä»çµã¿ãå¿
èŠã ãšæããŠããŸããã
ããã§ãç§ãã¡ã¯ãããã®æ³å®ããŠããªãå€åãèªåã§æ€ç¥ããä»çµã¿ãå°å
¥ããŸããã
æ¬èšäºã§ã¯ããã®åãçµã¿ã«ã€ããŠã玹ä»ããŠãããŸãã
倿ŽãèŠéããªãããšã®éèŠæ§
IVRyã®ãããªé³å£°å¯Ÿè©±ã·ã¹ãã ã«ãããŠãé³å£°ã®å質ã¯ãšãŠãéèŠãªèŠçŽ ã ãšèããŸãã
ç¹ã«ãIVRyã«é»è©±ãããããšã³ããŠãŒã¶ãŒã«ãšã£ãŠãæ³å®ããŠããªãç®æã§ã®ç©ºçœã®æ¬ åŠã¯èãåãã¥ãããçãŸããäžèªç¶ãªã€ã³ãããŒã·ã§ã³ã¯éåæãäžããŠããŸããšæããŸãã
äŸãã°ãäžèšã®ãããªé³å£°ããèŽããã ããã
âŒïž 空çœãã
âŒïž 空çœãªã
èŽãæ¯ã¹ãŠããã ããšã空çœãªãã®é³å£°ãã¡ã€ã«ã§ã¯ãæç« ãç¶ããŠèªã¿äžãããäžèªç¶ã§ãèãåãã¥ããããšãããããŸãã
IVRyã§èšå®ããå 容ãäºæãã倿ŽãããŠããŸããšããµãŒãã¹ãå©çšãããŠãŒã¶ãŒã ãã§ãªããIVRyã«é»è©±ããããŠãããšã³ããŠãŒã¶ãŒã®äœéšã«ãçŽæ¥çãªåœ±é¿ãäžããéèŠãªèŠçŽ ã ãšèããŠããŸãã
差忀ç¥ã®ä»çµã¿
倧æ ã®æµãã¯äžèšã«ãªããŸãã
- IVRyã®èšå®ç»é¢ã«ãŠãåçããããã¹ããå ¥åããé³å£°ãã¡ã€ã«ãäœæããããŠã³ããŒãããŸãã
- ãã¹ã¿ãŒé³å£°ãã¡ã€ã«ãšããŠã³ããŒãããé³å£°ãã¡ã€ã«ã®2ã€ã®ãã¡ã€ã«ãæ¯èŒãã以äžã®èгç¹ã§å·®åãæ€ç¥ããŠããŸãã
- æ³¢åœ¢ã®æ¯èŒã«ããé³å£°ãã¿ãŒã³ã®åæ
- MFCCã«ããé³è³ªã»ã€ã³ãããŒã·ã§ã³ã®è©äŸ¡
- åçæéã®æ¯èŒ
- è©äŸ¡çµæãSlackãžéç¥ããŸãã
äœ¿çšæè¡
⻠以äžã®ã©ã€ãã©ãªã掻çšããŠããŸãã
-
librosa[1]
- äž»ã«é³å£°æ³¢åœ¢ã®åæãšåŠçãæ³¢åœ¢ããŒã¿ã®ååŸã§å©çš
-
python_speech_featuresïŒMFCCïŒ[2]
- ã€ã³ãããŒã·ã§ã³ãé³è³ªã®å€åãæ€åºããç®çã§å©çš
- Matplotlib
- 波圢ãšMFCCã®å¯èŠå
- NumPy
- 波圢ã®å·®åèšç®
- MFCCã®è·é¢èšç®
⻠人éã®é³å£°ç¥èŠã«åºã¥ããé³å£°ç¹æ§ã®åæãè¡ãããšãã§ããã
å ·äœçãªå®è£ äŸ
âŒïž 波圢åæ
2ã€ã®é³å£°æ³¢åœ¢ã®æéãæããäžã§ãããããã®æ¯å¹
ã®å·®ãå¹³åããŠèšç®ããŸãããã®æ¯å¹
å·®ããèšå®ããéŸå€ïŒ0.1ïŒãè¶
ãããšãæ³¢åœ¢ã«æãããªéãããšå€å®ããŸãã
# é³å£°ãã¡ã€ã«ãèªã¿èŸŒã
y1, sr1 = librosa.load(audio_file1, sr=None)
y2, sr2 = librosa.load(audio_file2, sr=None)
# é³å£°ã®é·ããååŸ
duration1 = librosa.get_duration(y=y1, sr=sr1)
duration2 = librosa.get_duration(y=y2, sr=sr2)
# äž¡ãã¡ã€ã«ã®æ³¢åœ¢é·ãæãã
min_len = min(len(y1), len(y2))
y1_trimmed = y1[:min_len]
y2_trimmed = y2[:min_len]
# 波圢ã®å·®åãèšç®
waveform_diff = np.mean(np.abs(y1_trimmed - y2_trimmed))
# è©äŸ¡çµæãè¿ã
if waveform_diff > 0.1:
return f"æ³¢åœ¢ã«æãããªéãããããŸãïŒå·®å: {waveform_diff:.4f}ïŒã"
else:
return f"波圢ã¯é¡äŒŒããŠããŸãïŒå·®å: {waveform_diff:.4f}ïŒã"
âŒïž MFCCåæ
é³å£°æ³¢åœ¢ãæéã§æããããšãMFCCãæœåºããŠã2ã€ã®é³å£°ã®MFCCã®å·®åãèšç®ããŠããŸãã
# 波圢ãæããŠããMFCCãæœåº
mfcc1 = mfcc(y1_trimmed, sr1)
mfcc2 = mfcc(y2_trimmed, sr2)
# MFCCã®å·®åãèšç®
mfcc_dist = float(np.sum(np.abs(mfcc1 - mfcc2)))
# è©äŸ¡çµæãè¿ã
if mfcc_dist > 10000:
evaluation.append("é³è³ªãã€ã³ãããŒã·ã§ã³ã«éãããããŸãã")
else:
return f"é³è³ªãã€ã³ãããŒã·ã§ã³ã¯é¡äŒŒããŠããŸãïŒMFCCå·®å: {mfcc_dist:.4f}ïŒã"
å·®åã®è©äŸ¡ã®ãã€ã³ã
- 波圢æ¯èŒã«ããé³å£°ãã¿ãŒã³ã®éããããã
- MFCCã«ããé³è³ªã»ã€ã³ãããŒã·ã§ã³ã®å€åãããã
- åçæéã®å·®ç°ãããã
æ€ç¥ã§ãã倿Žãã¿ãŒã³
âŒïž 空çœã®æ¬ åŠ
⌠Slackéç¥

⌠波圢

âŒïž ã€ã³ãããŒã·ã§ã³ã®å€å
⌠Slackéç¥

⌠波圢

â» å·®åãªãã®ãã¿ãŒã³ã¯ãäžèšã®ãããªSlackéç¥ãããŸãã

å°å ¥å¹æ
é³å£°å·®åã®èªåæ€ç¥ãå°å
¥ããããšã§ã倧ãã2ã€ã®å¹æãåŸãããŸããã
1ã€ç®ã¯ã確èªäœæ¥ã®æéççž®ã§ãããããŸã§æåã§30åã»ã©æãã£ãŠãã確èªäœæ¥ããããã1ã2åã§å®äºã§ããããã«ãªããŸããã
2ã€ç®ã¯ã宿çãªã¢ãã¿ãªã³ã°ã®å®çŸã§ãã人ã«ãã確èªã§ã¯ãã©ãããŠãä»ã®åªå
ã¿ã¹ã¯ãšã®å
Œãåãã§åŸæã«åã£ãŠããŸãããšããããŸãããããããèªååã«ããæ±ºãŸã£ãã¿ã€ãã³ã°ã§ç¢ºå®ã«ãã§ãã¯ãå®è¡ã§ããããã«ãªããç¶ç¶çãªå質ç£èŠãå¯èœã«ãªããŸããã
ãã®ä»çµã¿ã«ãããããå®å®çã§å¹ççãªå質ä¿èšŒãã§ããŠããã®ã¯å€§ããªææã ãšæããŠããŸãã
æ¹åãã€ã³ã
çŸç¶ã®ä»çµã¿ã«ã¯ãæ¹åã®äœå°ããããŸããäžã€ã¯ãç°å¢ã®èª²é¡ã§ããçŸåšã¯èšå®ç»é¢ããããŠã³ããŒãããé³å£°ãã¡ã€ã«ãæ¯èŒããŠããŸãããå®éã®ãšã³ããŠãŒã¶ãŒã«ããè¿ãäœéšãæ€èšŒããã«ã¯ãå®éã®é»è©±ç°å¢ã§ã®æ€èšŒãå¿
èŠã ãšèããŠããŸãã
ãã ããéä¿¡ç°å¢ã«ãããã€ãºã®æ··å
¥ãé³è³ªã®å€åãçºçããããšã§èª€æ€ç¥ãå¢ããå¯èœæ§ãããããããäžã€ã®èª²é¡ãšæããŠããŸãããŸããè©äŸ¡ã®ç²ŸåºŠã«é¢ãã課é¡ããããŸãã
çŸç¶ã®éŸå€èšå®ã¯ã0ã«è¿ãæ°å€ã§è¡ã£ãŠããŸããã埮åŠãªå·®ç°ã§ãæ€ç¥ããŠããŸãããšãããã®ã§ãããã¯ãäžã€ç®ã®èª²é¡ãšã»ããã§æ€èšããŠããå¿
èŠããããšèããŠããŸãã
现ããã§ãããå¯èŠåãããæ³¢åœ¢ãMFCCã®ã°ã©ãã®èŠããããæ¹åã®äœå°ããããšèããŸããããçŽæçã«å·®åãææ¡ã§ãããããªè¡šç€ºã®å·¥å€«ãæ€èšããŠãããããšèããŠããŸãã
ãŸãšã
ä»åã¯ãé³å£°åæã®å·®åãèªåæ€ç¥ããä»çµã¿ã«ã€ããŠç޹ä»ããŸããã
ãã®ä»çµã¿ã¯ã鳿¥œæŽ»åã®çµéšãé·ã瀟å
ã®ãšã³ãžãã¢ã®é³é¿ãæè¡ã®ç¥èŠã掻ããããšã§ãå®çŸããããšãã§ããŸããã
ä»åŸãç¶ç¶çãªæ¹åãéããäžå®ã®å質ãå®å¿ããŠå©çšããŠããããããåãçµãã§ããããã§ãããŸããé³å£°å質ã®å®éè©äŸ¡åºæºãšããŠã掻çšã§ããã®ã§ã¯ãªãããšèããŠããŸãã
ä»ã«ããWebã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã ãã§ãªããé³å£°èªèãé»è©±èªåå¿çã·ã¹ãã ã®èªååãšãã£ãæ°ããåéã«ãç©æ¥µçã«åãçµãã§ãããããšèããŠããŸãã
ãã²ãèå³ãæã£ãŠããã ããæ¹ã¯ãã声ãããã ããïŒ
-
librosaã¯ãlibrosa development teamã«ãã£ãŠéçºãããISCã©ã€ã»ã³ã¹ã®ããšæäŸãããŠããŸããæ¬èšäºã§ã¯ããã®äžéšã掻çšããŠããŸãã â©ïž
-
MFCCïŒMel-Frequency Cepstral CoefficientsïŒã¡ã«åšæ³¢æ°ã±ãã¹ãã©ã ä¿æ°ïŒã¯ã人éã®èŽèŠç¹æ§ã«åºã¥ããé³å£°åæææ³ã§ãã â©ïž


Discussion