è°äºé²äœæã»ã»ã»ããã¯å¿ã®æããäœæ¥ã
äŒè°ã¯æºåã倧å€ã ããçµãã£ãåŸã®è°äºé²äœæã倧å€ã ã
ãªããšããããè°äºé²äœæ
äŒè°ã®é³å£°ããŒã¿ããããã¹ãåã§ããã¢ããªã¯ãããããããZOOMã§ããã£ãŠãããããZOOMã®èŠçŽæ©èœã¯ãªããªãç§éžã§ãããèŠçŽã¯ã ãç§ã®æ¬²ããã®ã¯çºèšè
ããšã®ããã¹ãã ãæžãèµ·ããããã¹ãã¯ããªã³ã©ã€ã³äŒè°ã§ãªããšæ²è
ã§ãé³å£°ããŒã¿ãèããšãªãã§ãããªã£ãïŒãšèšããããªããããªäººåã«åºããªã倿ããããŠããããšå€ã
ãçµæäººåã®è³é Œããåæå
¥åã«ãªã£ãŠããã
èŠåºãã®ãªããšããããè°äºé²äœæãªã®ã ã
ð°ãããã®ç²Ÿäžæ¯ãããã§ã
âçšæããé³å£°ããŒã¿
ããããããã«ã¡ã¯ãä»äœæ³ã§ããïŒã
éè¡äººAã18æ³ã§ãã
ãããã倧åŠçã§ããïŒã
éè¡äººAãã¯ããå®å®ã«ã€ããŠåŠãã§ããŸãã
ããããããã¯é¢çœãã§ããã
ããã¹ãåããŠè©±è åé¢ãããã¹ã¯ãªãã
ð ã¹ã¯ãªããå šæïŒã¯ãªãã¯ã§å±éïŒ
import os
import whisperx
from whisperx.diarize import DiarizationPipeline
import torch
from datetime import datetime
# èšå®
audio_file = "audio.wav"
if not os.path.exists(audio_file):
raise FileNotFoundError(f"æå®ãããé³å£°ãã¡ã€ã«ãååšããŸãã: {audio_file}")
device = "cuda" if torch.cuda.is_available() else "cpu"
auth_token = "hf_******" # ðHugging Faceã®ã¢ã¯ã»ã¹ããŒã¯ã³
# â é³å£°èªèã¢ãã«ã®ããŒããšæåèµ·ãã
model = whisperx.load_model("base", device=device, compute_type="int8")
transcription = model.transcribe(audio_file)
# â¡ ã¢ã©ã€ã³ã¡ã³ãïŒé³å£°ãšåèªã®ã¿ã€ãã³ã°ãåãããïŒ
model_a, metadata = whisperx.load_align_model(language_code="ja", device=device)
aligned_result = whisperx.align(
transcription["segments"],
model_a,
metadata,
audio_file,
device
)
# ⢠話è
åé¢
diarize_model = DiarizationPipeline(use_auth_token=auth_token, device=device)
diarization_result = diarize_model(audio_file)
# ⣠話è
æ
å ±ãæåèµ·ããã«çµ±å
if not aligned_result.get("word_segments"):
raise ValueError("ã¢ã©ã€ã³ã¡ã³ãçµæã空ã§ããèšèªã³ãŒããé³å£°å質ã確èªããŠãã ããã")
final_result = whisperx.assign_word_speakers(
diarization_result,
aligned_result,
audio_file
)
from datetime import datetime
import os
# åºåå
ãã£ã¬ã¯ããª
output_dir = "C:/meeting/output"ã#åºåå
ãã®ãã©ã«ããã¹ãå
¥å
os.makedirs(output_dir, exist_ok=True)
# ãã¡ã€ã«åããŒã¹
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
base_name = os.path.splitext(os.path.basename(audio_file))[0]
from collections import defaultdict
speaker_segments = defaultdict(list)
for segment in final_result["segments"]:
speaker = segment.get("speaker", "Unknown")
start = segment.get("start", 0.0)
end = segment.get("end", 0.0)
text = segment.get("text", "")
speaker_segments[speaker].append((start, end, text))
# Markdown圢åŒã®ãã¡ã€ã«åºå
markdown_path = os.path.join(output_dir, f"{base_name}_{timestamp}.md")
with open(markdown_path, "w", encoding="utf-8") as f:
for speaker, segments in speaker_segments.items():
f.write(f"## ð£ïž {speaker}\n\n")
for start, end, text in segments:
f.write(f"- **{start:.2f} - {end:.2f}** \n {text}\n\n")
f.write("---\n\n")
# ãã¬ãŒã³ããã¹ã圢åŒã®ãã¡ã€ã«åºå
plain_path = os.path.join(output_dir, f"{base_name}_{timestamp}_plain.txt")
with open(plain_path, "w", encoding="utf-8") as f:
for segment in final_result["segments"]:
speaker = segment.get("speaker", "Unknown")
start = segment.get("start", 0.0)
end = segment.get("end", 0.0)
text = segment.get("text", "")
f.write(f"{start:.2f} - {end:.2f} | {speaker}: {text}\n")
åºæ¥äžãã£ãmarkdownãã¡ã€ã«ããã¡ã
ð£ïž SPEAKER_01
-
0.84 - 13.87
ããã«ã¡ã¯ãä»äœæ³ã§ãã?18æ³ã§ãã倧åŠçã§ãã?ã¯ããå®å®ã«ã€ããŠåŠãã§ãŸããããã¯é¢çœãã§ããã
話è
åé¢ãå
šãã§ããŠããªãã»ã»ã»
é³å£°ããŒã¿ãçããšããã®ãåå ãããããªããããã ãããã¹ãåã¯å®ãºãã ã£ãã
ãããŸã§è¡ãã€ããããã®æ»éããã²ã芧ãã ããð¥ð¥ð¥
AIã ã£ãããªããšãããŠãããïŒ
ChatGPTã«èãã°è§£æ±ºããŠããããããªãïŒ
ä»ã®æä»£AIã§ãããã ã£ãŠAIã¯ã¿ããªã®ã¢ã·ã¹ã¿ã³ãã§ããŒã ã®äžå¡ã ã£ãŠäœãã«æžããŠãã£ããïŒå¥œããªè¡šçŸã§ã¯ããïŒ
AIã«èãåã«ç§ã®ã¹ããã¯
ãšã¯ã»ã«ã¯ãèšé²ãã¯ããšAIã§ãªããšãåžæéãã®ããšãã§ããã以äžã ããã®èŸºã®ã¹ãŒããŒã§è²·ãç©ããŠãããæ¯ãããšäžç·ã ã
æãããŠã§ããã®ãïŒè°äºé²äœæ
ChatGPTã«èšãããããŸãŸå§ãŸã£ãç¥ããªãäžçã®å¹éã
AIã«æåã«ãé¡ãããããš
âé³å£°ããŒã¿ã®ããã¹ãå
âçºèšè ããããããã«ããã¹ããåãã
âè°äºé²ããŒã¿ã®ãããã¯ã©ãŠãã§ã¯ãªãããŒã«ã«ã§ã®äœæ¥
ç§ãšããŠã®æ§æ³ã¯ãŒãã ãäœããå§ããŠããã®ããããããªãããã ãè°äºé²ã®ããã¯ã©ãŠãã§ã¯ãªãããŒã«ã«ã§å®äºããããããšã ãã¯åŒ·ãåžæããŸãã¯åžæã®ã¿ããã³ããå ¥å
AIããã¯
Whisper + pyannote.audioã®çµã¿åããããããããšã
Whisperã®ç¹åŸŽã¯ãããŒã«ã«ã§äœ¿ããããšãã¯ã©ãŠã䜿çšããªããšãªããšäžæãšèšã£ãŠããããOpenAIãäœã£ãæåèµ·ããAIããŒã«ã ã
åããŠèãèšèããããŠããã®åŸææ¶ã®åããŠç¥ããéå¬ãããããšã«ãªãã
ããããªéããŠAIã®èšããªã
Whisperãšpyannote.audioïŒèªã¿æ¹ããäžæïŒãã€ã³ã¹ããŒã«ã
ãããã¯ã³ãã³ãäžã§åãããããã³ãã³ãã®éãæ¹ïŒç¥ãã
ã§ããããªããšã
èšãããããŸãŸã®ç°å¢æ§ç¯
â WhisperXïŒé³å£°ããŒã¿ããã¹ãåãããã
â»åŸã«WhisperããWhisperXã«å€ããããšã«ãªã
â pyannote.audioïŒè©±è
åé¢ãããã
â Hugging Faceã®ããŒã¯ã³ååŸïŒpyannoteåãããã
â Python3.10.7ïŒããœã³ã³ã«åœä»€ããããã®èšèïŒver3.10以äžã«ãããšåé¡çºçïŒ
â ffmpegïŒãã«ãã¡ãã£ã¢ãã¬ãŒã ã¯ãŒã¯ã¢ãã¬ãŒã ã¯ãŒã¯
â torchïŒAIã®è³ã¿ããäœã£ãŠåããããã®éå
·ç®±ïŒã ããã§ãïŒ
â GITïŒãã¡ã€ã«ã®å€æŽå±¥æŽã管çããããã®ããŒã«
ä»ã«ããéäžã§èšãããããŸãŸã€ã³ã¹ããŒã«ãããã¢ããããŒãžã§ã³ãããŠã³ããŒãžã§ã³ããŠãã
ã€ã³ã¹ããŒã«ä»¥å€ã§ãä»®æ³ç°å¢ã®æ§ç¯
ãããŸã§ã§ãèããããšããã®Pythonã®ã¿
Pythonã®ã¹ã¯ãªããäœæïŒã ãããªãã®äºã ãïŒ
ïŒïŒãã©ã«ãã®äœæ
ãã©ã«ãã¯ãCãã©ã€ãçŽäžãããããããã©ã«ãåïŒãã¹å
ïŒã«æ¥æ¬èªãå
¥ããªãã®ãè¯ãããã®ãã©ã«ãå
ã«å¿
èŠãªãã¡ã€ã«ãã¹ãŠæçš¿ãã
C:\meetingããããªæãã
ïŒïŒäœæãã©ã«ãã§ã³ãã³ãéããŠä»®æ³ç°å¢ãã€ãã
ð° è¶ åå¿è ã®ããã«ä»®æ³ç°å¢ã®ã€ããæ¹ïŒã¯ãªãã¯ã§å±éïŒ
â CçŽäžã«äœæãããã©ã«ãã®ãããŒã«ãcmdããšå ¥å
â¡ã³ãã³ãç»é¢ãéãïŒé»ãã®ã§ãïŒ
â¢éããç»é¢ã«äžèšå
¥åãã
python -m venv .venvã#æåŸã®venvã¯ããããããèšèã§OK
ãããããšãä»®æ³ç°å¢ãäœããããã®ç°å¢ã«å¿ èŠãªãã®ãã€ã³ã¹ããŒã«ããããã®äžã§ãã䜿ããªãã
ïŒïŒä»®æ³ç°å¢ãã§ãããã©ãã©ãã€ã³ã¹ããŒã«ãã
ã»Python3.10 å
¬åŒã§ããŠã³ããŒã
ããð Python 3.10 Downloads
ã»ffmpeg
choco install ffmpeg
ã»Whisperx
pip install git+https://github.com/m-bain/whisperx.git
ã»pyannote.audio
pip install pyannote.audio
ä»ã«ãã€ã³ã¹ããŒã«ãå¿
èŠã«ãªããšæããŸããããšã©ãŒãåºããAIã«ç¢ºèªããŠèšãããããŸãŸã€ã³ã¹ããŒã«ïŒç§ã¯ïŒãŸããããŒãžã§ã³ã圱é¿ãããã®ã§ãšã©ãŒã®ãã³ã«å€æŽããŸãã
次ã®é£é¢Hugging Faceç»é²ããŠããŒã¯ã³ååŸ
ãã®ã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããªããšpyannoteã䜿ããªãã
Hugging Face
ð°ã¢ã¯ã»ã¹ããŒã¯ã³ååŸãžã®ã¿ã¡ã®ã ïŒã¯ãªãã¯ã§éããŸãïŒ
â ãŸããµã€ã³ã¢ãããã¢ã«ãŠã³ãåãšååãšemailã§ç»é²ã§ããããããããšã¢ã¯ã»ã¹ããŒã¯ã³ãæã«å ¥ãã®ã ããããã§å®å¿ã§ããªããããã ãã§ã¯ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿ããªããèœãšã穎ããããâ¡å±ããã¡ãŒã«ã®ãªã³ã¯ãã¯ãªãã¯
â¢ã¢ãã«èŠçŽã¯Agree and accessãã¿ã³å
šéšæŒãããšäœãèããåæããããã ããäŒç€ŸåãHPãç»é²ãããšèšã£ãŠããã
ãã®ç»é¢
CompanyïŒNONE
WebsiteïŒé©åœãªãã®ã§OKãQiitaã®èªåã®ããŒãžã§ããã
䜿çšç®çïŒI plan to use this model for private use
ããããã£ãŠåããŠããŒã¯ã³ãæ¬åœã«ã¢ã¯ã»ã¹ããŠãããããã«ãªã
ãããŸã§æºåããŠããã£ãšPythonã®ã¹ã¯ãªãããäœæã§ããã
ãã®æºåã ãã§ãChatGPTã«ã¯éãåºããªã奎ã«ã¯æããªããšèšãããçåCopilotã«ã€ãããç¶æ³èª¬æããããããŠãéãããšãèšãããAIããããã£ãŠããã£ãŠãããã»ã»ã»ãã©ã€
Pythonã®ã¹ã¯ãªãããçŽè§£ã
ð°AIãšã®å£æã¡ãšèšãããæ£çŽâ忬ããã¯âã ã£ã
æ§ç¯ã®æµã
ïŒïŒé³å£°ããŒã¿èªèïŒWhisperXïŒ
ïŒã»è©±è
åé¢
ïŒïŒè©±è
çµ±å
ïŒïŒãã¡ã€ã«äœæããŠä¿å
ãã£ãããããªãããã ã
ãŸãã¯ãé³å£°ããŒã¿ãããã¹ãåããã¹ã¯ãªãããäœæ
import whisper
# ã¢ãã«ããŒã
model = whisper.load_model("base")
# é³å£°ãã¡ã€ã«ãæåèµ·ãã
result = model.transcribe(r"C:\meeting\gijirokutest.mp3")
# ããã¹ãããã¡ã€ã«ã«ä¿å
with open(r"C:\meeting\gijiroku.txt", "w", encoding="utf-8") as f:
f.write(result["text"])
print("æåèµ·ãããä¿åããŸããã")
ããã«è©±è
åé¢ã®ããã®ã¹ã¯ãªãããè¶³ããŠãã£ãã
ãããã話è
åé¢ã©ããããšã©ãŒã®åµããœãããè¶³ããªãããã€ã³ã¹ããŒã«ãããããŒãžã§ã³ãåããªãããã¢ããããŒãžã§ã³ããããã£ã¡ã¯ããŠã³ããŒãžã§ã³ã ïŒ
ãã£ãšã©ãã«ããªãããã ïŒãšæã£ããšããã«ãšãã§ããªããšã©ãŒãã
ã¯ã©ã€ã¢ã³ãã¯èŠæ±ãããç¹æš©ãä¿æããŠããŸããã
Copilotã¯ãWindowsã®ãsymlinkïŒã·ã³ããªãã¯ãªã³ã¯ïŒãæš©éãšã©ãŒã§ãããWinError 1314 ã¯ãèŠæ±ãããç¹æš©ãä¿æããŠããŸããããšããæå³ã§ãGitãHugging Faceã®ã¢ãã«ååŸæã« os.symlink() ã䜿ãããšããŠå€±æããŠããŸããããšç°¡åã«èšã£ãŠããã
調ã¹ããšãPowerShellãã管çè
ãšãªã£ãŠå®è¡ã®ãããªæŽãªãéã«æŸã蟌ãŸããããäžåºŠæŽçããŠéãæ¹æ³ãæ¢ãããCopilotã«ã䌺ããç«ãŠãã
âé³å£°ããŒã¿ãããã¹ãå
â話è åé¢
â管çè æš©é䜿çšããªãã§OK
ãã®æ¹æ³ã¯ïŒ
ä»ãŸã§ã¯ãWhisper + pyannote.audioãã§ã®æ§ç¯ã詊ã¿ãŠãããã©ãããpyannote.audioãæš©éèŠæ±ããããã ã代æ¡ãšããŠã粟床ã¯èœã¡ããWhisperXã䜿çšããŠã®æ§ç¯ã«å€æŽã
WhisperXãã€ã³ã¹ããŒã«ããããPython3.10ãããªããšåããªãããšãçºèŠãããã§ãããŠã³ããŒãžã§ã³ããŠæ°ããä»®æ³ç°å¢ãéããŠå¿æ©äžè»¢ïŒå
šç¶ããžãã£ããããªããã©ãªã£ïŒ
ãã®ãããªããåãã忬ããã¯ç¶æ
ã§ããŠãã¹ã¯ãªããã¯ãã¡ã€ã«çã«ã¯ver.7ã ããå®éã«ã¯20å以äžä¿®æ£ããŠããã
æçµåœ¢ãåé ã®ã¹ã¯ãªããã ã
python C:\meeting\transcribe7.py
Pythonãžã®ãã®åœä»€ãäœååãããããããªãã»ã»ã»
æåŸã«äœè£ãåºãïŒå·¥å€«ãããŠã¿ã
çµæã話è
åé¢ã¯ããŸããããªãã£ãããµã³ãã«é³æºã13ç§ãšçãããšããããQiitaã®ã»ãã®æ¹ã®èšäºãåèã«ãããã§å
¬éãããŠãã鳿ºã䜿ã£ãŠè©ŠããŠã¿ãã
åèèšäº
鳿º
https://drive.google.com/file/d/1zKWIVHn9eqcjkPFKa_wvyRtGfYBygoeW/view
ãã®é³æºã䜿ã£ãçµæ
ð£ïž SPEAKER_00
-
0.60 - 26.29
ããŠæ©ãã«ç·æ¥åéããã çãå ã®å·¥å Žãªãã§ãããã©ããã®ãã®é²çœå¯Ÿç ãšããããšã§ã¯ã©ã®ãããªããšãé²ãããããã§ãããã å ·äœçãªå¯ŸçãšããŠãŸãå·¥å Žå ã®èªä¿¡å¯Ÿçã 匷åããŸããæ©æ¢°ãã¢ã³ã«ãŒãã«ãã§åºå®ããã ããªããã£ããããã®ç¹é 鲿¢ éŒ»ã«æµ®ããŠããäºæ¥å·¥å ·ã®æç Žé²æ¢ãåã£ãŠãããŸãã -
26.93 - 54.09
è»å ã«ã¯æ°Žãšé£æãé²çœçšåãå¹ããã瀟å¡ã®å®å確èªã®ããã®é£çµ¡äœå¶ãæŽããŸããããŸããã¢ãã¬ãã¡ã¯ã·ãŒãæ¶é²å±ã®ãªãŒããŒè·å¡ãé²çœæ åœã³ã¢ã³ã«æããªãããè»å ã®é²çœæè²ãé²çœããã¢ã«ã®äœæãªã©ãé²ããŸããããªãã»ã©ããŸãã«ãœããã¡ã³ãããŒãã¡ã³ãäž¡æ¹ã§ããããªå¯Ÿçãé²ãããããšããããšã§ãããã -
54.60 - 82.17
ãããŠãæ¯å¹Žæ¥ãšç§ã«ã¯ã瀟åã®æŽçœèšç·Žãè¡ã£ãŠããŸããç¹ã«ãç§ã®èšç·Žã¯å šç€ŸäžããŠã®å€§èŠæš¡ãªãã®ã§ãèŠå¯ãæ¶é²çœ²ã®åå ã®ããšãæ©è¶ç€Ÿã«ããé¿é£èšç·Žãªã©ã宿œããŠããããŸããåœç€Ÿã¯æ®æ®µããæ¶é²çœ²ãšã®èšç·Žã±ãŒã·ã§ã³ãèŠã€ã«ãšã£ãŠãããææŽ»ã®åæ¶é²çœ²ãã亀æžããŸã§ãããŠã®äŒåœäº€æžãèšç·Žã宿œããŠãããŸãã
ð£ïž SPEAKER_01
-
82.79 - 112.35
æšå¹Ž7æã«ã¯ç§èªèº«ãå®éã«ã§ããã ãããå°ãäžå®ããããŸããã®ã§ãšã€ãªãŒã®äœ¿ãæ¹ãå¿é ãããŸãããã®å ¬äž»ãåããŸããããã§ããçŽ æŽãããåãçµã¿ã§ããç§ããšã€ãªãŒã®äœ¿ãæ¹1åã ãå ¬äž»ãåãããã§ããã©ãã£ã±ã1åãã£ãããšããã®ãšãªãã®ã§ã¯å šç¶éããŸããããã²ãŸããå€ãã®æ¹ã«äºæ ããŠããã ããããªãšæãè¡ã®æ¹ã«ããåããæããŠããã ãããæ¶é²æžã®æ¹ã§ããã«åãä»ãããããŸãã®ã§ãããããé¡ãããŸã
ããŸããã£ãŠãã颚ã ãã女æ§ãšç·æ§ã話ããŠããŠãã¡ãããšè©±è ãåãããŠããªããSPEAKER_00ã_01ãšåãããŠããã®ã§2åããã ãã§ãæé·ãã
æ±çšæ§èãããšã©ãããªïŒ
åºæ¥äžãããã¡ã€ã«ã¯ãaudio.txtãšãããã¡ã€ã«ãoutputãã©ã«ãã«äœæããããæ¬¡ã®ãã¡ã€ã«ãããã¹ãåãããšããã¡ã€ã«åãäžç·ã®ããäžæžãä¿åãããŠããŸãã
解決çããã¡ã€ã«åã«ã¿ã€ã ã¹ã¿ã³ã远å ããã
ãã¡ã€ã«åã«ã¿ã€ã ã¹ã¿ã³ãã远å ããããšã«ãã£ãŠãäžæžãã®åé¿ãšãã€ã®ããŒã¿ããããããã«ãªã£ãã
ãã ã®ããã¹ããã¡ã€ã«ãšãMarkdown圢åŒã®ãã¡ã€ã«ãšåæã«äœæã§ããããã«ããã³ãããæ¹è¯ããã
ããäžã€ãæçš¿ããé³å£°ããŒã¿ã®ãã¡ã€ã«åãã©ããªãã®ã§ãèªèããããã«ãããã£ãã®ã ããããªãããŒãã«ãäžãã£ãŠããŸãæå¿µãçŸç¶ã¯audio.wavãã¡ã€ã«ãšæå®ããŠããã
ã¡ãªã¿ã«ãmp3ããã®wavãžã®å€æã¯ãã¡ãïŒffmpegãå
¥ã£ãŠããåæã§ãïŒ
ffmpeg -i input.mp3 output.wav
æŠãçµãã£ãŠ
ãŸã æ€èšã®äœå°ããã ãèªåã®æè¡åäžããã¡ããã ããäžã®äžã®æè¡é²æ©ã®æ¹ãç§ããæ©ãã®ã¯ééããªãã®ã§æåŸ
ã
âæ¥åå¹çå
å®éã®äŒè°ããŒã¿ã䜿ã£ãŠè©ŠããŠã¿ãããšæããé³å£°ã®ããã¹ãåã¯ãZOOMããã粟床ãè¯ãã®ã§ã¯ãªãããšæã£ãŠãããé³å£°ã®ããã¹ãåã ããšèãããã䜿ããã®ã§ã¯ãªãããšæãã話è
åé¢ã¯çµæç®æšã®ïŒå²ãšãã£ããšããã ãã
å®éã®ïŒæéã«ãããäŒè°é³æºã®è§£æãšãªããšããŸããããããŸãã©ã®ãããã®æéãããããæ°ãããã§ã¯ããã2æéããããããå¯èœæ§ã¯ãããšæããããŒã¿ãåå²ããŠãè§£æäžã«çµãã£ãããŒã¿ãã粟æ»ãããšããããšãå¯èœãããããªãã
âæ±çšåã«åããŠ
ç¡æã®ã·ã¹ãã ãã䜿çšããŠããªãã®ã§ã誰ã«ã§ã䜿çšå¯èœã ãšæããã·ã¹ãã ã€ã³ã¹ããŒã«ããŠãPythonã¹ã¯ãªãããèµ°ãããã°äœ¿çšã§ããã®ã§ãã»ãã®æ¹ã«ã詊ããŠã»ãããšæã
âèªåDXæšé²
ä»åã¯ãããäžçªã®ãããªæ°ããããAIãæç€ºããŠããã¹ã¯ãªããã®äžã«æžããŠãããbushããšãPythonãã®æå³ãåãã£ãŠããªãã£ãã忬ããã¯ããŠãããã¡ã«ãCopilotãæç€ºããŠããã¹ã¯ãªãããèŠãŠãããã¯å€ã§ã¯ãªããïŒããããããã£ãšãããªãããããªãã®ïŒãšææïŒææ¡ãã§ããããã«ãªã£ãããŸãã«äºäººäžèã§ããããã
Copilotã¯ãããã«ãããããïŒãé²ããŠãããããã¯ãããªããšæã£ãŠãããLINEbotåãšãããªãã§ãããïŒãšæã£ãŠããã
âAIã¯ã¢ã·ã¹ã¿ã³ãã§ããããŒã ã®äžå¡
Copilotãšãããªã«å¯ãªæéããã£ãã®ã¯åããŠã ãèšããªãã«ãªã£ãŠãããšãéãæ¹åãžé£ããŠããããŠããŸãããã¯ããŽãŒã«ã«ãããŠã®è»éä¿®æ£ã¯äººéã ãªãšæã£ããç§ãæãã»ã©ç§ã®æ°æã¡ãåãã£ãŠã¯ããªããªãšïŒåœããåã ãïŒããã§ãé Œãã«ãªã仲éã§ããããšã¯ééããªããšæãã
åèãµã€ã