« ^ »

今日やった事 - 20240824

所要時間: 約 7分

いろんな事が難しい。できる事は少ない。もう生きるだけでせいいっぱいだ。

作業場所

僕は場所を転々として作業する事が多い。例えばカフェの作業などのオープンスペースであっても、セキュリティ面でも問題がないようにしている。

昨日に続き音声コミュニケーションの軽量AIを自分で実装してみる

先日から、この作業に夢中だ。有名な方のリポジトリをそのまま使えばできるはずなのだけれど、僕レベルではそれはできなかった。悲しいけれど、1ずつ足元を確認しながら実装を進めていく事にする。制限事項としては、ショボいM1 MacBook Airで動作させるという所だろうか。マイクからの入力は、ffmpegを使って取得したが、今回はsounddeviceを使う事にした。

reazonspeechでwavファイルを文字起こしする

from reazonspeech.nemo.asr.audio import audio_from_path
from reazonspeech.nemo.asr.transcribe import transcribe, load_model

audio = audio_from_path("./zun.wav")
model = load_model()
ret = transcribe(model, audio)

for ts in ret.segments:
    print(ts, end="")

print("\n")

もう少し実装をほじくり返してみる。

import sys
from reazonspeech.nemo.asr.audio import audio_from_path
from reazonspeech.nemo.asr.transcribe import transcribe, load_model
from reazonspeech.nemo.asr.interface import AudioData
from nemo.collections.asr.models import EncDecRNNTBPEModel

audio: AudioData = audio_from_path(sys.argv[1])

model = EncDecRNNTBPEModel.from_pretrained(
    'reazon-research/reazonspeech-nemo-v2',
    map_location="cpu")

ret = transcribe(model, audio)

for ts in ret.segments:
    print(ts, end="")

print("\n")

sounddeviceで音声を読み出す

import time
import sounddevice

def sd_callback(indata, outdata, frames, time, status):
    print(type(indata))

with sounddevice.Stream(samplerate=16000, dtype="int16",
                        channels=1, blocksize=512,
                        callback=sd_callback):
    while True:
        time.sleep(0.01)

sounddeviceで取得したデータをreazonspeechに渡す

import time
import numpy as np
import sounddevice
from nemo.collections.asr.models import EncDecRNNTBPEModel
from reazonspeech.nemo.asr.interface import AudioData
from reazonspeech.nemo.asr.transcribe import transcribe

model = EncDecRNNTBPEModel.from_pretrained(
    'reazon-research/reazonspeech-nemo-v2',
    map_location="cpu")

SAMPLE_RATE = 16000

def sd_callback(indata, outdata, frames, time, status):
    audio_int16 = indata

    if np.abs(audio_int16).max() > 0:
        mask_value = (1 / 32768)
    else:
        mask_value = 1

    audio_float32 = (
        audio_int16.astype('float32') * mask_value).squeeze()

    audio = AudioData(waveform=audio_float32, samplerate=SAMPLE_RATE)
    ret = transcribe(model, audio)

    for ts in ret.segments:
        print(ts, end="")
    print("\n")

with sounddevice.Stream(samplerate=SAMPLE_RATE, dtype="int16",
                        channels=1, blocksize=512,
                        callback=sd_callback):
    while True:
        time.sleep(0.01)

しかし、これでは「あ」が連発される。

発話検出する

https://github.com/snakers4/silero-vad

import torch
torch.set_num_threads(1)

model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad', model='silero_vad')
(get_speech_timestamps, _, read_audio, _, _) = utils

wav = read_audio('zun.wav')
speech_timestamps = get_speech_timestamps(wav, model)
print(speech_timestamps)

この結果は、"start"と"end"をキーとして持つ辞書のリストを返す。

[{'start': 1568, 'end': 36523}]

もう少し掘り下げて、ストリームを処理してみる。

https://github.com/snakers4/silero-vad/wiki/Examples-and-Dependencies#examples

どうでもいい事

僕は、とある事で親との縁を切っている。別に親が悪い人間とは思っていない。これからする事で親には大きな迷惑をかける事になる。連絡を断っている事で、その迷惑がかからないようにする事にはならないだろうけれど、まあもう関わっていなかったという事で、少しでもマシになればと考えている。親はことなかれ主義であり、行動力がなく、強い個人主義的な思想の持ち主だ。バブルの頃の世代っぽい考え方だなと思う。たまに連絡を送ってくるけれど、それは自分自身を安心させたいだけ。僕には、その行動自体が本当にくだらなく感じる。仕事を振った時も全力で取り組んでくれる事はなかった。後になって「もう一度やりたい」と言ってきたけれど、もう僕にその気はなかった。親に対して甘えているのかもしれない。それでも、今まで個人主義でやってきたんだから、老人になって介護が必要になっても僕は面倒を見るつもりはない。その前に僕が面倒を見れるような状況ではなくなっているだろうが。いずれにしてもクソすぎる事が多い。いずれにせよ、時間がかかってもうらぎりものは全員始末する。

未来の学び AIとテクノロジーで創る新時代の教育

(注意)以下の文章は、おおまかな内容を箇条書きし、それを元にChatGPTで出力した。

昨今の学校教育現場には、タブレットやPCといったデジタルデバイスが広範に導入されています。このこと自体は、情報技術の浸透と未来の教育環境を見据えた取り組みとして大変有意義です。しかし、現在の状態は果たして理想的といえるものなのでしょうか。残念ながら、現状に対して批判的な視点があるのも事実です。

多くの学校で、タブレットやPCはただ単に教科書の置き換えとして使用されるに留まっています。これでは、デバイスの故障や技術的トラブルが発生した際に、むしろデメリットしか生じません。教科書を紙からデジタルに置き換えるだけでは、学びの深化にはつながりにくいのです。同様に、動画を使った教育も進んでいますが、これもまた教科書をデジタルに変えただけの状況からさほど変わりません。

このような現状から抜け出し、より充実した教育環境を実現するにはどうすればよいのでしょうか。その一つの答えが「創作活動」にあると考えられます。技術や図工、音楽、小説、あるいはその他のモノづくりなど、様々な創作活動を通じて、子供たちに新たな学びの機会を提供することが重要です。創作活動は、ただ受動的に情報を受け取るのではなく、自ら考え、試行錯誤し、表現することを促します。

創作活動を通じて、子供たちは自然とハードウェアやソフトウェアの使い方を調べ、習得していきます。この過程で技術的なスキルが身につくだけでなく、自立した学びの姿勢も養われます。さらに、何を作りたいのか、本当にどうしたいのか、どのように進めたいのかといった自己の意志を明確にするための対話が必要です。この対話を通じて子供たちは、自分自身の目標や価値観を見つけ出し、それに向かって努力する力を身につけるのです。

このような創作活動を中心とした学びの過程では、必要に応じて数国英理社といった5教科の基礎知識も自然と身につけることができます。子供たちが何かを作り上げる過程で、それに必要な情報を調べ、学ぶことになるからです。これによって、学びが「目的のための手段」として実感を伴い、意味のあるものとなるのです。

教師の役割も大きく変わります。「教える」役割から「学ぶことをサポートする」役割へとシフトすることが求められます。教師は子供たちの主体的な学びを見守り、必要なサポートを提供し、時には回り道を許容する寛容さを持つことが重要です。また、振り返りを手助けすることで、子供たちが自身の学びを客観的に見つめ直し、次のステップへ進む力を養います。

ここでいう教師は、必ずしも学校にいる先生である必要はありません。AIやChatGPTのような技術も十分に代替可能です。むしろ、多様なコミュニケーション手段を取り入れることで、子供たちが多角的な視点から学ぶことができるようになるでしょう。特定の人物に依存せず、学びのサポートを受けられる環境を整備することが、これからの教育に求められます。

また、教育にはなるべくお金をかけない仕組みを構築することが必要です。これは、教育の機会を広く公平に提供するために重要なポイントです。デジタルデバイスの普及に伴い、オープンソースの教材やオンラインリソースが増えています。それらを有効活用することで、コストを抑えつつ質の高い教育を実現することが可能です。

これらの取り組みは、単なる理想論ではありません。実際に現場で試行錯誤しながら進めている事例も存在します。例えば、ある学校では、プロジェクトベースの学習を導入し、子供たちが自らの興味を追求する機会を提供しています。その中で、技術的なスキルを学び、クリエイティブな発想を発揮し、自らの学びを深めています。また、定期的な振り返りセッションを設けることで、学びの見直しと改善を継続的に行っています。

こうした実践の中で浮かび上がるのは、子供たちが主体的に学ぶ力を持ち、教師と共に協力しながら進めることの重要性です。そして、デジタルデバイスはあくまでツールであり、それをどのように活用するかが鍵となります。テクノロジーに依存せず、それを使いこなし、創作活動を通じて深い学びを実現することこそが、これからの教育の方向性と言えるでしょう。

以上を踏まえ、今後の学校教育には、タブレットやPCを効果的に活用しながら、創作活動を中心とした学びを推進することが求められます。多様なアプローチを取り入れ、子供たちが自らの力で学び、成長できる環境を整えることで、未来の社会を担う人材を育成していくことができると信じています。